"use client"; import { ChevronLeft, ChevronRight, Filter, Search } from "lucide-react"; import { usePathname, useRouter, useSearchParams } from "next/navigation"; import * as React from "react"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { ScrollArea } from "@/components/ui/scroll-area"; import { Separator } from "@/components/ui/separator"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; import { CategoryService } from "@/services/category.service"; import { TagService } from "@/services/tag.service"; import type { Category, Tag } from "@/types/content"; export function SearchSidebar() { const router = useRouter(); const searchParams = useSearchParams(); const pathname = usePathname(); const [isCollapsed, setIsCollapsed] = React.useState(true); const [categories, setCategories] = React.useState([]); const [popularTags, setPopularTags] = React.useState([]); const [query, setQuery] = React.useState(searchParams.get("query") || ""); // Ouvrir automatiquement si des filtres sont actifs React.useEffect(() => { const hasFilters = searchParams.has("query") || searchParams.has("category") || searchParams.has("tag") || searchParams.get("sort") !== "trend"; if (hasFilters) { setIsCollapsed(false); } }, [searchParams]); React.useEffect(() => { CategoryService.getAll().then(setCategories).catch(console.error); TagService.getAll({ limit: 10, sort: "popular" }) .then(setPopularTags) .catch(console.error); }, []); const updateSearch = React.useCallback( (name: string, value: string | null) => { const params = new URLSearchParams(searchParams.toString()); if (value) { params.set(name, value); } else { params.delete(name); } // If we are not on explore/trends/recent, maybe we should redirect to home? // For now, let's just update the URL. router.push(`${pathname}?${params.toString()}`); }, [router, pathname, searchParams], ); const handleSearch = (e: React.FormEvent) => { e.preventDefault(); updateSearch("query", query); }; const currentSort = searchParams.get("sort") || "trend"; const currentCategory = searchParams.get("category"); return ( ); }