"use client"; import { useSortable } from "@dnd-kit/sortable"; import { CSS } from "@dnd-kit/utilities"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { MoreVertical, Pencil, Trash2, ExternalLink, GripVertical, } from "lucide-react"; import { cn } from "@/lib/utils"; import Link from "next/link"; import type { Account, Folder } from "@/lib/types"; import { accountTypeIcons, accountTypeLabels } from "./constants"; import { Checkbox } from "@/components/ui/checkbox"; import { getAccountBalance } from "@/lib/account-utils"; interface AccountCardProps { account: Account; folder?: Folder; transactionCount: number; onEdit: (account: Account) => void; onDelete: (accountId: string) => void; formatCurrency: (amount: number) => string; isSelected?: boolean; onSelect?: (accountId: string, selected: boolean) => void; draggableId?: string; compact?: boolean; } export function AccountCard({ account, folder, transactionCount, onEdit, onDelete, formatCurrency, isSelected = false, onSelect, draggableId, compact = false, }: AccountCardProps) { const Icon = accountTypeIcons[account.type]; const realBalance = getAccountBalance(account); const { attributes, listeners, setNodeRef, transform, transition, isDragging, } = useSortable({ id: draggableId || `account-${account.id}`, disabled: !draggableId, data: { type: "account", account, }, }); const style = { transform: CSS.Transform.toString(transform), transition, opacity: isDragging ? 0.5 : 1, }; const cardContent = (
{draggableId && ( )} {onSelect && ( onSelect(account.id, checked === true) } onClick={(e) => e.stopPropagation()} /> )}
{account.name} {!compact && ( <>

{accountTypeLabels[account.type]}

{account.accountNumber && (

{account.accountNumber}

)} )}
onEdit(account)}> Modifier onDelete(account.id)} className="text-red-600" > Supprimer
= 0 ? "text-emerald-600" : "text-red-600", )} > {formatCurrency(realBalance)}
{compact && ( {transactionCount} transactions )}
{!compact && ( <>
{transactionCount} transactions {folder && {folder.name}}
{account.initialBalance !== undefined && account.initialBalance !== null && (

Solde initial: {formatCurrency(account.initialBalance)}

)} {account.lastImport && (

Dernier import:{" "} {new Date(account.lastImport).toLocaleDateString("fr-FR")}

)} {account.externalUrl && ( Accéder au portail banque )} )}
); if (draggableId) { return (
{cardContent}
); } return cardContent; }