diff --git a/src/app/(dashboard)/stock-negatif/client.tsx b/src/app/(dashboard)/stock-negatif/client.tsx index 86f3ef7..a994ba6 100644 --- a/src/app/(dashboard)/stock-negatif/client.tsx +++ b/src/app/(dashboard)/stock-negatif/client.tsx @@ -2,7 +2,7 @@ import { useRouter } from "next/navigation"; import { useState, useMemo } from "react"; -import { ChevronUp, ChevronDown, ChevronsUpDown, Download } from "lucide-react"; +import { ChevronUp, ChevronDown, ChevronsUpDown, Download, Search } from "lucide-react"; import type { PgStockNegatifRow, PgStockSansVenteRow } from "./page"; type SortDir = "asc" | "desc"; @@ -81,6 +81,7 @@ function TabStockNegatif({ rows, magasin }: { rows: PgStockNegatifRow[]; magasin const [filterFournisseur, setFilterFournisseur] = useState(""); const [filterAnnee, setFilterAnnee] = useState(""); + const [search, setSearch] = useState(""); const fournisseurs = useMemo(() => [...new Set(rows.map(r => r.fournisseur).filter(Boolean))].sort((a, b) => a.localeCompare(b, "fr")), @@ -91,10 +92,14 @@ function TabStockNegatif({ rows, magasin }: { rows: PgStockNegatifRow[]; magasin [rows] ); - const filtered = useMemo(() => rows.filter(r => - (!filterFournisseur || r.fournisseur === filterFournisseur) && - (!filterAnnee || getYear(r.derniereentree) === filterAnnee) - ), [rows, filterFournisseur, filterAnnee]); + const filtered = useMemo(() => { + const q = search.trim().toLowerCase(); + return rows.filter(r => + (!filterFournisseur || r.fournisseur === filterFournisseur) && + (!filterAnnee || getYear(r.derniereentree) === filterAnnee) && + (!q || r.codein?.toLowerCase().includes(q) || r.libelle1?.toLowerCase().includes(q)) + ); + }, [rows, filterFournisseur, filterAnnee, search]); const { sorted, sortKey, sortDir, handleSort } = useSortedRows( filtered, @@ -135,11 +140,21 @@ function TabStockNegatif({ rows, magasin }: { rows: PgStockNegatifRow[]; magasin
+
+ + setSearch(e.target.value)} + placeholder="Code article ou libellé…" + className="rounded-lg border border-gray-200 bg-white pl-8 pr-3 py-1.5 text-sm shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 min-w-[220px]" + /> +
- {(filterFournisseur || filterAnnee) && ( + {(filterFournisseur || filterAnnee || search) && (