id, 'formipay') !== false; $is_formipay_cpt = $screen->base === 'post' && in_array($screen->post_type, ['formipay-coupon', 'formipay-product', 'formipay-form']); if (!$is_formipay_admin && !$is_formipay_cpt) { return; } // Enqueue React build assets $build_dir = FORMIPAY_PATH . 'build'; $build_url = FORMIPAY_URL . 'build'; if (!file_exists($build_dir . '/admin.asset.php')) { error_log('[Formipay] Build files not found at: ' . $build_dir . '/admin.asset.php'); return; // Build not generated yet } $assets_file = require $build_dir . '/admin.asset.php'; $dependencies = $assets_file['dependencies'] ?? []; // Filter out icon build dependencies - they're bundled, not separate scripts $original_count = count($dependencies); $dependencies = array_values(array_filter($dependencies, function($dep) { return strpos($dep, 'wp-icons/build/') === false; })); error_log('[Formipay] Filtered dependencies: ' . $original_count . ' -> ' . count($dependencies)); $version = $assets_file['version'] ?? FORMIPAY_VERSION; wp_enqueue_style( 'formipay-admin-style', $build_url . '/admin.css', [], $version ); wp_enqueue_script( 'formipay-admin', $build_url . '/admin.js', $dependencies, $version, true ); // Localize script with required data $data = apply_filters('formipay/admin/data', [ 'ajaxUrl' => admin_url('admin-ajax.php'), 'restUrl' => rest_url('formipay/v1'), 'nonce' => wp_create_nonce('formipay-admin'), 'pluginUrl' => FORMIPAY_URL, 'siteUrl' => site_url(), ]); // Debug logging error_log('[Formipay] Enqueuing React assets on screen: ' . $screen->id); error_log('[Formipay] Page data: ' . wp_json_encode($data)); wp_localize_script('formipay-admin', 'formipayAdmin', $data); } public function localize_data( $data ) { $screen = get_current_screen(); $page = ''; // Determine current page based on screen ID if ( $screen->id === 'formipay_page_formipay-orders' ) { $page = 'orders'; } elseif ( $screen->id === 'formipay_page_formipay-customers' ) { $page = 'customers'; } elseif ( $screen->id === 'formipay_page_formipay-products' ) { $page = 'products'; } elseif ( $screen->id === 'toplevel_page_formipay' ) { $page = 'forms'; } elseif ( $screen->id === 'formipay_page_formipay-coupons' ) { $page = 'coupons'; } elseif ( $screen->id === 'formipay_page_formipay-access' ) { $page = 'access'; } elseif ( $screen->id === 'formipay_page_formipay-licenses' ) { $page = 'licenses'; } if ( $page ) { $data[$page] = $this->get_page_data( $page ); } return $data; } private function get_page_data( $page ) { $data = []; switch ( $page ) { case 'orders': $data['statusOptions'] = formipay_order_status_list(); break; case 'customers': $data['columns'] = [ 'id' => __( 'ID', 'formipay' ), 'name' => __( 'Name', 'formipay' ), 'email' => __( 'Email', 'formipay' ), 'phone' => __( 'Phone', 'formipay' ), 'total_order' => __( 'Total Orders', 'formipay' ), ]; break; case 'products': $data['currencies'] = formipay_global_currency_options(); break; case 'forms': case 'coupons': case 'access': case 'licenses': // These pages fetch data via AJAX, no initial data needed $data = []; break; } return $data; } /** * Render React mount point */ public static function render_mount_point( $page ) { printf( '
Loading %s...
', esc_attr( $page ), esc_html( ucfirst( $page ) ) ); } }