"use client" import { useState, useEffect } from "react" import type { FilterParams } from "@/lib/types" interface FilterPanelProps { filters: FilterParams onFiltersChange: (filters: FilterParams) => void availableGenres: string[] availableMoods: string[] availableInstruments: string[] availableKeys: string[] } export default function FilterPanel({ filters, onFiltersChange, availableGenres, availableMoods, availableInstruments, availableKeys, }: FilterPanelProps) { const [localFilters, setLocalFilters] = useState(filters) useEffect(() => { setLocalFilters(filters) }, [filters]) const handleFilterChange = (key: keyof FilterParams, value: any) => { const newFilters = { ...localFilters, [key]: value } setLocalFilters(newFilters) onFiltersChange(newFilters) } const clearFilters = () => { const emptyFilters: FilterParams = {} setLocalFilters(emptyFilters) onFiltersChange(emptyFilters) } const hasActiveFilters = Object.keys(localFilters).filter(key => localFilters[key as keyof FilterParams] !== undefined && localFilters[key as keyof FilterParams] !== "" ).length > 0 return (
{/* Clear all button */} {hasActiveFilters && ( )} {/* Genre Filter */}
{/* Mood Filter */}
{/* Instrument Filter - Multiple Selection */}
{availableInstruments.length === 0 ? (

Aucun instrument disponible

) : ( availableInstruments.map((instrument) => { const isSelected = localFilters.instruments?.includes(instrument) || false return ( ) }) )}
{/* Key Filter */}
{/* Tempo Range Filter */}
{/* Active filters summary */} {hasActiveFilters && (

Filtres actifs:

{localFilters.genre && (
Genre: {localFilters.genre}
)} {localFilters.mood && (
Ambiance: {localFilters.mood}
)} {localFilters.instruments && localFilters.instruments.length > 0 && (
Instruments:
{localFilters.instruments.map((instrument) => ( {instrument} ))}
)} {localFilters.key && (
Tonalité: {localFilters.key}
)} {localFilters.tempo_range && (
Tempo: {localFilters.tempo_range === 'slow' && 'Lent'} {localFilters.tempo_range === 'medium' && 'Moyen'} {localFilters.tempo_range === 'fast' && 'Rapide'}
)}
)}
) }