"use client"; import { useState } from "react"; import { ChevronDown, ChevronRight, Plus, Tag } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { CategoryCombobox } from "@/components/ui/category-combobox"; import { cn } from "@/lib/utils"; import type { Transaction, Category } from "@/lib/types"; interface TransactionGroup { key: string; displayName: string; transactions: Transaction[]; totalAmount: number; suggestedKeyword: string; } interface RuleGroupCardProps { group: TransactionGroup; isExpanded: boolean; onToggleExpand: () => void; onCreateRule: () => void; onCategorize: (categoryId: string | null) => void; categories: Category[]; formatCurrency: (amount: number) => string; formatDate: (date: string) => string; } export function RuleGroupCard({ group, isExpanded, onToggleExpand, onCreateRule, onCategorize, categories, formatCurrency, formatDate, }: RuleGroupCardProps) { const [selectedCategoryId, setSelectedCategoryId] = useState(null); const avgAmount = group.transactions.reduce((sum, t) => sum + t.amount, 0) / group.transactions.length; const isDebit = avgAmount < 0; const handleCategorySelect = (categoryId: string | null) => { setSelectedCategoryId(null); // Reset après sélection onCategorize(categoryId); }; return (
{/* Header */}
{group.displayName} {group.transactions.length} transaction {group.transactions.length > 1 ? "s" : ""}
{group.suggestedKeyword}
{formatCurrency(group.totalAmount)}
Moy: {formatCurrency(avgAmount)}
e.stopPropagation()}>
{/* Expanded transactions list */} {isExpanded && (
{group.transactions.map((transaction) => ( ))}
Date Description Montant
{formatDate(transaction.date)} {transaction.description} {transaction.memo && ( ({transaction.memo}) )} {formatCurrency(transaction.amount)}
)}
); }