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.name}
-
- {group.cartaoName ?? "Compra parcelada"}
+
+ {cardLogoSrc ? (
+
+ ) : (
+
+ )}
+ {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.name}
+
+
+ {cardLogoSrc ? (
+
+ ) : (
+
+ )}
+ {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),