"use client"; import Link from "next/link"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { CategoryIcon } from "@/components/ui/category-icon"; import { Badge } from "@/components/ui/badge"; import { Tabs, TabsList, TabsTrigger, TabsContent, } from "@/components/ui/tabs"; import { useIsMobile } from "@/hooks/use-mobile"; import type { Transaction, Category } from "@/lib/types"; interface TopExpensesListProps { expensesByCategory: Array<{ categoryId: string | null; expenses: Transaction[]; }>; categories: Category[]; formatCurrency: (amount: number) => string; } export function TopExpensesList({ expensesByCategory, categories, formatCurrency, }: TopExpensesListProps) { const isMobile = useIsMobile(); // Filtrer les catégories qui ont des dépenses const categoriesWithExpenses = expensesByCategory.filter( (group) => group.expenses.length > 0, ); const hasExpenses = categoriesWithExpenses.length > 0; // Déterminer la valeur par défaut du premier onglet const defaultTabValue = categoriesWithExpenses.length > 0 ? categoriesWithExpenses[0].categoryId || "uncategorized" : ""; return ( Top 10 dépenses par top 5 catégories parentes {hasExpenses ? ( {categoriesWithExpenses.map(({ categoryId, expenses }) => { const category = categoryId ? categories.find((c) => c.id === categoryId) : null; const tabValue = categoryId || "uncategorized"; return ( {category && ( )} {category?.name || "Non catégorisé"} ); })} {categoriesWithExpenses.map(({ categoryId, expenses }) => { const category = categoryId ? categories.find((c) => c.id === categoryId) : null; const tabValue = categoryId || "uncategorized"; return (
{expenses.map((expense, index) => (
{index + 1}

{expense.description}

{formatCurrency(expense.amount)}
{new Date(expense.date).toLocaleDateString( "fr-FR", )} {expense.categoryId && (() => { const expenseCategory = categories.find( (c) => c.id === expense.categoryId, ); // Afficher seulement si c'est une sous-catégorie (a un parentId) if (expenseCategory?.parentId) { return ( {expenseCategory.name} ); } return null; })()}
))}
); })}
) : (
Pas de dépenses pour cette période
)}
); }