Presupuestador_web/client/src/app/quotes/hooks/useDetailColumns.tsx

109 lines
3.0 KiB
TypeScript
Raw Normal View History

2024-06-29 19:39:25 +00:00
import {
DataTablaRowActionFunction,
DataTableRowActions,
DataTableRowDragHandleCell,
} from "@/components";
import { Checkbox } from "@/ui";
import { ColumnDef, Row, Table } from "@tanstack/react-table";
2024-07-10 18:54:33 +00:00
import { MoreHorizontalIcon } from "lucide-react";
2024-06-29 19:39:25 +00:00
import { useMemo } from "react";
/*function getSelectedRowRange<T>(
rows: Row<T>[],
currentID: number,
selectedID: number,
): Row<T>[] {
const rangeStart = selectedID > currentID ? currentID : selectedID;
const rangeEnd = rangeStart === currentID ? selectedID : currentID;
return rows.slice(rangeStart, rangeEnd + 1);
}*/
export function useDetailColumns<TData, TValue>(
columns: ColumnDef<TData>[],
options: {
enableDragHandleColumn?: boolean;
enableSelectionColumn?: boolean;
enableActionsColumn?: boolean;
rowActionFn?: DataTablaRowActionFunction<TData, TValue>;
} = {}
): ColumnDef<TData>[] {
const {
enableDragHandleColumn = false,
enableSelectionColumn = false,
enableActionsColumn = false,
rowActionFn = undefined,
} = options;
// const lastSelectedId = "";
return useMemo(() => {
if (enableSelectionColumn) {
columns.unshift({
id: "select",
2024-07-10 18:54:33 +00:00
/*header: ({ table }) => (
2024-06-29 19:39:25 +00:00
<Checkbox
id='select-all'
checked={
table.getIsAllPageRowsSelected() ||
(table.getIsSomePageRowsSelected() && "indeterminate")
}
onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}
aria-label='Seleccionar todo'
2024-07-10 18:54:33 +00:00
className='translate-y-[0px]'
2024-06-29 19:39:25 +00:00
/>
2024-07-10 18:54:33 +00:00
),*/
header: () => null,
2024-06-29 19:39:25 +00:00
// eslint-disable-next-line @typescript-eslint/no-unused-vars
cell: ({ row, table }: { row: Row<TData>; table: Table<TData> }) => (
<Checkbox
id={`select-row-${row.id}`}
checked={row.getIsSelected()}
disabled={!row.getCanSelect()}
onCheckedChange={row.getToggleSelectedHandler()}
aria-label='Seleccionar fila'
2024-07-10 18:54:33 +00:00
className='mt-2'
2024-06-29 19:39:25 +00:00
/>
),
enableSorting: false,
enableHiding: false,
size: 30,
});
}
if (enableDragHandleColumn) {
columns.unshift({
id: "row_drag_handle",
2024-07-10 18:54:33 +00:00
/*header: () => (
2024-06-29 19:39:25 +00:00
<UnfoldVertical aria-label='Mover fila' className='items-center justify-center w-4 h-4' />
2024-07-10 18:54:33 +00:00
),*/
header: () => null,
cell: (info) => <DataTableRowDragHandleCell rowId={info.row.id} />,
2024-06-29 19:39:25 +00:00
size: 16,
enableSorting: false,
enableHiding: false,
});
}
if (enableActionsColumn) {
columns.push({
id: "row_actions",
header: () => (
<MoreHorizontalIcon
aria-label='Acciones'
className='items-center justify-center w-4 h-4'
/>
),
cell: (props) => {
return <DataTableRowActions {...props} actions={rowActionFn} />;
},
size: 16,
enableSorting: false,
enableHiding: false,
});
}
return columns;
}, []);
}