Merge fix/adr0006-etapa2-fase3b-count-limit0-bug into main
Build and Push Frontend / Escaneo de Secretos (Gitleaks) (push) Successful in 17s
Build and Push Frontend / Construir y Subir Imagen (push) Successful in 8m22s

This commit is contained in:
devops committed 2026-08-26 23:20:40 -05:00
commit ba3e6c7322
1 file changed
+14 -4
@@ -250,7 +250,17 @@ export function CatalogClient({
const response = await fetch(`/api/search?${buildParams(omit).toString()}`, {
signal: controller.signal,
});
return (await response.json()) as { facetDistribution?: FacetDistribution; count?: number };
return (await response.json()) as { facetDistribution?: FacetDistribution };
}
// El "count"/estimatedTotalHits que devuelve /api/search viene en 0 con
// limit=0 (confirmado en vivo contra Meilisearch real -- limit>=1 lo
// reporta bien, limit=0 no). facetDistribution si es correcto con
// limit=0, y cada producto tiene siempre un valor para cada dimension
// (mapProduct usa defaults como "ARI Shopping"/"Todas", nunca null), asi
// que sumar sus valores da el total real sin depender de ese campo.
function sumFacetValues(facet: Record<string, number> | null): number {
return facet ? Object.values(facet).reduce((sum, value) => sum + value, 0) : 0;
}
const timer = setTimeout(() => {
@@ -265,11 +275,11 @@ export function CatalogClient({
const ageFacet = ageRes.facetDistribution && "ageRange" in ageRes.facetDistribution ? ageRes.facetDistribution.ageRange : null;
setLiveFacets({
category: categoryFacet,
categoryTotal: categoryFacet ? (categoryRes.count ?? 0) : null,
categoryTotal: categoryFacet ? sumFacetValues(categoryFacet) : null,
brand: categoryIsLeafOrNone ? brandFacet : null,
brandTotal: categoryIsLeafOrNone && brandFacet ? (brandRes.count ?? 0) : null,
brandTotal: categoryIsLeafOrNone && brandFacet ? sumFacetValues(brandFacet) : null,
ageRange: categoryIsLeafOrNone ? ageFacet : null,
ageTotal: categoryIsLeafOrNone && ageFacet ? (ageRes.count ?? 0) : null,
ageTotal: categoryIsLeafOrNone && ageFacet ? sumFacetValues(ageFacet) : null,
});
})
.catch((error) => {