'use client'; import { useState, useEffect } from 'react'; import SelectedTags from './SelectedTags'; import TagSelector from './TagSelector'; interface RecipesSidebarProps { categories: string[]; tags: string[]; onFilterChange: (filters: FilterState) => void; } export interface FilterState { search: string; category: string; selectedTags: string[]; } export default function RecipesSidebar({ categories, tags, onFilterChange }: RecipesSidebarProps) { const [search, setSearch] = useState(''); const [category, setCategory] = useState(''); const [selectedTags, setSelectedTags] = useState([]); useEffect(() => { onFilterChange({ search, category, selectedTags }); }, [search, category, selectedTags, onFilterChange]); const handleTagToggle = (tag: string) => { setSelectedTags((prev) => prev.includes(tag) ? prev.filter((t) => t !== tag) : [...prev, tag] ); }; const handleRemoveTag = (tag: string) => { setSelectedTags((prev) => prev.filter((t) => t !== tag)); }; const handleClearTags = () => { setSelectedTags([]); }; const handleClearFilters = () => { setSearch(''); setCategory(''); setSelectedTags([]); }; const hasActiveFilters = search || category || selectedTags.length > 0; return (
setSearch(e.target.value)} placeholder="Search recipes..." className="w-full px-2 py-1.5 text-sm border border-gray-300 dark:border-gray-600 rounded bg-white dark:bg-gray-800 text-gray-900 dark:text-white placeholder-gray-400 dark:placeholder-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500" />
{hasActiveFilters && ( )}
); }