'use client'; import { useState, useMemo } from 'react'; import { useTranslations } from 'next-intl'; import { X } from 'lucide-react'; import { cn } from '@/lib/utils'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { substitutePlaceholders, isBuiltInPlaceholder } from '@/lib/template-utils'; import { useFocusTrap } from '@/hooks/use-focus-trap'; import type { EmailTemplate } from '@/lib/template-types'; interface PlaceholderFillModalProps { template: EmailTemplate; placeholders: string[]; autoFilled: Record; onConfirm: (values: Record) => void; onSkip: () => void; onClose: () => void; } export function PlaceholderFillModal({ template, placeholders, autoFilled, onConfirm, onSkip, onClose, }: PlaceholderFillModalProps) { const t = useTranslations('templates'); const [values, setValues] = useState>(() => { const initial: Record = {}; for (const p of placeholders) { initial[p] = autoFilled[p] || ''; } return initial; }); const modalRef = useFocusTrap({ isActive: true, onEscape: onClose, restoreFocus: true, }); const preview = useMemo(() => { return substitutePlaceholders(template.body, values); }, [template.body, values]); return (

{t('fill_placeholders')}

{placeholders.map((p) => (
setValues((prev) => ({ ...prev, [p]: e.target.value }))} placeholder={t('enter_value')} className="mt-1" />
))} {preview && (

{t('preview')}

{template.isHTML ?
: preview}
)}
); }