import { useState, useCallback, useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import { CheckIcon } from './icons/CheckIcon'; import { CloseIcon } from './icons/CloseIcon'; import { SpinnerIcon } from './icons/SpinnerIcon'; export default function SaveSearchModal({ onClose, onSave, onViewSearches, saving, error, }: { onClose: () => void; onSave: (name: string) => Promise; onViewSearches: () => void; saving: boolean; error: string | null; }) { const { t } = useTranslation(); const [name, setName] = useState(''); const [saved, setSaved] = useState(false); const handleSubmit = useCallback( async (e: React.FormEvent) => { e.preventDefault(); if (!name.trim() || saving) return; try { await onSave(name.trim()); setSaved(true); } catch { // Error displayed in modal } }, [name, saving, onSave] ); useEffect(() => { const handleKeyDown = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose(); }; document.addEventListener('keydown', handleKeyDown); return () => document.removeEventListener('keydown', handleKeyDown); }, [onClose]); return (
e.stopPropagation()} >

{saved ? t('saveSearch.saved') : t('saveSearch.title')}

{saved ? (

{t('saveSearch.savedSuccess')}

) : (
setName(e.target.value)} className="w-full px-3 py-2 text-sm rounded border border-warm-200 dark:border-warm-700 bg-white dark:bg-warm-800 text-navy-950 dark:text-white placeholder-warm-400 dark:placeholder-warm-500 outline-none focus:ring-2 ring-teal-400 dark:ring-teal-500" placeholder={t('saveSearch.namePlaceholder')} autoFocus />
{error &&

{error}

}
)}
); }