From 756f8ab3925422595215d94df3f6bd64c7a25925 Mon Sep 17 00:00:00 2001 From: Manus Date: Tue, 16 Jun 2026 12:29:58 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20stabiliser=20validatedInvoiceIds=20avec?= =?UTF-8?q?=20useMemo=20pour=20bouton=20t=C3=A9l=C3=A9chargement=20BAP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/pages/InvoicesBAP.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/client/src/pages/InvoicesBAP.tsx b/client/src/pages/InvoicesBAP.tsx index 24d350a..4cb132f 100644 --- a/client/src/pages/InvoicesBAP.tsx +++ b/client/src/pages/InvoicesBAP.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import React, { useState, useMemo } from "react"; import DashboardLayout from "@/components/DashboardLayout"; import { Card, CardContent } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; @@ -155,7 +155,12 @@ export default function InvoicesBAP() { // Filter for BAP invoices only (Abonnement = NON, isSubscription = 0) const invoices = allInvoices?.filter(inv => inv.isSubscription === 0); // IDs des factures déjà validées BAP (pour charger leurs pdfUrl depuis bapHistory) - const validatedInvoiceIds = (invoices || []).filter(inv => inv.bapValidated === 1).map(inv => inv.id); + // Stabilisé avec useMemo pour éviter les re-renders infinis (anti-pattern tRPC) + const validatedInvoiceIds = useMemo( + () => (invoices || []).filter(inv => inv.bapValidated === 1).map(inv => inv.id), + // eslint-disable-next-line react-hooks/exhaustive-deps + [invoices?.map(i => i.id).join(',')] + ); const { data: persistedBapPdfUrls } = trpc.invoices.getBapPdfUrls.useQuery( { invoiceIds: validatedInvoiceIds }, { enabled: validatedInvoiceIds.length > 0 }