import { Button, Separator, Tooltip, TooltipContent, TooltipTrigger } from '@repo/shadcn-ui/components' import { cn } from '@repo/shadcn-ui/lib/utils' import { Table } from "@tanstack/react-table" import { ArrowDownIcon, ArrowUpIcon, CopyPlusIcon, PlusIcon, ScanIcon, TrashIcon } from 'lucide-react' import { useCallback, useMemo } from 'react' import { useTranslation } from "../../locales/i18n.ts" import { DataTableViewOptions } from './data-table-view-options.tsx' import { DataTableMeta } from './data-table.tsx' interface DataTableToolbarProps { table: Table showViewOptions?: boolean } export function DataTableToolbar({ table, showViewOptions = true, }: DataTableToolbarProps) { const { t } = useTranslation() const meta = table.options.meta as DataTableMeta | undefined const rowSelection = table.getSelectedRowModel().rows; const selectedCount = rowSelection.length; const hasSelection = selectedCount > 0; const selectedRowIndexes = useMemo(() => rowSelection.map((row) => row.index), [rowSelection]); const handleAdd = useCallback(() => meta?.tableOps?.onAdd?.(table), [meta]) const handleDuplicateSelected = useCallback( () => meta?.bulkOps?.duplicateSelected?.(selectedRowIndexes, table), [meta, selectedRowIndexes] ) const handleMoveSelectedUp = useCallback( () => meta?.bulkOps?.moveSelectedUp?.(selectedRowIndexes, table), [meta, selectedRowIndexes] ) const handleMoveSelectedDown = useCallback( () => meta?.bulkOps?.moveSelectedDown?.(selectedRowIndexes, table), [meta, selectedRowIndexes] ) const handleRemoveSelected = useCallback( () => meta?.bulkOps?.removeSelected?.(selectedRowIndexes, table), [meta, selectedRowIndexes] ) return (
{/* IZQUIERDA: acciones globales y sobre selección */}
{meta?.tableOps?.onAdd && ( )} {hasSelection && ( <> {meta?.bulkOps?.duplicateSelected && ( )} {meta?.bulkOps?.moveSelectedUp && ( {t("components.datatable.actions.move_up")} )} {meta?.bulkOps?.moveSelectedDown && ( {t("components.datatable.actions.move_down")} )} {meta?.bulkOps?.removeSelected && ( <> )} Quita la selección )}
{/* DERECHA: opciones de vista / filtros */}
{showViewOptions && }
) }