import { useState, useEffect } from 'react'; import type { MetaField } from '@/components/MetaFields'; interface MetaFieldsRegistry { orders: MetaField[]; products: MetaField[]; } // Global registry exposed by PHP via wp_localize_script declare global { interface Window { WooNooWMetaFields?: MetaFieldsRegistry; } } /** * useMetaFields Hook * * Retrieves registered meta fields from global registry (set by PHP). * Part of Level 1 compatibility - allows plugins to register their fields * via PHP filters, which are then exposed to the frontend. * * Zero coupling with specific plugins - just reads the registry. * * @param type - 'orders' or 'products' * @returns Array of registered meta fields * * @example * ```tsx * const metaFields = useMetaFields('orders'); * * return ( * * ); * ``` */ export function useMetaFields(type: 'orders' | 'products'): MetaField[] { const [fields, setFields] = useState([]); useEffect(() => { // Get fields from global registry (set by PHP via wp_localize_script) const registry = window.WooNooWMetaFields || { orders: [], products: [] }; setFields(registry[type] || []); // Listen for dynamic field registration (for future extensibility) const handleFieldsUpdated = (e: CustomEvent) => { if (e.detail.type === type) { setFields(e.detail.fields); } }; window.addEventListener( 'woonoow:meta_fields_updated', handleFieldsUpdated as EventListener ); return () => { window.removeEventListener( 'woonoow:meta_fields_updated', handleFieldsUpdated as EventListener ); }; }, [type]); return fields; }