import apiFetch from '@wordpress/api-fetch'; import { useCallback, useEffect, useRef, useState } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; export const UpdateMenuConfirm = ({ inputs, onConfirm, onCancel }) => { const [originalMenu, setOriginalMenu] = useState(''); const { replacements, id } = inputs ?? {}; const undoMenu = useCallback(() => { const nav = document.querySelector(`[data-extendify-menu-id="${id}"]`); if (nav && originalMenu) { nav.innerHTML = originalMenu; } }, [id, originalMenu]); const confirmed = useRef(false); useEffect(() => { if (!originalMenu) return; return () => { if (!confirmed.current) undoMenu(); }; }, [originalMenu]); const handleConfirm = () => { confirmed.current = true; onConfirm({ data: inputs }); }; useEffect(() => { const nav = document.querySelector(`[data-extendify-menu-id="${id}"]`); if (!nav) return; setOriginalMenu(nav.innerHTML); const abortController = new AbortController(); const fetchAndUpdateMenu = async () => { try { const html = await apiFetch({ method: 'POST', path: '/extendify/v1/agent/render-navigation', data: { content: replacements?.[0]?.updated }, signal: abortController.signal, }); if (nav && html) nav.innerHTML = html; } catch (error) { if (error.name !== 'AbortError') console.error('Failed to render navigation:', error); else throw error; } }; void fetchAndUpdateMenu(); return () => abortController.abort(); }, [replacements, id, setOriginalMenu]); return (
{__( 'The agent has made the changes in the browser. Please review and confirm.', 'extendify-local', )}