// NotesSearchFilter Component
// Advanced multi-criteria filtering for notes
function NotesSearchFilter({ metadata, activeFilters, onFilterChange }) {
const [localFilters, setLocalFilters] = useState(activeFilters || {
subject: null,
group: null,
timeline: null
});
const timelineOptions = [
{ value: 'today', label: '📅 Today', emoji: '📅' },
{ value: 'yesterday', label: '📆 Yesterday', emoji: '📆' },
{ value: 'this_week', label: '📊 This Week', emoji: '📊' },
{ value: 'this_month', label: '📈 This Month', emoji: '📈' },
{ value: 'older', label: '📚 Older', emoji: '📚' }
];
const updateFilter = (key, value) => {
const newFilters = { ...localFilters, [key]: value };
setLocalFilters(newFilters);
if (onFilterChange) {
onFilterChange(newFilters);
}
};
const clearFilters = () => {
const emptyFilters = { subject: null, group: null, timeline: null };
setLocalFilters(emptyFilters);
if (onFilterChange) {
onFilterChange(emptyFilters);
}
};
const getActiveFilterCount = () => {
return Object.values(localFilters).filter(Boolean).length;
};
const removeFilter = (key) => {
updateFilter(key, null);
};
return (
{/* Header */}
{/* 🔍 */}
{getActiveFilterCount() > 0 && (
{getActiveFilterCount()}
)}
{getActiveFilterCount() > 0 && (
)}
{/* Subject and Group Dropdowns */}
{/* Subject Filter */}
{/* Group Filter */}
{/* Timeline Pills */}
{timelineOptions.map(option => (
))}
{/* Active Filters Display */}
{getActiveFilterCount() > 0 && (
Active Filters
{localFilters.subject && (
📚 {localFilters.subject}
)}
{localFilters.group && (
📁 {localFilters.group}
)}
{localFilters.timeline && (
⏰ {timelineOptions.find(t => t.value === localFilters.timeline)?.label.replace(/^.+ /, '')}
)}
)}
);
}
// Export to global scope
window.NotesSearchFilter = NotesSearchFilter;