B137 — simplify pass: dedupe picker type, derive territory columns

Co-authored-by: Francisco Solla <fsolla@users.noreply.github.com>
This commit is contained in:
Cursor Agent 2026-08-02 23:08:31 +00:00
parent d6455b1333
commit e88073d892
No known key found for this signature in database
7 changed files with 25 additions and 47 deletions

View file

@ -34,7 +34,7 @@ import {
EmptyMedia,
EmptyTitle,
} from '@/components/ui/Empty'
import { resolveVisibleColumns, toCampaignColumnPickerColumns } from '@/lib/campaignColumnVisibility'
import { toCampaignColumnPickerColumns } from '@/lib/campaignColumnVisibility'
import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome'
import type { MunicipalityPortfolioIndexEntry } from '@/lib/municipalityPortfolio'
import { cn } from '@/lib/utils'
@ -187,8 +187,7 @@ export default async function StateDeputiesPage({ searchParams }: StateDeputiesP
])
const columnVisibility = await readCampaignColumnVisibility('dobradinhas')
const isLeadershipVisible =
resolveVisibleColumns([{ id: 'leaderships' }], columnVisibility.hiddenColumnIds).length > 0
const isLeadershipVisible = !columnVisibility.hiddenColumnIds.includes('leaderships')
const [
{ rows, totalDocs, totalPages, filterFacets },

View file

@ -41,7 +41,7 @@ import {
EmptyMedia,
EmptyTitle,
} from '@/components/ui/Empty'
import { resolveVisibleColumns, toCampaignColumnPickerColumns } from '@/lib/campaignColumnVisibility'
import { toCampaignColumnPickerColumns } from '@/lib/campaignColumnVisibility'
import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome'
import { formatBahiaDateTimeLabel } from '@/lib/campaignTime'
import {
@ -328,8 +328,7 @@ export default async function LeadershipsPage({ searchParams }: LeadershipsPageP
])
const columnVisibility = await readCampaignColumnVisibility('liderancas')
const isStateDeputyVisible =
resolveVisibleColumns([{ id: 'stateDeputies' }], columnVisibility.hiddenColumnIds).length > 0
const isStateDeputyVisible = !columnVisibility.hiddenColumnIds.includes('stateDeputies')
const [
{ rows, totalDocs, totalPages, filterFacets },

View file

@ -3,7 +3,7 @@ import { redirect } from 'next/navigation'
import { getPayload } from 'payload'
import { TerritoryFilters } from '@/components/campaign/municipality/TerritoryFilters'
import { territoryListPickerColumns } from '@/components/campaign/municipality/TerritoryListColumns'
import { territoryListColumns } from '@/components/campaign/municipality/TerritoryListColumns'
import { TerritoryList } from '@/components/campaign/municipality/TerritoryList'
import { CampaignColumnPickerTrailing } from '@/components/campaign/shared/CampaignColumnPickerTrailing'
import { CampaignListFooter } from '@/components/campaign/shared/CampaignListFooter'
@ -13,6 +13,7 @@ import {
} from '@/components/campaign/shared/CampaignListPending'
import { CampaignPageShell } from '@/components/campaign/shell/CampaignPageShell'
import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome'
import { toCampaignColumnPickerColumns } from '@/lib/campaignColumnVisibility'
import { readCampaignColumnVisibility } from '@/utilities/campaignColumnVisibilityCookie'
import { requireCampaignPageActor } from '@/utilities/campaignPageActor'
import { loadTerritoryOverview } from '@/utilities/territory/loadTerritoryOverview'
@ -56,7 +57,9 @@ export default async function TerritoriesPage({ searchParams }: TerritoriesPageP
trailing={
<CampaignColumnPickerTrailing
columnVisibility={columnVisibility}
columns={territoryListPickerColumns}
columns={toCampaignColumnPickerColumns(
territoryListColumns({ state, regionOptions: regionOptions }),
)}
/>
}
/>

View file

@ -71,20 +71,18 @@ export const TerritoryList = ({
return (
<CampaignTable
caption={`${sortSummary}. Comparação dos Territórios de Identidade. Leitura regional; a alocação é decidida por município.`}
className="overflow-visible"
containerClassName="overflow-x-auto"
headerClassName="[&_th]:sticky [&_th]:top-0 [&_th]:z-10 [&_th]:bg-background [&_th]:shadow-[inset_0_-1px_0_var(--border)] [&_th:first-child]:rounded-tl-xl [&_th:last-child]:rounded-tr-xl [&_tr]:border-b-0"
columns={territoryListColumns({ state, regionOptions })}
columnVisibility={columnVisibility}
rows={flattenTerritoryRows(rows)}
rowKey={(row) =>
row.variant === 'parent' ? row.region : `${row.parentRegion}-${row.label}`
}
rowId={(row) => (row.variant === 'parent' ? territoryAnchorId(row.region) : undefined)}
rowClassName={(row) =>
row.variant === 'sub' ? 'bg-muted/30' : 'scroll-mt-6 target:bg-muted/50'
}
empty={<TerritoryListEmptyState state={state} />}
/>
className="overflow-visible"
containerClassName="overflow-x-auto"
headerClassName="[&_th]:sticky [&_th]:top-0 [&_th]:z-10 [&_th]:bg-background [&_th]:shadow-[inset_0_-1px_0_var(--border)] [&_th:first-child]:rounded-tl-xl [&_th:last-child]:rounded-tr-xl [&_tr]:border-b-0"
columns={territoryListColumns({ state, regionOptions })}
columnVisibility={columnVisibility}
rows={flattenTerritoryRows(rows)}
rowKey={(row) => (row.variant === 'parent' ? row.region : `${row.parentRegion}-${row.label}`)}
rowId={(row) => (row.variant === 'parent' ? territoryAnchorId(row.region) : undefined)}
rowClassName={(row) =>
row.variant === 'sub' ? 'bg-muted/30' : 'scroll-mt-6 target:bg-muted/50'
}
empty={<TerritoryListEmptyState state={state} />}
/>
)
}

View file

@ -4,7 +4,6 @@ import { TerritorySortableHead } from '@/components/campaign/municipality/Territ
import { CampaignTransitionAnchor } from '@/components/campaign/shared/CampaignListPending'
import type { CampaignTableColumn } from '@/components/campaign/shared/CampaignTable'
import { Badge } from '@/components/ui/Badge'
import type { CampaignColumnPickerColumn } from '@/lib/campaignColumnVisibility'
import { formatElectionNumber } from '@/lib/electionFormat'
import {
formatGoalCoverageDeficitShortLabel,
@ -140,19 +139,6 @@ const captureTooltipContent = (row: TerritoryTableRow) => {
)
}
export const territoryListPickerColumns: CampaignColumnPickerColumn[] = [
{ id: 'region', label: territoryListSortLabels.region, mandatory: true },
{ id: 'municipalities', label: territoryListSortLabels.municipalities },
{ id: 'votes2022', label: territoryListSortLabels.votes2022 },
{ id: 'pct', label: territoryListSortLabels.pct },
{ id: 'validVotes2022', label: territoryListSortLabels.validVotes2022 },
{ id: 'estimate2026', label: territoryListSortLabels.estimate2026 },
{ id: 'cobertura', label: territoryListSortLabels.cobertura },
{ id: 'captura', label: territoryListSortLabels.captura },
{ id: 'classe', label: territoryListSortLabels.classe },
{ id: 'coverage', label: territoryListSortLabels.coverage },
]
export const territoryListColumns = ({
state,
regionOptions,

View file

@ -15,16 +15,11 @@ import {
parseCampaignHiddenColumns,
serializeCampaignHiddenColumns,
toggleHiddenColumn,
type CampaignColumnPickerColumn,
type CampaignListId,
} from '@/lib/campaignColumnVisibility'
import { sameIdSet } from '@/lib/sameIdSet'
type CampaignColumnPickerColumn = {
id: string
label: string
mandatory?: boolean
}
type CampaignColumnPickerProps = {
listId: CampaignListId
/** Every column of the table, hidden ones included — this is the menu. */

View file

@ -177,8 +177,7 @@ export const CampaignTable = <Row,>({
const visibleColumns = resolveVisibleColumns(columns, columnVisibility?.hiddenColumnIds)
return (
<>
<div className={cn('overflow-hidden rounded-xl border', className)}>
<div className={cn('overflow-hidden rounded-xl border', className)}>
<Table containerClassName={containerClassName}>
{caption ? <TableCaption className="sr-only">{caption}</TableCaption> : null}
<TableHeader className={headerClassName}>
@ -229,7 +228,6 @@ export const CampaignTable = <Row,>({
))}
</TableBody>
</Table>
</div>
</>
</div>
)
}