teqo-backup/src/components/campaign/MunicipalityMapPanelDynamic.tsx
Francisco Ignácio Fontoura Solla a32ba3b4f0 Cache the campaign hot path: committed TSE artifact + request-scoped dedup
- committed artifact src/lib/electionAggregates/bahia-federal-baseline.json
  (Solla nominal + federal T1 valid votes per catalog municipality × TSE year,
  Salvador split by zone) generated by pnpm build:election-aggregates from the
  locally seeded TSE data; typed loader src/lib/bahiaElectionAggregates.ts;
  snapshot spec pins artifact ↔ catalog ↔ baseline ticket
- map bundle: historical years now read the artifact (was 6 statewide
  city×zone scans per dashboard visit); compare mode keeps only the OTHER
  candidate on the DB path (Solla side from the artifact)
- loadMunicipalityScope (React cache()): one municipality find + pledge
  aggregate per request shared by dashboard KPIs, map bundle, and the
  municípios list overview (was 2-3 duplicate loads)
- unstable_cache + election-tse tag on the immutable elections-tab loaders
  (baseline, candidate comparison, candidate options); tag added to the
  /api/revalidate allowlist — runbook: re-seed then bust the tag
- municipalityMapContract.ts: client-safe map vocabulary/bundle types so the
  client panel no longer imports the server data module (build had pulled
  @payload-config into the client graph); municipalityMapData is server-only
  and re-exports the contract; PLAZA_MAP_* renamed to MUNICIPALITY_MAP_*
- petition generateStaticParams enumerates bare ids (getPetitionIds)
2026-07-23 23:06:28 -03:00

27 lines
794 B
TypeScript

'use client'
import dynamic from 'next/dynamic'
import type { FederalCandidateOption } from '@/utilities/electionCandidateOptions'
import type { MunicipalityMapBundle } from '@/utilities/municipalityMapContract'
const MunicipalityMapPanelLazy = dynamic(
() => import('@/components/campaign/MunicipalityMapPanel').then((module) => module.MunicipalityMapPanel),
{
ssr: false,
loading: () => (
<div
aria-hidden="true"
className="h-[420px] w-full animate-pulse rounded-xl border bg-muted/40"
/>
),
},
)
export const MunicipalityMapPanelDynamic = ({
bundle,
candidateOptions,
}: {
bundle: MunicipalityMapBundle
candidateOptions: FederalCandidateOption[]
}) => <MunicipalityMapPanelLazy bundle={bundle} candidateOptions={candidateOptions} />