"use client"; import { Card, CardContent } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Badge } from "@/components/ui/badge"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { CategoryFilterCombobox } from "@/components/ui/category-filter-combobox"; import { AccountFilterCombobox } from "@/components/ui/account-filter-combobox"; import { CategoryIcon } from "@/components/ui/category-icon"; import { Search, X, Filter, Wallet } from "lucide-react"; import type { Account, Category, Folder } from "@/lib/types"; interface TransactionFiltersProps { searchQuery: string; onSearchChange: (query: string) => void; selectedAccounts: string[]; onAccountsChange: (accounts: string[]) => void; selectedCategories: string[]; onCategoriesChange: (categories: string[]) => void; showReconciled: string; onReconciledChange: (value: string) => void; accounts: Account[]; folders: Folder[]; categories: Category[]; } export function TransactionFilters({ searchQuery, onSearchChange, selectedAccounts, onAccountsChange, selectedCategories, onCategoriesChange, showReconciled, onReconciledChange, accounts, folders, categories, }: TransactionFiltersProps) { return (
onSearchChange(e.target.value)} className="pl-9" />
onSearchChange("")} selectedAccounts={selectedAccounts} onRemoveAccount={(id) => { const newAccounts = selectedAccounts.filter((a) => a !== id); onAccountsChange(newAccounts.length > 0 ? newAccounts : ["all"]); }} onClearAccounts={() => onAccountsChange(["all"])} selectedCategories={selectedCategories} onRemoveCategory={(id) => { const newCategories = selectedCategories.filter((c) => c !== id); onCategoriesChange(newCategories.length > 0 ? newCategories : ["all"]); }} onClearCategories={() => onCategoriesChange(["all"])} showReconciled={showReconciled} onClearReconciled={() => onReconciledChange("all")} accounts={accounts} categories={categories} />
); } function ActiveFilters({ searchQuery, onClearSearch, selectedAccounts, onRemoveAccount, onClearAccounts, selectedCategories, onRemoveCategory, onClearCategories, showReconciled, onClearReconciled, accounts, categories, }: { searchQuery: string; onClearSearch: () => void; selectedAccounts: string[]; onRemoveAccount: (id: string) => void; onClearAccounts: () => void; selectedCategories: string[]; onRemoveCategory: (id: string) => void; onClearCategories: () => void; showReconciled: string; onClearReconciled: () => void; accounts: Account[]; categories: Category[]; }) { const hasSearch = searchQuery.trim() !== ""; const hasAccounts = !selectedAccounts.includes("all"); const hasCategories = !selectedCategories.includes("all"); const hasReconciled = showReconciled !== "all"; const hasActiveFilters = hasSearch || hasAccounts || hasCategories || hasReconciled; if (!hasActiveFilters) return null; const selectedAccs = accounts.filter((a) => selectedAccounts.includes(a.id)); const selectedCats = categories.filter((c) => selectedCategories.includes(c.id)); const isUncategorized = selectedCategories.includes("uncategorized"); const clearAll = () => { onClearSearch(); onClearAccounts(); onClearCategories(); onClearReconciled(); }; return (
{hasSearch && ( Recherche: "{searchQuery}" )} {selectedAccs.map((acc) => ( {acc.name} ))} {isUncategorized && ( Non catégorisé )} {selectedCats.map((cat) => ( {cat.name} ))} {hasReconciled && ( {showReconciled === "reconciled" ? "Pointées" : "Non pointées"} )}
); }