'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
)}
)
}