teqo/src/components/campaign/StateDeputyChips.tsx
Francisco Ignácio Fontoura Solla e2724c10da Remodel the campaign vertical from Praça to Município
Rename the operational unit "Praça"/"Núcleo" to "Município" (code identifier
`municipality`) and land the 2026-07-23 course changes:

- New `candidate` role with unrestricted visibility (`isCampaignStaff` now
  includes it) alongside coordinator/advisor; leader is locked down to the
  supporter contact tool only.
- Demandas become staff-only; dobradinhas modeled via a `stateDeputy` entity.
- Camaçari consolidated to a single município (ZE 170/171 aggregated);
  Salvador keeps its 19 zone municípios.
- Map moves to the staff dashboard; `/campanha/municipios` is list/overview.
- Vote pledges keep the declared vs estimated (scenario) asymmetry; leaders
  never see estimates.

Destructive migration for the campaign vertical (drops nucleus/plaza-era
tables, wipes campaign rows, seeds 435 municípios). Public-site data untouched.

Includes the post-delivery /simplify cleanups: shared reloadStaffActor /
reloadCoordinatorActor helpers, req.context cache for getFreshCampaignUser,
parallelized dashboard loads, candidate dashboard-copy fix, and dead
leader-dashboard / roleKind code removal.
2026-07-23 21:36:20 -03:00

25 lines
683 B
TypeScript

import Link from 'next/link'
import { Badge } from '@/components/ui/Badge'
import type { StateDeputySummary } from '@/utilities/stateDeputyData'
type StateDeputyChipsProps = {
deputies: StateDeputySummary[]
}
export const StateDeputyChips = ({ deputies }: StateDeputyChipsProps) => {
if (deputies.length === 0) return null
return (
<div className="flex flex-wrap gap-1">
{deputies.map((deputy) => (
<Badge key={deputy.id} variant="outline" asChild>
<Link href={`/campanha/dobradinhas/${deputy.slug}`}>
{deputy.name}
{deputy.party ? ` (${deputy.party})` : ''}
</Link>
</Badge>
))}
</div>
)
}