'use client' import { ChevronDownIcon, ChevronsUpDownIcon, ChevronUpIcon } from 'lucide-react' import type { ReactNode } from 'react' import { CampaignTransitionAnchor } from '@/components/campaign/CampaignListPending' import { MunicipalityHeaderFilter } from '@/components/campaign/MunicipalityHeaderFilter' import { MunicipalityHoverTooltip } from '@/components/campaign/MunicipalityHoverTooltip' import { TableHead } from '@/components/ui/Table' import { cn } from '@/lib/utils' import type { MunicipalityFilterOption, MunicipalityFilterParam, } from '@/utilities/municipalityListFilters' import { buildMunicipalitySortHref, defaultMunicipalityListSortDir, municipalityListSortLabels, resolveMunicipalityListSort, type MunicipalityListSortKey, type MunicipalityListState, } from '@/utilities/municipalityListUrl' type MunicipalitySortableHeadProps = { state: MunicipalityListState sortKey: MunicipalityListSortKey children?: ReactNode tooltip?: ReactNode className?: string align?: 'left' | 'center' | 'right' filterParam?: MunicipalityFilterParam /** Pairs, or bare catalog slugs labeled on the client (B16+ payload trim). */ filterOptions?: MunicipalityFilterOption[] | readonly string[] showPriorityFilter?: boolean } export const MunicipalitySortableHead = ({ state, sortKey, children, tooltip, className, align = 'left', filterParam, filterOptions, showPriorityFilter, }: MunicipalitySortableHeadProps) => { const href = buildMunicipalitySortHref(state, sortKey) const { sort: activeSort, dir } = resolveMunicipalityListSort(state) const active = activeSort === sortKey const label = children ?? municipalityListSortLabels[sortKey] const ariaSort = active ? (dir === 'asc' ? 'ascending' : 'descending') : 'none' const nextDir = active ? dir === 'asc' ? 'desc' : 'asc' : defaultMunicipalityListSortDir(sortKey) const nextDirLabel = nextDir === 'asc' ? 'crescente' : 'decrescente' const sortControl = ( {label} {active ? ( dir === 'asc' ? ( ) const labeledSort = tooltip ? ( {sortControl} ) : ( sortControl ) return ( {filterParam ? (
{labeledSort}
) : ( labeledSort )}
) }