"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 { useIsMobile } from "@/hooks/use-mobile"; 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 isMobile = useIsMobile(); 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} 💳
{group.suggestedKeyword}
{!isMobile && (
{formatCurrency(group.totalAmount)}
Moy: {formatCurrency(avgAmount)}
e.stopPropagation()}>
)} {isMobile && (
e.stopPropagation()} className="flex-1">
)}
{/* Expanded transactions list */} {isExpanded && (
{isMobile ? (
{group.transactions.map((transaction) => (

{transaction.description}

{transaction.memo && (

{transaction.memo}

)}

{formatDate(transaction.date)}

{formatCurrency(transaction.amount)}
))}
) : (
{group.transactions.map((transaction) => ( ))}
Date Description Montant
{formatDate(transaction.date)} {transaction.description} {transaction.memo && ( ({transaction.memo}) )} {formatCurrency(transaction.amount)}
)}
)}
); }