diff --git a/src/app/(dashboard)/reports/installment-analysis/page.tsx b/src/app/(dashboard)/reports/installment-analysis/page.tsx index 6f31c7e..2977036 100644 --- a/src/app/(dashboard)/reports/installment-analysis/page.tsx +++ b/src/app/(dashboard)/reports/installment-analysis/page.tsx @@ -1,16 +1,24 @@ import { connection } from "next/server"; import { InstallmentAnalysisPage } from "@/features/dashboard/components/installment-analysis/installment-analysis-page"; import { fetchInstallmentAnalysis } from "@/features/dashboard/expenses/installment-analysis-queries"; +import { LogoPrefetchProvider } from "@/shared/components/entity-avatar"; import { getUser } from "@/shared/lib/auth/server"; +import { prefetchLogoMappings } from "@/shared/lib/logo/prefetch-server"; export default async function Page() { await connection(); const user = await getUser(); const data = await fetchInstallmentAnalysis(user.id); + const logoMappings = await prefetchLogoMappings( + user.id, + data.installmentGroups.map((group) => group.name), + ); return (
- + + +
); } diff --git a/src/features/dashboard/components/installment-analysis/installment-group-card.tsx b/src/features/dashboard/components/installment-analysis/installment-group-card.tsx index 90a297e..c95003d 100644 --- a/src/features/dashboard/components/installment-analysis/installment-group-card.tsx +++ b/src/features/dashboard/components/installment-analysis/installment-group-card.tsx @@ -3,13 +3,14 @@ import { RiBankCard2Line, RiCheckboxCircleFill, - RiEyeLine, + RiFileList2Line, RiTimeLine, } from "@remixicon/react"; import { format } from "date-fns"; import { ptBR } from "date-fns/locale"; import Image from "next/image"; import { useState } from "react"; +import { EstablishmentLogo } from "@/shared/components/entity-avatar"; import MoneyValues from "@/shared/components/money-values"; import { Badge } from "@/shared/components/ui/badge"; import { Button } from "@/shared/components/ui/button"; @@ -29,6 +30,7 @@ import { DialogTitle, } from "@/shared/components/ui/dialog"; import { Progress } from "@/shared/components/ui/progress"; +import { resolveLogoSrc } from "@/shared/lib/logo"; import { cn } from "@/shared/utils"; import type { InstallmentGroup } from "./types"; @@ -79,6 +81,8 @@ export function InstallmentGroupCard({ (sum, i) => sum + i.amount, 0, ); + const cardLogoSrc = resolveLogoSrc(group.cartaoLogo); + const cardName = group.cartaoName ?? "Compra parcelada"; return ( <> @@ -111,25 +115,24 @@ export function InstallmentGroupCard({ {/* Info principal */}
- {group.cartaoLogo ? ( - {group.cartaoName - ) : ( -
- -
- )} +
{group.name} - - {group.cartaoName ?? "Compra parcelada"} + + {cardLogoSrc ? ( + {`Logo + ) : ( + + )} + {cardName}
@@ -147,7 +150,7 @@ export function InstallmentGroupCard({ {/* Grid de valores */} -
+

Valor total @@ -165,7 +168,7 @@ export function InstallmentGroupCard({ amount={pendingAmount} className={cn( "text-lg font-semibold", - pendingAmount > 0 ? "text-amber-600" : "text-success-600", + pendingAmount > 0 ? "text-primary" : "text-success", )} />

@@ -183,14 +186,18 @@ export function InstallmentGroupCard({
{unpaidCount > 0 && (
- + {unpaidCount} {unpaidCount === 1 ? "pendente" : "pendentes"}
)}
- +
{/* Valor selecionado */} @@ -212,13 +219,13 @@ export function InstallmentGroupCard({ {/* Botão para abrir detalhes */} @@ -228,18 +235,26 @@ export function InstallmentGroupCard({
- {group.cartaoLogo ? ( - {group.cartaoName - ) : ( -
- + +
+ + {group.name} + +
+ {cardLogoSrc ? ( + {`Logo + ) : ( + + )} + {cardName}
- )} - {group.name} +
Detalhes das parcelas do grupo {group.name} diff --git a/src/features/dashboard/expenses/installment-analysis-queries.ts b/src/features/dashboard/expenses/installment-analysis-queries.ts index a92bb67..d7f1138 100644 --- a/src/features/dashboard/expenses/installment-analysis-queries.ts +++ b/src/features/dashboard/expenses/installment-analysis-queries.ts @@ -92,7 +92,10 @@ export async function fetchInstallmentAnalysis( cartaoLogo: cards.logo, }) .from(transactions) - .leftJoin(cards, eq(transactions.cardId, cards.id)) + .leftJoin( + cards, + and(eq(transactions.cardId, cards.id), eq(cards.userId, userId)), + ) .where( and( eq(transactions.userId, userId),