mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-13 23:53:05 +00:00
B137 — simplify pass: dedupe picker type, derive territory columns
Co-authored-by: Francisco Solla <fsolla@users.noreply.github.com>
This commit is contained in:
parent
d6455b1333
commit
e88073d892
7 changed files with 25 additions and 47 deletions
|
|
@ -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 },
|
||||
|
|
|
|||
|
|
@ -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 },
|
||||
|
|
|
|||
|
|
@ -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 }),
|
||||
)}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -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} />}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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. */
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue