/** * Панель фильтров и сортировки */ 'use client'; import { useState } from 'react'; import { useUrlParams } from '@/hooks/useUrlParams'; export interface FilterOption { value: string; label: string; } export interface SortOption { value: string; label: string; } interface FilterPanelProps { filters?: { status?: FilterOption[]; organization?: FilterOption[]; type?: FilterOption[]; }; sortOptions?: SortOption[]; onFilterChange?: (filters: any) => void; onSortChange?: (sortBy: string, sortOrder: 'asc' | 'desc') => void; presets?: Array<{ name: string; filters: any }>; } export default function FilterPanel({ filters, sortOptions, onFilterChange, onSortChange, presets, }: FilterPanelProps) { const { params, setFilters, setSort, clearFilters } = useUrlParams(); const [isExpanded, setIsExpanded] = useState(false); const handleFilterChange = (key: string, value: string | string[]) => { const newFilters = { ...params, [key]: value }; setFilters(newFilters); onFilterChange?.(newFilters); }; const handleSortChange = (sortBy: string) => { const newSortOrder = params.sortBy === sortBy && params.sortOrder === 'asc' ? 'desc' : 'asc'; setSort(sortBy, newSortOrder); onSortChange?.(sortBy, newSortOrder); }; const handlePresetClick = (preset: { name: string; filters: any }) => { setFilters(preset.filters); onFilterChange?.(preset.filters); }; const hasActiveFilters = params.status || params.organization || params.type || params.dateFrom || params.dateTo; return (