"use client"; import { useState } from 'react'; import { useTranslations } from 'next-intl'; import { useSettingsStore } from '@/stores/settings-store'; import type { SendDelaySeconds } from '@/stores/settings-store'; import { useAuthStore } from '@/stores/auth-store'; import { SettingsSection, SettingItem, Select, ToggleSwitch } from './settings-section'; import { X } from 'lucide-react'; import { SUPPORTED_SUB_ADDRESS_DELIMITERS, isSupportedSubAddressDelimiter, isValidSubAddressDelimiter, } from '@/lib/sub-addressing'; const CUSTOM_DELIMITER_SENTINEL = '__custom__'; const DEFAULT_CUSTOM_DELIMITER = '~'; export function ComposingSettings() { const t = useTranslations('settings.email_behavior'); const [newKeyword, setNewKeyword] = useState(''); const { autoSelectReplyIdentity, plainTextMode, attachmentReminderEnabled, attachmentReminderKeywords, sendDelaySeconds, subAddressDelimiter, signaturePosition, signatureSeparatorEnabled, requestReadReceiptDefault, readReceiptResponse, updateSetting, } = useSettingsStore(); const { client } = useAuthStore(); const delayedSendSupported = client?.hasDelayedSend() ?? false; return ( updateSetting('autoSelectReplyIdentity', checked)} /> updateSetting('plainTextMode', checked)} />
updateSetting('signaturePosition', value as 'above_quote' | 'below_quote')} options={[ { value: 'above_quote', label: t('signature_position.above_quote') }, { value: 'below_quote', label: t('signature_position.below_quote') }, ]} /> updateSetting('signatureSeparatorEnabled', checked)} /> updateSetting('requestReadReceiptDefault', checked)} /> { if (value === CUSTOM_DELIMITER_SENTINEL) { if (isSupportedSubAddressDelimiter(subAddressDelimiter)) { updateSetting('subAddressDelimiter', DEFAULT_CUSTOM_DELIMITER); } } else { updateSetting('subAddressDelimiter', value); } }} options={[ ...SUPPORTED_SUB_ADDRESS_DELIMITERS.map((delim) => ({ value: delim, label: t('sub_address_delimiter.option', { delimiter: delim }), })), { value: CUSTOM_DELIMITER_SENTINEL, label: t('sub_address_delimiter.custom') }, ]} /> {!isSupportedSubAddressDelimiter(subAddressDelimiter) && ( { const next = e.target.value.slice(0, 1); if (next && isValidSubAddressDelimiter(next)) { updateSetting('subAddressDelimiter', next); } }} aria-label={t('sub_address_delimiter.custom_input_label')} placeholder={DEFAULT_CUSTOM_DELIMITER} className="w-16 px-2 py-1 text-sm font-mono text-center bg-background border border-border rounded-md focus:outline-none focus:ring-1 focus:ring-ring" /> )}
updateSetting('attachmentReminderEnabled', checked)} /> {attachmentReminderEnabled && (

{t('attachment_reminder.keywords_description')}

{attachmentReminderKeywords.map((kw) => ( {kw} ))}
{ e.preventDefault(); const trimmed = newKeyword.trim().toLowerCase(); if (trimmed && !attachmentReminderKeywords.includes(trimmed)) { updateSetting('attachmentReminderKeywords', [...attachmentReminderKeywords, trimmed]); } setNewKeyword(''); }} > setNewKeyword(e.target.value)} placeholder={t('attachment_reminder.add_placeholder')} className="flex-1 min-w-0 px-2 py-1 text-sm bg-background border border-border rounded-md focus:outline-none focus:ring-1 focus:ring-ring" />
)}
); }