// memories.jsx — MemoriesPage, CirclePage, BequestsPage, ProfilePage // t, useState etc. available from components.jsx (loaded first) // ─── MemoryDrawer ───────────────────────────────────────────────────────────── function MemoryDrawer({ memory, people, onClose, onSave }) { const isNew = !memory.id; const [editing, setEditing] = useState(isNew); const [kind, setKind] = useState(memory.kind || 'letter'); const [title, setTitle] = useState(memory.title || ''); const [body, setBody] = useState(memory.body || ''); const [assignees, setAssignees] = useState(memory.assignees || []); const kindOptions = [ { id: 'letter', label: t.memories.kinds.letter, icon: 'letter' }, { id: 'audio', label: t.memories.kinds.audio, icon: 'audio' }, { id: 'photo', label: t.memories.kinds.photo, icon: 'photo' }, { id: 'video', label: t.memories.kinds.video, icon: 'video' }, { id: 'doc', label: t.memories.kinds.doc, icon: 'doc' }, ]; const kindClass = { letter: 'mem-letter', audio: 'mem-audio', photo: 'mem-photo', video: 'mem-video', doc: 'mem-doc' }; const kindIconColor = { letter: 'var(--ink)', audio: '#fff', photo: 'var(--jade-800)', video: '#fff', doc: 'var(--gr-500)' }; const cls = kindClass[kind] || 'mem-doc'; const iconColor = kindIconColor[kind] || 'var(--ink)'; function toggleAssignee(id) { setAssignees(prev => prev.includes(id) ? prev.filter(x => x !== id) : [...prev, id]); } function handleSave() { onSave({ ...memory, id: memory.id || ('m' + Date.now()), kind, title, body, assignees, date: memory.date || new Date().toISOString().split('T')[0], }); onClose(); } const assignedPeople = assignees.map(id => people.find(p => p.id === id)).filter(Boolean); return ( <>
{/* Colored cover at top */}
{t.memories.kinds[kind]}
{/* Large centered icon */}
{/* Letter preview inside cover */} {!editing && kind === 'letter' && body && (
{body}
)}
{/* Kind selector (edit/new only) */} {editing && (
Tipo
{kindOptions.map(k => ( ))}
)} {/* Title */} {editing ? ( setTitle(e.target.value)} style={{ marginBottom: 12, fontSize: 15, fontWeight: 500 }} autoFocus={isNew} /> ) : (
{title}
)} {/* Date (view) */} {!editing && memory.date && (
{new Date(memory.date).toLocaleDateString('it-IT', { year: 'numeric', month: 'long', day: 'numeric' })}
)} {/* Body textarea (edit) */} {editing && (kind === 'letter' || kind === 'doc') && (