From b88589c9cf8473a090f16d562dce744792fda567 Mon Sep 17 00:00:00 2001 From: Gianmarco Manni Date: Thu, 6 Aug 2026 08:54:00 +0200 Subject: [PATCH 1/2] feature/improveDraggable --- CHANGELOG.md | 8 ++++++++ .../utils/createReactDataTableColumnHelper.tsx | 15 ++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f6b94a..29b2937 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Possibility to pass isEnabled as a function depencing on the row in `createDraggableColumn` + +### Fixed + +- `createDraggableColumn` to disable draggable feature when isEnabled = false + ## [6.0.0] - 2026-02-24 ### Changed diff --git a/src/lib/utils/createReactDataTableColumnHelper.tsx b/src/lib/utils/createReactDataTableColumnHelper.tsx index d4db013..61919ff 100644 --- a/src/lib/utils/createReactDataTableColumnHelper.tsx +++ b/src/lib/utils/createReactDataTableColumnHelper.tsx @@ -1,6 +1,6 @@ import { useSortable } from "@dnd-kit/sortable"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { ColumnDef, ColumnHelper, DeepKeys, DisplayColumnDef, RowData, createColumnHelper } from "@tanstack/react-table"; +import { ColumnDef, ColumnHelper, DeepKeys, DisplayColumnDef, RowData, Row, createColumnHelper } from "@tanstack/react-table"; import { ReactNode } from "react"; import type { DropdownColumnFilterOption } from "src/react-table"; import { faGripLines } from "@fortawesome/free-solid-svg-icons"; @@ -25,18 +25,19 @@ const createReactDataTableColumnHelper = (): ReactDataTab const createDraggableColumn = ( columnKey: DeepKeys, columndDef: Omit, "id" | "cell">, - isEnabled?: boolean, + isEnabled?: boolean | ((row: Row) => boolean), draggableElement?: ReactNode, ) => { - const RowDragHandleCell = ({ rowId }: { rowId: string }) => { - const { attributes, listeners, isDragging } = useSortable({ id: rowId }); + const RowDragHandleCell = ({ row }: { row: Row }) => { + const isEnabledInternal = isEnabled === undefined ? true : typeof isEnabled === "function" ? isEnabled(row) : isEnabled; + const { attributes, listeners, isDragging } = useSortable({ id: row.id, disabled: !isEnabledInternal }); return ( {draggableElement ?? } @@ -46,7 +47,7 @@ const createReactDataTableColumnHelper = (): ReactDataTab return columnHelper.display({ ...columndDef, id: columnKey as string, - cell: ({ row }) => , + cell: ({ row }) => , }); }; From ffbb7a0112eb48f54eca92636e9580f79da9bece Mon Sep 17 00:00:00 2001 From: Gianmarco Manni Date: Thu, 6 Aug 2026 09:07:31 +0200 Subject: [PATCH 2/2] fix type --- src/lib/utils/createReactDataTableColumnHelper.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lib/utils/createReactDataTableColumnHelper.tsx b/src/lib/utils/createReactDataTableColumnHelper.tsx index 61919ff..fdcf917 100644 --- a/src/lib/utils/createReactDataTableColumnHelper.tsx +++ b/src/lib/utils/createReactDataTableColumnHelper.tsx @@ -14,7 +14,7 @@ interface ReactDataTableColumnHelper extends ColumnHelper createDraggableColumn: ( columnKey: DeepKeys, columndDef: Omit, "id" | "cell">, - isEnabled?: boolean, + isEnabled?: boolean | ((row: Row) => boolean), draggableElement?: ReactNode, ) => ColumnDef; } @@ -22,11 +22,11 @@ interface ReactDataTableColumnHelper extends ColumnHelper const createReactDataTableColumnHelper = (): ReactDataTableColumnHelper => { const columnHelper = createColumnHelper(); - const createDraggableColumn = ( - columnKey: DeepKeys, - columndDef: Omit, "id" | "cell">, - isEnabled?: boolean | ((row: Row) => boolean), - draggableElement?: ReactNode, + const createDraggableColumn: ReactDataTableColumnHelper["createDraggableColumn"] = ( + columnKey, + columndDef, + isEnabled, + draggableElement, ) => { const RowDragHandleCell = ({ row }: { row: Row }) => { const isEnabledInternal = isEnabled === undefined ? true : typeof isEnabled === "function" ? isEnabled(row) : isEnabled;