Extrova). * * @package Extrova */ declare( strict_types=1 ); namespace Extrova\Admin; defined( 'ABSPATH' ) || exit; /** * Adds the submenu under WooCommerce (no top-level menu) and the React mount point. * * @since 1.0.0 */ final class AdminPage { public const SLUG = 'extrova'; /** * Hook suffix returned by add_submenu_page(). * * @var string */ private string $hook_suffix = ''; /** * Constructor. * * @param Assets $assets Assets. */ public function __construct( private Assets $assets ) {} /** * Registers the submenu (`admin_menu`, priority 60 so WooCommerce exists). */ public function register_menu(): void { $suffix = add_submenu_page( 'woocommerce', __( 'Extrova', 'extrova' ), __( 'Extrova', 'extrova' ), Capability::name(), self::SLUG, array( $this, 'render' ) ); if ( is_string( $suffix ) ) { $this->hook_suffix = $suffix; } } /** * Enqueues assets only on this screen (`admin_enqueue_scripts`). * * @param string $hook_suffix Current screen hook suffix. */ public function enqueue( $hook_suffix ): void { if ( '' === $this->hook_suffix || $hook_suffix !== $this->hook_suffix ) { return; } $this->assets->enqueue( (string) $hook_suffix ); } /** * Renders the mount point. */ public function render(): void { if ( ! Capability::check() ) { wp_die( esc_html__( 'Sorry, you are not allowed to access this page.', 'extrova' ) ); } ?>