'use client'; import { useState } from 'react'; import { useTranslations } from 'next-intl'; import { X, FileText, Pencil, Trash2, Star, Copy, Search } from 'lucide-react'; import { cn } from '@/lib/utils'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { TemplateForm } from './template-form'; import { useTemplateStore } from '@/stores/template-store'; import { useFocusTrap } from '@/hooks/use-focus-trap'; import type { EmailTemplate } from '@/lib/template-types'; interface TemplateManagerModalProps { isOpen: boolean; onClose: () => void; } export function TemplateManagerModal({ isOpen, onClose }: TemplateManagerModalProps) { const t = useTranslations('templates'); const tSettings = useTranslations('settings.templates'); const { templates, addTemplate, updateTemplate, deleteTemplate, duplicateTemplate, toggleFavorite, searchTemplates, } = useTemplateStore(); const [editingId, setEditingId] = useState(null); const [isCreating, setIsCreating] = useState(false); const [deleteConfirmId, setDeleteConfirmId] = useState(null); const [searchQuery, setSearchQuery] = useState(''); const modalRef = useFocusTrap({ isActive: isOpen, onEscape: () => { if (isCreating || editingId) { setIsCreating(false); setEditingId(null); } else { onClose(); } }, restoreFocus: true, }); const filtered = searchQuery ? searchTemplates(searchQuery) : templates; const handleSave = (data: Omit) => { if (editingId) { updateTemplate(editingId, data); setEditingId(null); } else { addTemplate(data); setIsCreating(false); } }; const handleDelete = (id: string) => { deleteTemplate(id); setDeleteConfirmId(null); }; if (!isOpen) return null; return (

{tSettings('title')}

{!isCreating && !editingId && (
setSearchQuery(e.target.value)} placeholder={t('search_placeholder')} className="pl-9" />
)} {isCreating && (

{tSettings('add')}

setIsCreating(false)} />
)} {editingId && (

{tSettings('edit')}

t.id === editingId)} onSave={handleSave} onCancel={() => setEditingId(null)} />
)}
{filtered.map((template) => (

{template.name}

{template.category && ( {template.category} )}
{template.subject && (

{template.subject}

)}
{deleteConfirmId === template.id ? (
) : ( )}
))} {filtered.length === 0 && !isCreating && (

{searchQuery ? t('no_results') : tSettings('no_templates')}

)}
); }