import { RiCheckLine, RiLoader2Fill, RiRefreshLine, RiSlideshowLine, } from "@remixicon/react"; import type { ReactNode } from "react"; import MoneyValues from "@/components/money-values"; import type { PaymentConditionsData } from "@/lib/dashboard/payments/payment-conditions"; import { Progress } from "../ui/progress"; import { WidgetEmptyState } from "../widget-empty-state"; type PaymentConditionsWidgetProps = { data: PaymentConditionsData; }; const CONDITION_ICON_CLASSES = "flex size-9.5 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground"; const CONDITION_ICONS: Record = { "À vista": , Parcelado: , Recorrente: , }; const formatPercentage = (value: number) => new Intl.NumberFormat("pt-BR", { minimumFractionDigits: 0, maximumFractionDigits: 1, }).format(value); export function PaymentConditionsWidget({ data, }: PaymentConditionsWidgetProps) { if (data.conditions.length === 0) { return ( } title="Nenhuma despesa encontrada" description="As distribuições por condição aparecerão conforme novos lançamentos." /> ); } return (
    {data.conditions.map((condition) => { const Icon = CONDITION_ICONS[condition.condition] ?? CONDITION_ICONS["À vista"]; const percentageLabel = formatPercentage(condition.percentage); return (
  • {Icon}

    {condition.condition}

    {condition.transactions}{" "} {condition.transactions === 1 ? "lançamento" : "lançamentos"} {percentageLabel}%
  • ); })}
); }