// destiny.jsx — DestinyDrawer slide-in panel // t and React hooks are available from components.jsx (loaded first) function DestinyDrawer({ item, itemType = 'service', people, onSave, onClose }) { const [selectedDestiny, setSelectedDestiny] = useState(item?.destiny || null); const [selectedPeople, setSelectedPeople] = useState(item?.assignees || []); const [note, setNote] = useState(item?.note || ''); // Reset when item changes useEffect(() => { setSelectedDestiny(item?.destiny || null); setSelectedPeople(item?.assignees || []); setNote(item?.note || ''); }, [item?.id]); if (!item) return null; const destinyOptions = [ { id: 'people', label: t.destiny.people, desc: t.destiny.people_desc, color: 'var(--destiny-people)', icon: 'people', }, { id: 'oblio', label: t.destiny.oblio, desc: t.destiny.oblio_desc, color: 'var(--destiny-oblio)', icon: 'oblio', }, { id: 'hidden', label: t.destiny.hidden, desc: t.destiny.hidden_desc, color: 'var(--destiny-hidden)', icon: 'eye_off', }, ]; function togglePerson(id) { setSelectedPeople(prev => prev.includes(id) ? prev.filter(x => x !== id) : [...prev, id] ); } function handleSave() { onSave({ ...item, destiny: selectedDestiny, assignees: selectedDestiny === 'people' ? selectedPeople : [], note, }); onClose(); } return ( <>
{/* Header */}
{itemType === 'service' ? 'Servizio digitale' : itemType === 'asset' ? 'Asset reale' : 'Memoria'}
{itemType === 'service' && item.icon && ( )} {itemType === 'asset' && (
{item.icon}
)}
{item.name || item.title}
{item.email && (
{item.email}
)} {item.category && (
{item.category}
)}
{/* Body */}
{/* Destiny section title */}
{t.destiny.title}
{t.destiny.sub}
{/* Destiny options */}
{destinyOptions.map(opt => (
setSelectedDestiny(opt.id)} >
{opt.label} {selectedDestiny === opt.id && ( )}
{opt.desc}
))}
{/* People picker — shown when "people" selected */} {selectedDestiny === 'people' && (
{t.destiny.choose_people}
{people.map(p => { const sel = selectedPeople.includes(p.id); return (
togglePerson(p.id)} >
{p.name}
{p.rel}
{sel && (
)}
); })}
{selectedPeople.length > 0 && (
{t.destiny.only_see}
)}
)} {/* Note */}
Nota privata