'use client'; import { useState } from 'react'; import { useTranslations } from 'next-intl'; import { Button } from '@/components/ui/button'; import { ConfirmDialog } from '@/components/ui/confirm-dialog'; import { SettingsSection, SettingItem, Select } from './settings-section'; import { SignatureEditorModal } from './signature-editor-modal'; import { useSignatureStore, type Signature } from '@/stores/signature-store'; import { useIdentityStore } from '@/stores/identity-store'; import { truncateText } from '@/lib/utils'; import { Plus, Pencil, Copy, Trash2, ChevronRight, } from 'lucide-react'; export function SignatureSettings() { const t = useTranslations('signatures'); const tCommon = useTranslations('common'); const { signatures, defaultSignatureId, replySignatureId, identitySignatureMap, addSignature, updateSignature, deleteSignature, duplicateSignature, setDefaultSignatureId, setReplySignatureId, setIdentitySignature, } = useSignatureStore(); const identities = useIdentityStore((s) => s.identities); const [editingSignature, setEditingSignature] = useState(null); const [showEditor, setShowEditor] = useState(false); const [deleteTarget, setDeleteTarget] = useState(null); const handleAdd = () => { setEditingSignature(null); setShowEditor(true); }; const handleEdit = (sig: Signature) => { setEditingSignature(sig); setShowEditor(true); }; const handleDuplicate = (id: string) => { duplicateSignature(id); }; const handleDeleteConfirm = () => { if (deleteTarget) { deleteSignature(deleteTarget.id); setDeleteTarget(null); } }; const handleSave = (data: { name: string; body: string; plainText: string }) => { if (editingSignature) { updateSignature(editingSignature.id, data); } else { addSignature(data); } setShowEditor(false); setEditingSignature(null); }; const signatureOptions = [ { value: '', label: t('no_signature') }, ...signatures.map((sig) => ({ value: sig.id, label: sig.name })), ]; return ( <>
setReplySignatureId(value || null)} options={signatureOptions} ariaLabel={t('reply_signature.label')} />
{identities.length > 0 && (
{identities.map((identity) => { const mapping = identitySignatureMap[identity.id] ?? {}; const identitySigOptions = [ { value: '', label: t('use_global_default') }, ...signatures.map((sig) => ({ value: sig.id, label: sig.name })), ]; return (
{identity.name ? `${identity.name} <${identity.email}>` : identity.email}
{t('default')}
{t('reply')}
); })}
)}

{t('your_signatures', { count: signatures.length })}

{signatures.length === 0 ? (

{t('no_signatures')}

) : (
{signatures.map((sig) => (
))}
)}
{showEditor && ( { setShowEditor(false); setEditingSignature(null); }} /> )} setDeleteTarget(null)} onConfirm={handleDeleteConfirm} title={t('delete_title')} message={t('delete_message', { name: deleteTarget?.name ?? '' })} variant="destructive" confirmText={tCommon('delete')} /> ); }