import React from 'react'; import { View } from 'react-native'; import { Text } from '@/components/ui/text'; import { Button } from '@/components/ui/button'; import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@/components/ui/sheet'; import { Badge } from '@/components/ui/badge'; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion'; export type SourceType = 'local' | 'powr' | 'nostr'; export interface FilterOptions { equipment: string[]; tags: string[]; source: SourceType[]; } interface FilterSheetProps { isOpen: boolean; onClose: () => void; options: FilterOptions; onApplyFilters: (filters: FilterOptions) => void; availableFilters: { equipment: string[]; tags: string[]; source: SourceType[]; }; } function renderFilterSection( title: string, category: keyof FilterOptions, values: T[], selectedValues: T[], onToggle: (category: keyof FilterOptions, value: T) => void ) { return ( {title} {selectedValues.length > 0 && ( {selectedValues.length} )} {values.map(value => { const isSelected = selectedValues.includes(value); return ( ); })} ); } export function FilterSheet({ isOpen, onClose, options, onApplyFilters, availableFilters }: FilterSheetProps) { const [localOptions, setLocalOptions] = React.useState(options); const handleReset = () => { const resetOptions = { equipment: [], tags: [], source: [] }; setLocalOptions(resetOptions); // Immediately apply reset onApplyFilters(resetOptions); }; const toggleFilter = ( category: keyof FilterOptions, value: string | SourceType ) => { setLocalOptions(prev => ({ ...prev, [category]: prev[category].includes(value as any) ? prev[category].filter(v => v !== value) : [...prev[category], value as any] })); }; return ( {renderFilterSection('Equipment', 'equipment', availableFilters.equipment, localOptions.equipment, toggleFilter)} {renderFilterSection('Tags', 'tags', availableFilters.tags, localOptions.tags, toggleFilter)} {renderFilterSection('Source', 'source', availableFilters.source, localOptions.source, toggleFilter)} ); }