'use client'; import * as React from 'react'; import { cn } from '@djangocfg/ui-core/lib'; import { ArrowUp, ArrowDown, ArrowUpDown } from 'lucide-react'; import { TableHeader, TableRow, TableHead, } from '@djangocfg/ui-core/components'; import { useDataTableContext } from '../context/DataTableContext'; export function DataTableHeader() { const { columns, selectionMode, selectAllVisible, isSelected, rows, getRowId } = useDataTableContext(); const allVisibleSelected = rows.length > 0 && rows.every((r) => isSelected(getRowId(r))); return ( {selectionMode === 'multiple' && ( )} {selectionMode === 'single' && } {columns.map((col) => ( ))} ); } DataTableHeader.displayName = 'DataTableHeader'; function DataTableHeaderCell({ column }: { column: { key: string; header: React.ReactNode; sortable?: boolean; align?: 'left' | 'center' | 'right' } }) { const { sort, setSort } = useDataTableContext(); const isSorted = sort.key === column.key; return ( column.sortable && setSort(column.key)} data-sort={isSorted ? sort.direction : undefined} > {column.header} {column.sortable && ( {isSorted && sort.direction === 'asc' && } {isSorted && sort.direction === 'desc' && } {!isSorted && } )} ); } function DataTableFilterRow() { const { columns, filters, setFilter, selectionMode } = useDataTableContext(); const hasFilterable = columns.some((c) => c.filterable); if (!hasFilterable) return null; return ( {selectionMode !== 'none' && } {columns.map((col) => ( {col.filterable ? ( setFilter(col.key, e.target.value)} placeholder="Filter…" className={cn( 'w-full rounded-sm border border-input bg-background px-2 py-1 text-xs', 'placeholder:text-muted-foreground', 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring' )} /> ) : ( )} ))} ); }