import React, { useState, useEffect } from 'react'; import { MeetingDoc } from '../types'; import { Filter, X } from 'lucide-react'; interface DocFilterBarProps { docs: MeetingDoc[]; onFilterChange: (filteredDocs: MeetingDoc[]) => void; } const DocFilterBar: React.FC = ({ docs, onFilterChange }) => { // Extract unique values const allTypes = Array.from(new Set(docs.map(d => d.Type))).sort(); const allStatuses = Array.from(new Set(docs.map(d => d['TDoc Status']))).sort(); const allAgendas = Array.from(new Set(docs.map(d => d['Agenda item description']))).sort(); // Default selections const defaultTypes = ["LS out", "LS in", "pCR", "CR"]; const defaultStatuses = ["noted", "revised", "approved", "agreed"]; // State const [selectedTypes, setSelectedTypes] = useState([]); const [selectedStatuses, setSelectedStatuses] = useState([]); const [selectedAgendas, setSelectedAgendas] = useState([]); // Initialize defaults when docs change useEffect(() => { if (docs.length > 0) { const initialTypes = allTypes.filter(t => defaultTypes.includes(t)); // If no default types match, maybe select all or none? Let's stick to defaults. // If the default list is empty (none found), user can select manually. setSelectedTypes(initialTypes.length > 0 ? initialTypes : []); const initialStatuses = allStatuses.filter(s => defaultStatuses.includes(s)); setSelectedStatuses(initialStatuses.length > 0 ? initialStatuses : []); // Select all agendas by default setSelectedAgendas(allAgendas); } }, [docs]); // Re-run when docs source changes // Filter logic useEffect(() => { const filtered = docs.filter(doc => { const typeMatch = selectedTypes.length === 0 || selectedTypes.includes(doc.Type); const statusMatch = selectedStatuses.length === 0 || selectedStatuses.includes(doc['TDoc Status']); const agendaMatch = selectedAgendas.length === 0 || selectedAgendas.includes(doc['Agenda item description']); return typeMatch && statusMatch && agendaMatch; }); onFilterChange(filtered); }, [selectedTypes, selectedStatuses, selectedAgendas, docs]); const toggleSelection = (item: string, current: string[], setter: (val: string[]) => void) => { if (current.includes(item)) { setter(current.filter(i => i !== item)); } else { setter([...current, item]); } }; const toggleAll = (all: string[], current: string[], setter: (val: string[]) => void) => { if (current.length === all.length) { setter([]); } else { setter(all); } }; if (docs.length === 0) return null; return (

Filter Documents

{docs.length} total docs
{/* Type Filter */}
{allTypes.map(type => ( ))}
{/* Status Filter */}
{allStatuses.map(status => ( ))}
{/* Agenda Filter */}
{allAgendas.map(agenda => ( ))}
); }; export default DocFilterBar;