// WealthIntelligence — Vault page (matrix view) + cassetta editor + activate modal const VaultPage = ({state, t, openCassettaEditor, togglePersonOnCassetta, setCassettaActivated}) => { const [filter, setFilter] = useState('all'); // all | permanent | temporary const [activating, setActivating] = useState(null); // cassetta to activate const filtered = state.cassette.filter(c => filter==='all' || c.trigger===filter); const counts = { all: state.cassette.length, permanent: state.cassette.filter(c=>c.trigger==='permanent').length, temporary: state.cassette.filter(c=>c.trigger==='temporary').length, }; return
openCassettaEditor()}>{t.vault.add}} /> {/* Trigger filter chips */}
{filtered.length === 0 ? (

{t.vault.empty}

) : (
{state.people.map(p => ( ))} {filtered.map(c => ( {state.people.map(p => { const on = c.assignees.includes(p.id); return ; })} ))}
{t.vault.col_cassetta} {t.vault.col_trigger} {t.vault.col_items}
{p.name.split(' ')[0]}
{t.vault.col_actions}
openCassettaEditor(c)}>
{c.name}
{c.activated ? {t.vault.activated} : Inattiva}
{c.itemIds.length} togglePersonOnCassetta(c.id, p.id)} title={`${on?'Rimuovi':'Aggiungi'} ${p.name}`}>
{c.activated ? ( ) : ( )}
)} {activating && ( setActivating(null)} onConfirm={()=>{ setCassettaActivated(activating.id, true); setActivating(null); }} /> )}
; }; // ------- Activate cassetta modal ------- const ActivateCassettaModal = ({cassetta, t, onClose, onConfirm}) => { const isTemp = cassetta.trigger === 'temporary'; return <>
{cassetta.name}

{isTemp ? t.vault.activate_modal.sub_temporary : t.vault.activate_modal.sub_permanent}

; }; // ------- Cassetta editor (drawer) ------- const CassettaEditor = ({cassetta, isNew, state, t, onClose, onSave, onDelete}) => { const [draft, setDraft] = useState(() => cassetta || { id:null, name:'', icon:'◇', color:'#27666D', trigger:'permanent', assignees:[], itemIds:[], note:'', }); const [confirmDel, setConfirmDel] = useState(false); const valid = draft.name.trim().length > 0; const togglePerson = (pid) => { setDraft(d => ({ ...d, assignees: d.assignees.includes(pid) ? d.assignees.filter(x=>x!==pid) : [...d.assignees, pid] })); }; const toggleItem = (iid) => { setDraft(d => ({ ...d, itemIds: d.itemIds.includes(iid) ? d.itemIds.filter(x=>x!==iid) : [...d.itemIds, iid] })); }; return <>
setDraft({...draft, name:e.target.value})}/>
{window.WI.ICON_OPTIONS.map(ic => ( ))}
{window.WI.COLOR_OPTIONS.map(co => (
{window.WI.TRIGGERS.map(tr => ( ))}
{state.people.map(p => { const on = draft.assignees.includes(p.id); return ; })}
{state.inventory.map(it => { const on = draft.itemIds.includes(it.id); return ; })}