'use client'; import { useRef } from 'react'; import { HugeiconsIcon } from '@hugeicons/react'; import { Search01Icon, Cancel01Icon, ColumnsThreeCogIcon, Download01Icon, } from '@hugeicons/core-free-icons'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { type ColumnDef, type ExportFormat } from './types'; interface TableToolbarProps { columns: ColumnDef[]; hiddenColumns: Set; globalFilter: string; showExport?: boolean; exportFormats?: ExportFormat[]; selectedCount?: number; onGlobalFilterChange: (value: string) => void; onColumnVisibilityChange: (key: string) => void; onExport?: (format: ExportFormat) => void; onClearSelection?: () => void; } export function TableToolbar({ columns, hiddenColumns, globalFilter, showExport, exportFormats = ['csv', 'excel', 'pdf'], selectedCount = 0, onGlobalFilterChange, onColumnVisibilityChange, onExport, onClearSelection, }: TableToolbarProps) { const inputRef = useRef(null); const toggleableColumns = columns.filter(col => col.hideable !== false); return (
{/* Global search */}
onGlobalFilterChange(e.target.value)} placeholder="Search…" className="pl-8 pr-8 h-8 text-sm" /> {globalFilter && ( )}
{/* Selection badge */} {selectedCount > 0 && (
{selectedCount} selected
)} {/* Column visibility */} }> Columns {toggleableColumns.map(col => ( onColumnVisibilityChange(col.key)} > {col.title} ))} {/* Export */} {showExport && onExport && ( }> Export {exportFormats.map(fmt => ( onExport(fmt)}> {fmt.toUpperCase()} ))} )}
); }