From c52e0e7957995b4df3844101424bb696f815a981 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Ign=C3=A1cio=20Fontoura=20Solla?= Date: Sat, 25 Jul 2026 15:21:58 -0300 Subject: [PATCH] Pass 2 W4c: RSCs das paginas de detalhe extraidos + gemeos de tab dedupados - municipios/[slug]/page.tsx 391->161 linhas: tabs (Overview/Dossier/Elections/Leaderships/Updates + fallback) em MunicipalityDetailTabs.tsx colocado na rota - planos/[slug]/page.tsx 323->137 linhas: visao geral em ActionPlanOverviewTab.tsx - createDetailTabHelpers (detailTabUi.ts) dedupa municipalityDetailTabUi/actionPlanDetailTabUi (resolve/href/redirect identicos; modulos viram config + re-export) --- .../[slug]/MunicipalityDetailTabs.tsx | 249 +++++++++++++++++ .../campanha/(app)/municipios/[slug]/page.tsx | 252 +----------------- .../planos/[slug]/ActionPlanOverviewTab.tsx | 210 +++++++++++++++ .../campanha/(app)/planos/[slug]/page.tsx | 196 +------------- src/utilities/actionPlanDetailTabUi.ts | 76 ++---- src/utilities/detailTabUi.ts | 71 +++++ src/utilities/municipalityDetailTabUi.ts | 70 ++--- 7 files changed, 591 insertions(+), 533 deletions(-) create mode 100644 src/app/(campaign)/campanha/(app)/municipios/[slug]/MunicipalityDetailTabs.tsx create mode 100644 src/app/(campaign)/campanha/(app)/planos/[slug]/ActionPlanOverviewTab.tsx create mode 100644 src/utilities/detailTabUi.ts diff --git a/src/app/(campaign)/campanha/(app)/municipios/[slug]/MunicipalityDetailTabs.tsx b/src/app/(campaign)/campanha/(app)/municipios/[slug]/MunicipalityDetailTabs.tsx new file mode 100644 index 00000000..041d56d6 --- /dev/null +++ b/src/app/(campaign)/campanha/(app)/municipios/[slug]/MunicipalityDetailTabs.tsx @@ -0,0 +1,249 @@ +import { CampaignListPagination } from '@/components/campaign/shared/CampaignListPagination' +import { CandidateComparePicker } from '@/components/campaign/map/CandidateComparePicker' +import { MunicipalityBaselineCard } from '@/components/campaign/municipality/MunicipalityBaselineCard' +import { MunicipalityCandidateComparisonTable } from '@/components/campaign/municipality/MunicipalityCandidateComparisonTable' +import { MunicipalityDossier } from '@/components/campaign/municipality/MunicipalityDossier' +import { MunicipalityGoalAccountCard } from '@/components/campaign/municipality/MunicipalityGoalAccountCard' +import { MunicipalityLeadershipsPanel } from '@/components/campaign/municipality/MunicipalityLeadershipsPanel' +import { MunicipalityPledgesPanel } from '@/components/campaign/municipality/MunicipalityPledgesPanel' +import { MunicipalityStrategyCard } from '@/components/campaign/municipality/MunicipalityStrategyCard' +import { MunicipalityUpdateFeed } from '@/components/campaign/municipality/MunicipalityUpdateFeed' +import { MunicipalityUpdateForm } from '@/components/campaign/municipality/MunicipalityUpdateForm' +import { MunicipalityZoneNeighborhoodsCard } from '@/components/campaign/municipality/MunicipalityZoneNeighborhoodsCard' +import type { VoteEstimateScenarioViewModel } from '@/lib/voteEstimate' +import type { getCampaignUser } from '@/utilities/campaignAuth' +import { loadFederalCandidateOptions } from '@/utilities/electionCandidateOptions' +import { loadMunicipalityLeaderships } from '@/utilities/leadershipData' +import { + loadMunicipalityCandidateComparison, + MAX_COMPARISON_CANDIDATES, +} from '@/utilities/municipalityCandidateComparison' +import type { MunicipalityDetailSearchParams } from '@/utilities/municipalityDetailTabUi' +import { loadMunicipalityDossierData } from '@/utilities/municipalityDossierData' +import { municipalityElectionGeographyForSlug } from '@/utilities/municipalityElectionGeography' +import { loadMunicipalityElectoralBaseline } from '@/utilities/municipalityElectoralBaseline' +import { loadMunicipalityGoalAccount } from '@/utilities/municipalityGoalAccount' +import type { getMunicipalityDetailViewModel } from '@/utilities/municipalityPageData' +import { + loadMunicipalityUpdatesFeed, + parseMunicipalityUpdateFeedParams, +} from '@/utilities/municipalityUpdatePageData' +import type { loadAdvisorSummaries } from '@/utilities/municipalityViewModels' +import { loadMunicipalityPledges } from '@/utilities/votePledgeData' +import { + aggregateMunicipalityPledgesFromRows, + toMunicipalityPledgeCoverageView, + type MunicipalityPledgeAggregate, + type MunicipalityPledgeCoverageView, +} from '@/utilities/votePledgeViews' + +import type { getPayload } from 'payload' + +import { declareVotesFormAction, estimateVotesFormAction } from './pledgeFormActions' +import { createMunicipalityUpdateFormAction } from './updateFormActions' + +type PayloadUser = { + payload: Awaited> + user: NonNullable>> +} + +type MunicipalityDetailView = Awaited> + +export const MunicipalityTabFallback = () => ( +