Files
openmonetis/src/shared/components/entity-avatar/logo-prefetch-provider.tsx
Felipe Coutinho b453b432ed perf(logos): pré-resolver mapeamentos Logo.dev no servidor
Cada EstablishmentLogo dispara um GET para /api/logo/mapping por
nome único (deduplicado pelo React Query, mas ainda N requests por
página). Em /dashboard, /transactions e /payers/[payerId] agora
fazemos uma única query SQL em batch (fetchEstablishmentLogoMap) e
semeamos o cache do React Query antes do primeiro render via novo
LogoPrefetchProvider — eliminando os requests da rede.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-25 14:45:54 +00:00

37 lines
933 B
TypeScript

"use client";
import { useQueryClient } from "@tanstack/react-query";
import { type ReactNode, useRef } from "react";
import { logoQueryKeys } from "@/shared/lib/logo";
import type { LogoPrefetchEntry } from "@/shared/lib/logo/types";
type LogoPrefetchProviderProps = {
mappings: LogoPrefetchEntry[];
children: ReactNode;
};
/**
* Semeia o cache do React Query com mapeamentos de logo já resolvidos
* no servidor. Evita que cada `EstablishmentLogo` dispare seu próprio
* GET para `/api/logo/mapping` no primeiro render.
*/
export function LogoPrefetchProvider({
mappings,
children,
}: LogoPrefetchProviderProps) {
const queryClient = useQueryClient();
const seeded = useRef(false);
if (!seeded.current) {
for (const { nameKey, domain, logoUrl } of mappings) {
queryClient.setQueryData(logoQueryKeys.mapping(nameKey), {
domain,
logoUrl,
});
}
seeded.current = true;
}
return <>{children}</>;
}