// Archiv tab — folder-organized archive of all generated docs. // Sidebar: folder structure by kind. Main: file list. Right: preview. function DocsArchiv({ docs, setDocs, rentals, equipment, company, templates, go, initialDocId }) { const t = useTheme(); const toast = useToast(); const [folder, setFolder] = useState('alle'); const [query, setQuery] = useState(''); const [selId, setSelId] = useState(initialDocId || (docs[0] && docs[0].id)); const [confirmDel, setConfirmDel] = useState(null); useEffect(() => { if (initialDocId) setSelId(initialDocId); }, [initialDocId]); const folders = useMemo(() => { const groups = { vertrag: docs.filter((d) => d.kind === 'vertrag').length, rechnung: docs.filter((d) => d.kind === 'rechnung').length, protokoll: docs.filter((d) => d.kind === 'protokoll' || d.kind === 'rueckgabe').length, reservierung: docs.filter((d) => d.kind === 'reservierung' || d.kind === 'erinnerung' || d.kind === 'inserat').length, custom: docs.filter((d) => !['vertrag','rechnung','protokoll','rueckgabe','reservierung','erinnerung','inserat'].includes(d.kind)).length, }; return [ { id: 'alle', label: 'Alle Dokumente', count: docs.length, icon: icons.folder, color: t.text }, { id: 'vertrag', label: 'Mietverträge', count: groups.vertrag, icon: icons.fileText, color: '#007AFF' }, { id: 'rechnung', label: 'Rechnungen', count: groups.rechnung, icon: icons.invoice, color: '#34C759' }, { id: 'protokoll', label: 'Übergabeprotokolle', count: groups.protokoll, icon: icons.doc, color: '#AF52DE' }, { id: 'schnelltext', label: 'Schnelltexte', count: groups.reservierung,icon: icons.mail, color: '#5856D6' }, { id: 'custom', label: 'Sonstiges', count: groups.custom, icon: icons.folder, color: '#8E8E93' }, ]; }, [docs, t.text]); const folderMatch = (d) => { if (folder === 'alle') return true; if (folder === 'vertrag') return d.kind === 'vertrag'; if (folder === 'rechnung') return d.kind === 'rechnung'; if (folder === 'protokoll') return d.kind === 'protokoll' || d.kind === 'rueckgabe'; if (folder === 'schnelltext') return ['reservierung','erinnerung','inserat'].includes(d.kind); if (folder === 'custom') return !['vertrag','rechnung','protokoll','rueckgabe','reservierung','erinnerung','inserat'].includes(d.kind); return false; }; const list = useMemo(() => { const filtered = docs.filter(folderMatch).filter((d) => { if (!query) return true; const r = rentals.find((x) => x.id === d.rentalId); return (d.title + ' ' + (r ? r.tenantName : '')).toLowerCase().includes(query.toLowerCase()); }); return filtered.sort((a, b) => (b.createdISO || '').localeCompare(a.createdISO || '')); }, [docs, folder, query, rentals]); const sel = docs.find((d) => d.id === selId) || list[0]; const selRental = sel && rentals.find((r) => r.id === sel.rentalId); const selEq = selRental && equipment.find((e) => e.id === selRental.equipmentId); const del = (d) => { setDocs((prev) => prev.filter((x) => x.id !== d.id)); if (selId === d.id) setSelId(null); setConfirmDel(null); toast('Dokument entfernt'); }; const copyText = (d) => { if (!d.body) return; try { navigator.clipboard.writeText(d.body); toast('Text kopiert'); } catch (e) { toast('Kopieren fehlgeschlagen'); } }; // Format-of-file label const fileBadge = (d) => d.format === 'text' ? 'TXT' : 'PDF'; return (