import * as React from 'react'; import { useField } from '@strapi/admin/strapi-admin'; import { useHasInputPopoverParent } from '../components/InputPopover.mjs'; import { usePreviewContext } from '../pages/Preview.mjs'; import { INTERNAL_EVENTS } from '../utils/constants.mjs'; import { getSendMessage } from '../utils/getSendMessage.mjs'; function usePreviewInputManager(name, attribute) { const iframe = usePreviewContext('usePreviewInputManager', (state)=>state.iframeRef, false); const setPopoverField = usePreviewContext('usePreviewInputManager', (state)=>state.setPopoverField, false); const hasInputPopoverParent = useHasInputPopoverParent(); const { value } = useField(name); const { type } = attribute; React.useEffect(()=>{ if (!iframe || !type) { return; } /** * Only send message if the field is not a data structure (component, dynamic zone) * because we already send events for their fields */ if (![ 'component', 'dynamiczone' ].includes(type)) { const sendMessage = getSendMessage(iframe); sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_CHANGE, { field: name, value }); } }, [ name, value, iframe, type ]); // Track previous value to detect media deletion const prevValueRef = React.useRef(value); React.useEffect(()=>{ // Only run inside popover for media fields if (!hasInputPopoverParent || !setPopoverField || type !== 'media') { return; } const currentValue = value; const previousValue = prevValueRef.current; // Check if we transitioned from having a value to null/empty const hadValue = previousValue != null && (Array.isArray(previousValue) ? previousValue.length > 0 : true); const hasNoValue = currentValue == null || (Array.isArray(currentValue) ? currentValue.length === 0 : false); if (hadValue && hasNoValue) { // Media was deleted, close the popover setPopoverField(null); } // Update ref for next comparison prevValueRef.current = currentValue; }, [ value, hasInputPopoverParent, setPopoverField, type ]); const sendMessage = getSendMessage(iframe); return { onFocus: ()=>{ if (hasInputPopoverParent) return; sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_FOCUS, { field: name }); }, onBlur: ()=>{ if (hasInputPopoverParent) return; setPopoverField?.(null); sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_BLUR, { field: name }); } }; } export { usePreviewInputManager }; //# sourceMappingURL=usePreviewInputManager.mjs.map