// 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
{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
;
})}
{!isNew ? (
confirmDel ? (
{t.vault.editor.delete_confirm}
) : (
)
) :
}
>;
};
Object.assign(window, { VaultPage, CassettaEditor, ActivateCassettaModal });