'use client'; import { useState } from 'react'; import { TaskPriority } from '@/lib/types'; import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; import { useTasksContext } from '@/contexts/TasksContext'; export interface KanbanFilters { search?: string; tags?: string[]; priorities?: TaskPriority[]; showCompleted?: boolean; compactView?: boolean; swimlanesByTags?: boolean; pinnedTag?: string; // Tag pour les objectifs principaux } interface KanbanFiltersProps { filters: KanbanFilters; onFiltersChange: (filters: KanbanFilters) => void; } export function KanbanFilters({ filters, onFiltersChange }: KanbanFiltersProps) { const { tags: availableTags } = useTasksContext(); const [isExpanded, setIsExpanded] = useState(false); const handleSearchChange = (search: string) => { onFiltersChange({ ...filters, search: search || undefined }); }; const handleTagToggle = (tagName: string) => { const currentTags = filters.tags || []; const newTags = currentTags.includes(tagName) ? currentTags.filter(t => t !== tagName) : [...currentTags, tagName]; onFiltersChange({ ...filters, tags: newTags.length > 0 ? newTags : undefined }); }; const handlePriorityToggle = (priority: TaskPriority) => { const currentPriorities = filters.priorities || []; const newPriorities = currentPriorities.includes(priority) ? currentPriorities.filter(p => p !== priority) : [...currentPriorities, priority]; onFiltersChange({ ...filters, priorities: newPriorities.length > 0 ? newPriorities : undefined }); }; const handleCompactViewToggle = () => { onFiltersChange({ ...filters, compactView: !filters.compactView }); }; const handleSwimlanesToggle = () => { onFiltersChange({ ...filters, swimlanesByTags: !filters.swimlanesByTags }); }; const handlePinnedTagChange = (tagName: string | undefined) => { onFiltersChange({ ...filters, pinnedTag: tagName }); }; const handleClearFilters = () => { onFiltersChange({}); }; const hasActiveFilters = filters.search || filters.tags?.length || filters.priorities?.length; const priorityOptions: { value: TaskPriority; label: string; color: string }[] = [ { value: 'urgent', label: 'Urgent', color: 'bg-red-500' }, { value: 'high', label: 'Haute', color: 'bg-orange-500' }, { value: 'medium', label: 'Moyenne', color: 'bg-yellow-500' }, { value: 'low', label: 'Basse', color: 'bg-blue-500' } ]; return (