@navikt/ds-react 8.10.4 → 8.10.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/data/data-grid/index.d.ts +2 -0
- package/cjs/data/data-grid/index.js +7 -0
- package/cjs/data/data-grid/index.js.map +1 -0
- package/cjs/data/data-grid/root/DataGridRoot.context.d.ts +11 -0
- package/cjs/data/data-grid/root/DataGridRoot.context.js +11 -0
- package/cjs/data/data-grid/root/DataGridRoot.context.js.map +1 -0
- package/cjs/data/data-grid/root/DataGridRoot.d.ts +38 -0
- package/cjs/data/data-grid/root/DataGridRoot.js +68 -0
- package/cjs/data/data-grid/root/DataGridRoot.js.map +1 -0
- package/cjs/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js +11 -13
- package/cjs/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js.map +1 -1
- package/cjs/data/drag-and-drop/root/DragAndDrop.context.d.ts +4 -2
- package/cjs/data/drag-and-drop/root/DragAndDrop.context.js.map +1 -1
- package/cjs/data/drag-and-drop/root/DragAndDropRoot.js +44 -46
- package/cjs/data/drag-and-drop/root/DragAndDropRoot.js.map +1 -1
- package/cjs/data/drag-and-drop/types.d.ts +0 -4
- package/cjs/data/stories/Data.test-data.d.ts +2 -5
- package/cjs/data/stories/Data.test-data.js +30 -39
- package/cjs/data/stories/Data.test-data.js.map +1 -1
- package/cjs/data/table/base-cell/DataTableBaseCell.d.ts +15 -15
- package/cjs/data/table/base-cell/DataTableBaseCell.js +4 -8
- package/cjs/data/table/base-cell/DataTableBaseCell.js.map +1 -1
- package/cjs/data/table/column-header/DataTableColumnHeader.d.ts +24 -6
- package/cjs/data/table/column-header/DataTableColumnHeader.js +22 -27
- package/cjs/data/table/column-header/DataTableColumnHeader.js.map +1 -1
- package/cjs/data/table/column-header/useTableColumnResize.d.ts +19 -29
- package/cjs/data/table/column-header/useTableColumnResize.js +24 -22
- package/cjs/data/table/column-header/useTableColumnResize.js.map +1 -1
- package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.d.ts +1 -1
- package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.js +2 -2
- package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.js.map +1 -1
- package/cjs/data/table/helpers/collectTableRowEntries.d.ts +9 -7
- package/cjs/data/table/helpers/collectTableRowEntries.js +18 -10
- package/cjs/data/table/helpers/collectTableRowEntries.js.map +1 -1
- package/cjs/data/table/helpers/selection/getMultipleSelectProps.d.ts +13 -11
- package/cjs/data/table/helpers/selection/getMultipleSelectProps.js +43 -53
- package/cjs/data/table/helpers/selection/getMultipleSelectProps.js.map +1 -1
- package/cjs/data/table/helpers/selection/getSingleSelectProps.d.ts +9 -8
- package/cjs/data/table/helpers/selection/getSingleSelectProps.js +23 -10
- package/cjs/data/table/helpers/selection/getSingleSelectProps.js.map +1 -1
- package/cjs/data/table/helpers/selection/selection.types.d.ts +19 -19
- package/cjs/data/table/helpers/selection/selection.utils.d.ts +21 -0
- package/cjs/data/table/helpers/selection/selection.utils.js +46 -0
- package/cjs/data/table/helpers/selection/selection.utils.js.map +1 -0
- package/cjs/data/table/helpers/table-focus.d.ts +0 -3
- package/cjs/data/table/helpers/table-focus.js +38 -8
- package/cjs/data/table/helpers/table-focus.js.map +1 -1
- package/cjs/data/table/hooks/useColumnOptions.d.ts +16 -5
- package/cjs/data/table/hooks/useColumnOptions.js +26 -8
- package/cjs/data/table/hooks/useColumnOptions.js.map +1 -1
- package/cjs/data/table/hooks/useGridCache.js +2 -2
- package/cjs/data/table/hooks/useGridCache.js.map +1 -1
- package/cjs/data/table/hooks/useTableDetailsPanel.d.ts +10 -13
- package/cjs/data/table/hooks/useTableDetailsPanel.js +7 -6
- package/cjs/data/table/hooks/useTableDetailsPanel.js.map +1 -1
- package/cjs/data/table/hooks/useTableItems.d.ts +31 -17
- package/cjs/data/table/hooks/useTableItems.js +10 -20
- package/cjs/data/table/hooks/useTableItems.js.map +1 -1
- package/cjs/data/table/hooks/useTableKeyboardNav.d.ts +1 -6
- package/cjs/data/table/hooks/useTableKeyboardNav.js +6 -5
- package/cjs/data/table/hooks/useTableKeyboardNav.js.map +1 -1
- package/cjs/data/table/hooks/useTableSelection.d.ts +6 -6
- package/cjs/data/table/hooks/useTableSelection.js +13 -13
- package/cjs/data/table/hooks/useTableSelection.js.map +1 -1
- package/cjs/data/table/hooks/useTableSort.d.ts +2 -2
- package/cjs/data/table/hooks/useTableSort.js +4 -5
- package/cjs/data/table/hooks/useTableSort.js.map +1 -1
- package/cjs/data/table/root/DataTable.types.d.ts +22 -13
- package/cjs/data/table/root/DataTableRoot.context.d.ts +13 -7
- package/cjs/data/table/root/DataTableRoot.context.js.map +1 -1
- package/cjs/data/table/root/DataTableRoot.d.ts +49 -72
- package/cjs/data/table/root/DataTableRoot.js +56 -72
- package/cjs/data/table/root/DataTableRoot.js.map +1 -1
- package/cjs/data/table/root/DataTableRoot.legacy.d.ts +2 -7
- package/cjs/data/table/root/DataTableRoot.legacy.js +17 -3
- package/cjs/data/table/root/DataTableRoot.legacy.js.map +1 -1
- package/cjs/data/table/sub-row-toggle/DataTableSubRowToggle.js +4 -4
- package/cjs/data/table/sub-row-toggle/DataTableSubRowToggle.js.map +1 -1
- package/cjs/data/table/tbody/DataTableTbody.js +4 -2
- package/cjs/data/table/tbody/DataTableTbody.js.map +1 -1
- package/cjs/data/table/tr/DataTableTr.d.ts +5 -3
- package/cjs/data/table/tr/DataTableTr.js +36 -23
- package/cjs/data/table/tr/DataTableTr.js.map +1 -1
- package/cjs/table/ColumnHeader.js +2 -1
- package/cjs/table/ColumnHeader.js.map +1 -1
- package/esm/data/data-grid/index.d.ts +2 -0
- package/esm/data/data-grid/index.js +3 -0
- package/esm/data/data-grid/index.js.map +1 -0
- package/esm/data/data-grid/root/DataGridRoot.context.d.ts +11 -0
- package/esm/data/data-grid/root/DataGridRoot.context.js +7 -0
- package/esm/data/data-grid/root/DataGridRoot.context.js.map +1 -0
- package/esm/data/data-grid/root/DataGridRoot.d.ts +38 -0
- package/esm/data/data-grid/root/DataGridRoot.js +32 -0
- package/esm/data/data-grid/root/DataGridRoot.js.map +1 -0
- package/esm/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js +11 -13
- package/esm/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js.map +1 -1
- package/esm/data/drag-and-drop/root/DragAndDrop.context.d.ts +4 -2
- package/esm/data/drag-and-drop/root/DragAndDrop.context.js.map +1 -1
- package/esm/data/drag-and-drop/root/DragAndDropRoot.js +44 -46
- package/esm/data/drag-and-drop/root/DragAndDropRoot.js.map +1 -1
- package/esm/data/drag-and-drop/types.d.ts +0 -4
- package/esm/data/stories/Data.test-data.d.ts +2 -5
- package/esm/data/stories/Data.test-data.js +30 -39
- package/esm/data/stories/Data.test-data.js.map +1 -1
- package/esm/data/table/base-cell/DataTableBaseCell.d.ts +15 -15
- package/esm/data/table/base-cell/DataTableBaseCell.js +4 -8
- package/esm/data/table/base-cell/DataTableBaseCell.js.map +1 -1
- package/esm/data/table/column-header/DataTableColumnHeader.d.ts +24 -6
- package/esm/data/table/column-header/DataTableColumnHeader.js +23 -28
- package/esm/data/table/column-header/DataTableColumnHeader.js.map +1 -1
- package/esm/data/table/column-header/useTableColumnResize.d.ts +19 -29
- package/esm/data/table/column-header/useTableColumnResize.js +24 -22
- package/esm/data/table/column-header/useTableColumnResize.js.map +1 -1
- package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.d.ts +1 -1
- package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.js +2 -2
- package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.js.map +1 -1
- package/esm/data/table/helpers/collectTableRowEntries.d.ts +9 -7
- package/esm/data/table/helpers/collectTableRowEntries.js +18 -10
- package/esm/data/table/helpers/collectTableRowEntries.js.map +1 -1
- package/esm/data/table/helpers/selection/getMultipleSelectProps.d.ts +13 -11
- package/esm/data/table/helpers/selection/getMultipleSelectProps.js +43 -53
- package/esm/data/table/helpers/selection/getMultipleSelectProps.js.map +1 -1
- package/esm/data/table/helpers/selection/getSingleSelectProps.d.ts +9 -8
- package/esm/data/table/helpers/selection/getSingleSelectProps.js +23 -10
- package/esm/data/table/helpers/selection/getSingleSelectProps.js.map +1 -1
- package/esm/data/table/helpers/selection/selection.types.d.ts +19 -19
- package/esm/data/table/helpers/selection/selection.utils.d.ts +21 -0
- package/esm/data/table/helpers/selection/selection.utils.js +43 -0
- package/esm/data/table/helpers/selection/selection.utils.js.map +1 -0
- package/esm/data/table/helpers/table-focus.d.ts +0 -3
- package/esm/data/table/helpers/table-focus.js +38 -8
- package/esm/data/table/helpers/table-focus.js.map +1 -1
- package/esm/data/table/hooks/useColumnOptions.d.ts +16 -5
- package/esm/data/table/hooks/useColumnOptions.js +26 -8
- package/esm/data/table/hooks/useColumnOptions.js.map +1 -1
- package/esm/data/table/hooks/useGridCache.js +2 -2
- package/esm/data/table/hooks/useGridCache.js.map +1 -1
- package/esm/data/table/hooks/useTableDetailsPanel.d.ts +10 -13
- package/esm/data/table/hooks/useTableDetailsPanel.js +7 -6
- package/esm/data/table/hooks/useTableDetailsPanel.js.map +1 -1
- package/esm/data/table/hooks/useTableItems.d.ts +31 -17
- package/esm/data/table/hooks/useTableItems.js +11 -18
- package/esm/data/table/hooks/useTableItems.js.map +1 -1
- package/esm/data/table/hooks/useTableKeyboardNav.d.ts +1 -6
- package/esm/data/table/hooks/useTableKeyboardNav.js +7 -6
- package/esm/data/table/hooks/useTableKeyboardNav.js.map +1 -1
- package/esm/data/table/hooks/useTableSelection.d.ts +6 -6
- package/esm/data/table/hooks/useTableSelection.js +13 -13
- package/esm/data/table/hooks/useTableSelection.js.map +1 -1
- package/esm/data/table/hooks/useTableSort.d.ts +2 -2
- package/esm/data/table/hooks/useTableSort.js +4 -5
- package/esm/data/table/hooks/useTableSort.js.map +1 -1
- package/esm/data/table/root/DataTable.types.d.ts +22 -13
- package/esm/data/table/root/DataTableRoot.context.d.ts +13 -7
- package/esm/data/table/root/DataTableRoot.context.js.map +1 -1
- package/esm/data/table/root/DataTableRoot.d.ts +49 -72
- package/esm/data/table/root/DataTableRoot.js +58 -74
- package/esm/data/table/root/DataTableRoot.js.map +1 -1
- package/esm/data/table/root/DataTableRoot.legacy.d.ts +2 -7
- package/esm/data/table/root/DataTableRoot.legacy.js +17 -3
- package/esm/data/table/root/DataTableRoot.legacy.js.map +1 -1
- package/esm/data/table/sub-row-toggle/DataTableSubRowToggle.js +4 -4
- package/esm/data/table/sub-row-toggle/DataTableSubRowToggle.js.map +1 -1
- package/esm/data/table/tbody/DataTableTbody.js +4 -2
- package/esm/data/table/tbody/DataTableTbody.js.map +1 -1
- package/esm/data/table/tr/DataTableTr.d.ts +5 -3
- package/esm/data/table/tr/DataTableTr.js +35 -23
- package/esm/data/table/tr/DataTableTr.js.map +1 -1
- package/esm/table/ColumnHeader.js +2 -1
- package/esm/table/ColumnHeader.js.map +1 -1
- package/package.json +8 -7
- package/src/data/data-grid/index.ts +3 -0
- package/src/data/data-grid/root/DataGridRoot.context.ts +16 -0
- package/src/data/data-grid/root/DataGridRoot.tsx +71 -0
- package/src/data/drag-and-drop/drag-handler/DragAndDropDragHandler.tsx +11 -17
- package/src/data/drag-and-drop/root/DragAndDrop.context.tsx +4 -2
- package/src/data/drag-and-drop/root/DragAndDropRoot.tsx +63 -52
- package/src/data/drag-and-drop/types.ts +0 -5
- package/src/data/stories/Data.test-data.tsx +52 -44
- package/src/data/table/agent-component-review.md +175 -0
- package/src/data/table/base-cell/DataTableBaseCell.tsx +31 -21
- package/src/data/table/column-header/DataTableColumnHeader.tsx +63 -58
- package/src/data/table/column-header/useTableColumnResize.ts +55 -71
- package/src/data/table/details-panel-row/DataTableDetailsPanelRow.tsx +7 -3
- package/src/data/table/helpers/collectTableRowEntries.ts +32 -19
- package/src/data/table/helpers/selection/getMultipleSelectProps.ts +65 -85
- package/src/data/table/helpers/selection/getSingleSelectProps.ts +35 -17
- package/src/data/table/helpers/selection/selection.types.ts +19 -19
- package/src/data/table/helpers/selection/selection.utils.test.ts +161 -0
- package/src/data/table/helpers/selection/selection.utils.ts +73 -0
- package/src/data/table/helpers/table-focus.ts +63 -9
- package/src/data/table/hooks/__tests__/useTableItems.test.ts +48 -8
- package/src/data/table/hooks/useColumnOptions.ts +48 -14
- package/src/data/table/hooks/useGridCache.ts +3 -2
- package/src/data/table/hooks/useTableDetailsPanel.tsx +25 -25
- package/src/data/table/hooks/useTableItems.ts +51 -42
- package/src/data/table/hooks/useTableKeyboardNav.ts +7 -15
- package/src/data/table/hooks/useTableSelection.ts +26 -31
- package/src/data/table/hooks/useTableSort.ts +10 -9
- package/src/data/table/root/DataTable.types.ts +30 -25
- package/src/data/table/root/DataTableRoot.context.ts +19 -7
- package/src/data/table/root/DataTableRoot.legacy.tsx +22 -14
- package/src/data/table/root/DataTableRoot.tsx +271 -320
- package/src/data/table/sub-row-toggle/DataTableSubRowToggle.tsx +5 -4
- package/src/data/table/tbody/DataTableTbody.tsx +6 -2
- package/src/data/table/tr/DataTableTr.tsx +98 -35
- package/src/table/ColumnHeader.tsx +2 -1
- package/cjs/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.d.ts +0 -22
- package/cjs/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.js +0 -35
- package/cjs/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.js.map +0 -1
- package/cjs/data/drag-and-drop-old/item/DataDragAndDropItem.d.ts +0 -27
- package/cjs/data/drag-and-drop-old/item/DataDragAndDropItem.js +0 -86
- package/cjs/data/drag-and-drop-old/item/DataDragAndDropItem.js.map +0 -1
- package/cjs/data/drag-and-drop-old/root/DataDragAndDrop.context.d.ts +0 -5
- package/cjs/data/drag-and-drop-old/root/DataDragAndDrop.context.js +0 -6
- package/cjs/data/drag-and-drop-old/root/DataDragAndDrop.context.js.map +0 -1
- package/cjs/data/drag-and-drop-old/root/DataDragAndDropRoot.d.ts +0 -24
- package/cjs/data/drag-and-drop-old/root/DataDragAndDropRoot.js +0 -108
- package/cjs/data/drag-and-drop-old/root/DataDragAndDropRoot.js.map +0 -1
- package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.d.ts +0 -46
- package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.js +0 -112
- package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.js.map +0 -1
- package/esm/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.d.ts +0 -22
- package/esm/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.js +0 -29
- package/esm/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.js.map +0 -1
- package/esm/data/drag-and-drop-old/item/DataDragAndDropItem.d.ts +0 -27
- package/esm/data/drag-and-drop-old/item/DataDragAndDropItem.js +0 -50
- package/esm/data/drag-and-drop-old/item/DataDragAndDropItem.js.map +0 -1
- package/esm/data/drag-and-drop-old/root/DataDragAndDrop.context.d.ts +0 -5
- package/esm/data/drag-and-drop-old/root/DataDragAndDrop.context.js +0 -3
- package/esm/data/drag-and-drop-old/root/DataDragAndDrop.context.js.map +0 -1
- package/esm/data/drag-and-drop-old/root/DataDragAndDropRoot.d.ts +0 -24
- package/esm/data/drag-and-drop-old/root/DataDragAndDropRoot.js +0 -68
- package/esm/data/drag-and-drop-old/root/DataDragAndDropRoot.js.map +0 -1
- package/esm/data/table/helpers/selection/SelectionSubtreeHelper.d.ts +0 -46
- package/esm/data/table/helpers/selection/SelectionSubtreeHelper.js +0 -109
- package/esm/data/table/helpers/selection/SelectionSubtreeHelper.js.map +0 -1
- package/src/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.tsx +0 -104
- package/src/data/drag-and-drop-old/item/DataDragAndDropItem.tsx +0 -74
- package/src/data/drag-and-drop-old/root/DataDragAndDrop.context.tsx +0 -11
- package/src/data/drag-and-drop-old/root/DataDragAndDropRoot.tsx +0 -96
- package/src/data/table/helpers/selection/SelectionSubtreeHelper.test.ts +0 -66
- package/src/data/table/helpers/selection/SelectionSubtreeHelper.ts +0 -162
- package/src/data/table/hooks/__tests__/useTableSelection.test.ts +0 -488
|
@@ -8,35 +8,37 @@ import type {
|
|
|
8
8
|
SelectionProps,
|
|
9
9
|
TableSelection,
|
|
10
10
|
} from "../helpers/selection/selection.types";
|
|
11
|
+
import type { TableRowEntryId } from "../root/DataTable.types";
|
|
12
|
+
import type { UseTableItemsReturn } from "./useTableItems";
|
|
11
13
|
|
|
12
|
-
type UseTableSelectionArgs = {
|
|
13
|
-
selection?: SelectionProps
|
|
14
|
-
|
|
15
|
-
visibleRowIds: (string | number)[];
|
|
16
|
-
/* Direct child ids let selection walk nested rows lazily. */
|
|
17
|
-
childRowIdsById?: Map<string | number, (string | number)[]>;
|
|
14
|
+
type UseTableSelectionArgs<T> = {
|
|
15
|
+
selection?: SelectionProps<T>;
|
|
16
|
+
tableItems: UseTableItemsReturn<T>;
|
|
18
17
|
};
|
|
19
18
|
|
|
20
19
|
type UseTableSelectionReturn = {
|
|
21
20
|
selection: TableSelection;
|
|
22
21
|
renderSelection: boolean;
|
|
23
|
-
|
|
22
|
+
selectionTrigger: "row" | "control";
|
|
24
23
|
};
|
|
25
24
|
|
|
26
|
-
function useTableSelection({
|
|
27
|
-
selection = {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
function useTableSelection<T>({
|
|
26
|
+
selection = {
|
|
27
|
+
selectionMode: "none",
|
|
28
|
+
},
|
|
29
|
+
tableItems,
|
|
30
|
+
}: UseTableSelectionArgs<T>): UseTableSelectionReturn {
|
|
31
31
|
const {
|
|
32
|
-
selectionMode
|
|
32
|
+
selectionMode,
|
|
33
33
|
defaultSelectedKeys,
|
|
34
34
|
selectedKeys: selectedKeysProp,
|
|
35
35
|
onSelectionChange,
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
enableRowSelection,
|
|
37
|
+
selectionTrigger = "row",
|
|
38
38
|
} = selection;
|
|
39
39
|
|
|
40
|
+
const { visibleRowIds = [] } = tableItems;
|
|
41
|
+
|
|
40
42
|
const radioGroupName = useId();
|
|
41
43
|
|
|
42
44
|
const [selectedKeys, setSelectedKeys] = useControllableState<SelectedKeysT>({
|
|
@@ -47,17 +49,12 @@ function useTableSelection({
|
|
|
47
49
|
|
|
48
50
|
const selectedKeysSet = useMemo(() => new Set(selectedKeys), [selectedKeys]);
|
|
49
51
|
|
|
50
|
-
const disabledKeysSet = useMemo(
|
|
51
|
-
() => new Set(disabledSelectionKeys),
|
|
52
|
-
[disabledSelectionKeys],
|
|
53
|
-
);
|
|
54
|
-
|
|
55
52
|
const isRowSelected = useCallback(
|
|
56
|
-
(rowId:
|
|
53
|
+
(rowId: TableRowEntryId) => selectedKeysSet.has(rowId),
|
|
57
54
|
[selectedKeysSet],
|
|
58
55
|
);
|
|
59
56
|
|
|
60
|
-
const baseSelection = { selectedKeys,
|
|
57
|
+
const baseSelection = { selectedKeys, isRowSelected };
|
|
61
58
|
|
|
62
59
|
if (selectionMode === "none") {
|
|
63
60
|
return {
|
|
@@ -66,7 +63,7 @@ function useTableSelection({
|
|
|
66
63
|
...baseSelection,
|
|
67
64
|
selectedKeys: [],
|
|
68
65
|
},
|
|
69
|
-
|
|
66
|
+
selectionTrigger,
|
|
70
67
|
renderSelection: false,
|
|
71
68
|
};
|
|
72
69
|
}
|
|
@@ -79,11 +76,11 @@ function useTableSelection({
|
|
|
79
76
|
...getSingleSelectProps({
|
|
80
77
|
selectedKeysSet,
|
|
81
78
|
setSelectedKeys,
|
|
82
|
-
disabledKeysSet,
|
|
83
79
|
name: radioGroupName,
|
|
80
|
+
enableRowSelection,
|
|
84
81
|
}),
|
|
85
82
|
},
|
|
86
|
-
|
|
83
|
+
selectionTrigger,
|
|
87
84
|
renderSelection: visibleRowIds.length !== 0,
|
|
88
85
|
};
|
|
89
86
|
}
|
|
@@ -96,12 +93,11 @@ function useTableSelection({
|
|
|
96
93
|
selectedKeysSet,
|
|
97
94
|
selectedKeys,
|
|
98
95
|
setSelectedKeys,
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
childRowIdsById,
|
|
96
|
+
enableRowSelection,
|
|
97
|
+
tableItems,
|
|
102
98
|
}),
|
|
103
99
|
},
|
|
104
|
-
|
|
100
|
+
selectionTrigger,
|
|
105
101
|
renderSelection: visibleRowIds.length !== 0,
|
|
106
102
|
};
|
|
107
103
|
}
|
|
@@ -113,10 +109,9 @@ const noSelectionState: UseTableSelectionReturn = {
|
|
|
113
109
|
selection: {
|
|
114
110
|
selectionMode: "none",
|
|
115
111
|
selectedKeys: [],
|
|
116
|
-
disabledSelectionKeys: [],
|
|
117
112
|
isRowSelected: () => false,
|
|
118
113
|
},
|
|
119
|
-
|
|
114
|
+
selectionTrigger: "row",
|
|
120
115
|
renderSelection: false,
|
|
121
116
|
};
|
|
122
117
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useCallback } from "react";
|
|
2
|
+
import { consoleWarning } from "../../../utils/helpers/consoleWarning";
|
|
2
3
|
import { useControllableState } from "../../../utils/hooks";
|
|
3
4
|
import type { SortChangeDetail, SortEntry } from "../root/DataTable.types";
|
|
4
5
|
|
|
@@ -40,22 +41,22 @@ type UseTableSortResults = {
|
|
|
40
41
|
sortState: SortEntry[];
|
|
41
42
|
};
|
|
42
43
|
|
|
43
|
-
function useTableSort(options
|
|
44
|
-
const { defaultSort
|
|
44
|
+
function useTableSort(options?: TableSortOptions): UseTableSortResults {
|
|
45
|
+
const { defaultSort, onSortChange, sort: sortOption } = options || {};
|
|
45
46
|
|
|
46
47
|
const [sort, setSort] = useControllableState({
|
|
47
48
|
value: sortOption,
|
|
48
|
-
defaultValue: defaultSort,
|
|
49
|
+
defaultValue: defaultSort || [],
|
|
49
50
|
});
|
|
50
51
|
|
|
51
52
|
const handleSortClick = useCallback(
|
|
52
53
|
(id: string, event: React.MouseEvent<HTMLElement, MouseEvent>) => {
|
|
53
54
|
if (id === undefined) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
consoleWarning(
|
|
56
|
+
"DataTable: Column id is undefined for sort event on target",
|
|
57
|
+
event.target,
|
|
58
|
+
"Make sure your column definitions include an 'id' property.",
|
|
59
|
+
);
|
|
59
60
|
return;
|
|
60
61
|
}
|
|
61
62
|
|
|
@@ -100,4 +101,4 @@ function nextSortEntries(
|
|
|
100
101
|
}
|
|
101
102
|
|
|
102
103
|
export { useTableSort };
|
|
103
|
-
export type { TableSortOptions };
|
|
104
|
+
export type { TableSortOptions, UseTableSortResults };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DataTableColumnHeaderProps } from "../column-header/DataTableColumnHeader";
|
|
2
2
|
|
|
3
3
|
type SortDirection = "asc" | "desc" | "none";
|
|
4
4
|
|
|
@@ -7,35 +7,24 @@ type SortDirection = "asc" | "desc" | "none";
|
|
|
7
7
|
* - Consider "accessorKey" or similar to allow simple column definitions without a cell function.
|
|
8
8
|
* - Add "align" property for better control over text alignment in cells.
|
|
9
9
|
*/
|
|
10
|
-
type ColumnDefinition<T
|
|
11
|
-
ResizeProps,
|
|
12
|
-
| "resizable"
|
|
13
|
-
| "width"
|
|
14
|
-
| "defaultWidth"
|
|
15
|
-
| "autoWidth"
|
|
16
|
-
| "minWidth"
|
|
17
|
-
| "maxWidth"
|
|
18
|
-
| "onWidthChange"
|
|
19
|
-
> & {
|
|
10
|
+
type ColumnDefinition<T> = {
|
|
20
11
|
id: string;
|
|
21
12
|
/**
|
|
22
13
|
* Text alignment for cells in this column.
|
|
23
14
|
*
|
|
24
|
-
*
|
|
25
15
|
* @default "left"
|
|
26
16
|
*/
|
|
27
|
-
align?: "left" | "right" | "center";
|
|
17
|
+
align?: "left" | "right" | "center"; // TODO: Pri zero: Use same name as in DataTableColumnHeaderProps (DataTableBaseCellProps) so that we can just Pick<DataTableColumnHeaderProps, "textAlign">
|
|
28
18
|
/**
|
|
29
19
|
* Assigned to the cell's `th` element instead of `td` if true.
|
|
30
20
|
*
|
|
31
21
|
* Should be used for cells that act as row headers. Each row should have one rowheader, and only have one cell with `isRowHeader: true`,
|
|
32
|
-
*
|
|
33
|
-
* TODO: Not implemented
|
|
34
|
-
* - Add a generic tablecell component that can render either a td or th based on context or this prop.
|
|
22
|
+
* TODO: Better documentation, consider warning if not one column has this set to true.
|
|
35
23
|
*/
|
|
36
24
|
isRowHeader?: boolean;
|
|
37
25
|
/**
|
|
38
26
|
* Renders table header-cell
|
|
27
|
+
* TODO: Pri zero rename to headerCell
|
|
39
28
|
*/
|
|
40
29
|
header?: React.ReactNode;
|
|
41
30
|
/**
|
|
@@ -44,6 +33,7 @@ type ColumnDefinition<T, DetailsT = Record<string, any>> = Pick<
|
|
|
44
33
|
cell: (item: T) => React.ReactNode;
|
|
45
34
|
/**
|
|
46
35
|
* Label of header. Renders if header is not provided.
|
|
36
|
+
* TODO: Pri zero consider renaming to header
|
|
47
37
|
*/
|
|
48
38
|
label: string;
|
|
49
39
|
/**
|
|
@@ -51,16 +41,9 @@ type ColumnDefinition<T, DetailsT = Record<string, any>> = Pick<
|
|
|
51
41
|
* Use `sort` and `onSortChange` on the root component to control sort state.
|
|
52
42
|
*/
|
|
53
43
|
sortable?: boolean;
|
|
54
|
-
|
|
55
|
-
* Additional metadata that can be used for filtering or other purposes. Not used by the table itself.
|
|
56
|
-
*/
|
|
57
|
-
details?: DetailsT;
|
|
58
|
-
};
|
|
44
|
+
} & Pick<DataTableColumnHeaderProps, "width">;
|
|
59
45
|
|
|
60
|
-
type ColumnDefinitions<T
|
|
61
|
-
T,
|
|
62
|
-
DetailsT
|
|
63
|
-
>[];
|
|
46
|
+
type ColumnDefinitions<T> = ColumnDefinition<T>[];
|
|
64
47
|
|
|
65
48
|
/**
|
|
66
49
|
* A single sort entry representing a column's current sort state.
|
|
@@ -81,10 +64,32 @@ type SortChangeDetail = {
|
|
|
81
64
|
direction: "asc" | "desc" | "none";
|
|
82
65
|
};
|
|
83
66
|
|
|
67
|
+
type DataTableLoadingConfig = {
|
|
68
|
+
isLoading?: boolean;
|
|
69
|
+
} & (
|
|
70
|
+
| {
|
|
71
|
+
variant: "content";
|
|
72
|
+
content: React.ReactNode;
|
|
73
|
+
}
|
|
74
|
+
| {
|
|
75
|
+
variant: "skeleton";
|
|
76
|
+
rows?: number;
|
|
77
|
+
label?: string;
|
|
78
|
+
}
|
|
79
|
+
| {
|
|
80
|
+
variant: "overlay";
|
|
81
|
+
label?: string;
|
|
82
|
+
}
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
type TableRowEntryId = string;
|
|
86
|
+
|
|
84
87
|
export type {
|
|
85
88
|
ColumnDefinition,
|
|
86
89
|
ColumnDefinitions,
|
|
90
|
+
DataTableLoadingConfig,
|
|
87
91
|
SortDirection,
|
|
88
92
|
SortEntry,
|
|
89
93
|
SortChangeDetail,
|
|
94
|
+
TableRowEntryId,
|
|
90
95
|
};
|
|
@@ -1,27 +1,39 @@
|
|
|
1
1
|
import { createStrictContext } from "../../../utils/helpers";
|
|
2
|
-
import type {
|
|
2
|
+
import type {
|
|
3
|
+
StickyStartState,
|
|
4
|
+
UseColumnOptionsResult,
|
|
5
|
+
} from "../hooks/useColumnOptions";
|
|
6
|
+
import type { UseTableItemsReturn } from "../hooks/useTableItems";
|
|
3
7
|
import type { UseTableSelectionReturn } from "../hooks/useTableSelection";
|
|
8
|
+
import type { UseTableSortResults } from "../hooks/useTableSort";
|
|
9
|
+
import type {
|
|
10
|
+
DataTableLoadingConfig,
|
|
11
|
+
TableRowEntryId,
|
|
12
|
+
} from "./DataTable.types";
|
|
4
13
|
|
|
5
14
|
type DataTableContextProps<T> = {
|
|
6
15
|
layout: "fixed" | "auto";
|
|
7
16
|
withKeyboardNav: boolean;
|
|
8
17
|
selectionState: UseTableSelectionReturn;
|
|
9
|
-
|
|
18
|
+
stickyStart: StickyStartState;
|
|
10
19
|
stickyHeader: boolean;
|
|
11
20
|
tableId: string;
|
|
12
|
-
|
|
21
|
+
loading: DataTableLoadingConfig | undefined;
|
|
13
22
|
onRowClick?: (
|
|
14
|
-
rowId:
|
|
23
|
+
rowId: TableRowEntryId,
|
|
15
24
|
event: React.MouseEvent<HTMLTableRowElement>,
|
|
16
25
|
) => void;
|
|
17
|
-
isLoading?: boolean;
|
|
18
|
-
showLoadingOverlay: boolean;
|
|
19
26
|
columns: UseColumnOptionsResult<T>["columns"];
|
|
20
27
|
/**
|
|
21
28
|
* Used to set exact colspan for detailsPanel, loadingState and emptyState.
|
|
22
29
|
* This is necessary to ensure that these components span the entire width of the table.
|
|
23
30
|
*/
|
|
24
|
-
|
|
31
|
+
totalColSpan: number;
|
|
32
|
+
/**
|
|
33
|
+
* The current items and related metadata.
|
|
34
|
+
*/
|
|
35
|
+
tableItems: UseTableItemsReturn<T>;
|
|
36
|
+
sortingState: UseTableSortResults;
|
|
25
37
|
};
|
|
26
38
|
|
|
27
39
|
const { Provider: DataTableContextProvider, useContext: useDataTableContext } =
|
|
@@ -37,8 +37,7 @@ import {
|
|
|
37
37
|
import { DataTableTr, type DataTableTrProps } from "../tr/DataTableTr";
|
|
38
38
|
import { DataTableContextProvider } from "./DataTableRoot.context";
|
|
39
39
|
|
|
40
|
-
interface DataTableProps
|
|
41
|
-
extends React.HTMLAttributes<HTMLTableElement>, SelectionProps {
|
|
40
|
+
interface DataTableProps extends React.HTMLAttributes<HTMLTableElement> {
|
|
42
41
|
children: React.ReactNode;
|
|
43
42
|
/**
|
|
44
43
|
* Controls vertical cell padding.
|
|
@@ -62,12 +61,6 @@ interface DataTableProps
|
|
|
62
61
|
* @default false
|
|
63
62
|
*/
|
|
64
63
|
withKeyboardNav?: boolean;
|
|
65
|
-
/**
|
|
66
|
-
* Custom callback to determine if navigation should be blocked.
|
|
67
|
-
* Called before default blocking logic.
|
|
68
|
-
* Requires `withKeyboardNav` to be `true`.
|
|
69
|
-
*/
|
|
70
|
-
shouldBlockNavigation?: (event: KeyboardEvent) => boolean;
|
|
71
64
|
/**
|
|
72
65
|
* Controls table layout.
|
|
73
66
|
*
|
|
@@ -83,6 +76,7 @@ interface DataTableProps
|
|
|
83
76
|
* @default "fixed"
|
|
84
77
|
*/
|
|
85
78
|
layout?: "fixed" | "auto";
|
|
79
|
+
selection?: SelectionProps;
|
|
86
80
|
}
|
|
87
81
|
|
|
88
82
|
interface DataTableRootComponent extends React.ForwardRefExoticComponent<
|
|
@@ -212,7 +206,6 @@ const DataTable = forwardRef<HTMLTableElement, DataTableProps>(
|
|
|
212
206
|
withKeyboardNav = false,
|
|
213
207
|
zebraStripes = false,
|
|
214
208
|
truncateContent = true,
|
|
215
|
-
shouldBlockNavigation,
|
|
216
209
|
layout = "fixed",
|
|
217
210
|
...rest
|
|
218
211
|
},
|
|
@@ -220,7 +213,6 @@ const DataTable = forwardRef<HTMLTableElement, DataTableProps>(
|
|
|
220
213
|
) => {
|
|
221
214
|
const { tabIndex, setTableRef } = useTableKeyboardNav({
|
|
222
215
|
enabled: withKeyboardNav,
|
|
223
|
-
shouldBlockNavigation,
|
|
224
216
|
});
|
|
225
217
|
|
|
226
218
|
const mergedRef = useMergeRefs(forwardedRef, setTableRef);
|
|
@@ -230,14 +222,30 @@ const DataTable = forwardRef<HTMLTableElement, DataTableProps>(
|
|
|
230
222
|
layout={layout}
|
|
231
223
|
withKeyboardNav={withKeyboardNav}
|
|
232
224
|
selectionState={noSelectionState}
|
|
233
|
-
|
|
225
|
+
stickyStart={{
|
|
226
|
+
expansion: false,
|
|
227
|
+
selection: false,
|
|
228
|
+
selectionOffset: 0,
|
|
229
|
+
firstColumnOffset: 0,
|
|
230
|
+
}}
|
|
234
231
|
stickyHeader={true}
|
|
235
232
|
tableId={useId()}
|
|
236
|
-
|
|
233
|
+
loading={undefined}
|
|
237
234
|
onRowClick={undefined}
|
|
238
|
-
showLoadingOverlay={false}
|
|
239
235
|
columns={[]}
|
|
240
|
-
|
|
236
|
+
totalColSpan={9999}
|
|
237
|
+
tableItems={{
|
|
238
|
+
childRowIdsById: new Map(),
|
|
239
|
+
visibleRowIds: [],
|
|
240
|
+
itemDetails: new Map(),
|
|
241
|
+
items: [],
|
|
242
|
+
isSubRowExpanded: () => false,
|
|
243
|
+
onExpandedRowIdsChange: () => null,
|
|
244
|
+
}}
|
|
245
|
+
sortingState={{
|
|
246
|
+
onSortClick: () => null,
|
|
247
|
+
sortState: [],
|
|
248
|
+
}}
|
|
241
249
|
>
|
|
242
250
|
<DataTableDetailsPanelProvider>
|
|
243
251
|
<div className="aksel-data-table__border-wrapper">
|