import { Button, Modal, TextareaControl, TextControl, FormTokenField, CheckboxControl } from '@wordpress/components'; import { createRoot, useState, useEffect } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; import CloseIcon from '@/assets/close'; import { filterAIIconWhite } from '@/assets/filter-logo'; import { useGenerateContentModal, hideGenerateContentModal } from './store'; const ModalContainer = () => { const { visible, blockName, defaultPrompt, defaultKeywords, defaultLength, onSubmit } = useGenerateContentModal(); const [prompt, setPrompt] = useState(''); const [keywords, setKeywords] = useState([]); const [length, setLength] = useState(''); const [append, setAppend] = useState(false); // Re-seed the form whenever the modal is opened so a re-open after a prior // generation doesn't carry the old text over by surprise. We also reset to // empty defaults when the caller didn't supply any. useEffect(() => { if (visible) { setPrompt(defaultPrompt ?? ''); setKeywords(defaultKeywords ?? []); setLength(defaultLength ?? ''); setAppend(false); } }, [visible, defaultPrompt, defaultKeywords, defaultLength]); if (!visible) { return null; } const onClose = () => { hideGenerateContentModal(); }; const onGenerate = () => { const trimmedPrompt = prompt.trim(); if (!trimmedPrompt || !onSubmit) { return; } const cleanedKeywords = keywords.map((k) => k.trim()).filter(Boolean); onSubmit({ prompt: trimmedPrompt, keywords: cleanedKeywords, length: length.trim(), append }); hideGenerateContentModal(); }; // Soften the title when we know the block type so users get a small // confirmation of which block their text will land in. const blockLabel = (() => { switch (blockName) { case 'core/heading': return __('heading', 'filter-ai'); case 'core/list-item': return __('list item', 'filter-ai'); case 'core/paragraph': default: return __('paragraph', 'filter-ai'); } })(); return (

{__('Generate content', 'filter-ai')}

{__('Filter AI will write text directly into your selected', 'filter-ai')} {blockLabel}.

setKeywords(tokens.map((t) => String(t)))} placeholder={__('Add keywords to incorporate', 'filter-ai')} />

{__('AI generated content may contain errors, please review before continuing.', 'filter-ai')}

); }; const container = document.createElement('div'); container.id = 'filter-ai-generate-content-modal-container'; document.body.appendChild(container); const root = createRoot(container); root.render();