@navikt/ds-react 8.10.6 → 8.11.1
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/drag-and-drop/drag-handler/DragAndDropDragHandler.js +5 -1
- package/cjs/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js.map +1 -1
- package/cjs/data/drag-and-drop/root/DragAndDropRoot.d.ts +1 -1
- package/cjs/data/drag-and-drop/root/DragAndDropRoot.js +50 -20
- package/cjs/data/drag-and-drop/root/DragAndDropRoot.js.map +1 -1
- package/cjs/data/stories/Data.test-data.d.ts +2 -2
- package/cjs/data/stories/Data.test-data.js +37 -42
- package/cjs/data/stories/Data.test-data.js.map +1 -1
- package/cjs/data/table/base-cell/DataTableBaseCell.d.ts +4 -4
- package/cjs/data/table/base-cell/DataTableBaseCell.js +2 -2
- package/cjs/data/table/base-cell/DataTableBaseCell.js.map +1 -1
- package/cjs/data/table/column-header/DataTableColumnHeader.d.ts +3 -15
- package/cjs/data/table/column-header/DataTableColumnHeader.js +8 -5
- package/cjs/data/table/column-header/DataTableColumnHeader.js.map +1 -1
- package/cjs/data/table/column-header/useTableColumnResize.d.ts +2 -4
- package/cjs/data/table/column-header/useTableColumnResize.js +15 -11
- package/cjs/data/table/column-header/useTableColumnResize.js.map +1 -1
- package/cjs/data/table/helpers/collectTableRowEntries.d.ts +1 -1
- package/cjs/data/table/helpers/selection/getMultipleSelectProps.d.ts +6 -5
- package/cjs/data/table/helpers/selection/getMultipleSelectProps.js +6 -2
- package/cjs/data/table/helpers/selection/getMultipleSelectProps.js.map +1 -1
- package/cjs/data/table/helpers/selection/getSingleSelectProps.d.ts +3 -3
- package/cjs/data/table/helpers/selection/getSingleSelectProps.js +1 -1
- package/cjs/data/table/helpers/selection/getSingleSelectProps.js.map +1 -1
- package/cjs/data/table/helpers/selection/selection.types.d.ts +19 -27
- package/cjs/data/table/helpers/selection/selection.utils.d.ts +1 -1
- package/cjs/data/table/helpers/table-focus.js +1 -1
- package/cjs/data/table/helpers/table-focus.js.map +1 -1
- package/cjs/data/table/hooks/useColumnOptions.d.ts +8 -5
- package/cjs/data/table/hooks/useColumnOptions.js +25 -10
- package/cjs/data/table/hooks/useColumnOptions.js.map +1 -1
- package/cjs/data/table/hooks/useTableDetailsPanel.d.ts +8 -9
- package/cjs/data/table/hooks/useTableDetailsPanel.js.map +1 -1
- package/cjs/data/table/hooks/useTableItems.d.ts +10 -11
- package/cjs/data/table/hooks/useTableItems.js +11 -3
- package/cjs/data/table/hooks/useTableItems.js.map +1 -1
- package/cjs/data/table/hooks/useTableSelection.d.ts +2 -1
- package/cjs/data/table/hooks/useTableSelection.js +46 -29
- package/cjs/data/table/hooks/useTableSelection.js.map +1 -1
- package/cjs/data/table/hooks/useTableSort.d.ts +13 -7
- package/cjs/data/table/hooks/useTableSort.js +8 -9
- package/cjs/data/table/hooks/useTableSort.js.map +1 -1
- package/cjs/data/table/index.d.ts +1 -1
- package/cjs/data/table/index.js +3 -23
- package/cjs/data/table/index.js.map +1 -1
- package/cjs/data/table/root/{DataTable.types.d.ts → DataGridTable.types.d.ts} +16 -26
- package/cjs/data/table/root/DataGridTable.types.js +3 -0
- package/cjs/data/table/root/DataGridTable.types.js.map +1 -0
- package/cjs/data/table/root/DataGridTableRoot.d.ts +104 -0
- package/cjs/data/table/root/{DataTableRoot.js → DataGridTableRoot.js} +59 -38
- package/cjs/data/table/root/DataGridTableRoot.js.map +1 -0
- package/cjs/data/table/root/DataTableRoot.context.d.ts +6 -2
- package/cjs/data/table/root/DataTableRoot.context.js.map +1 -1
- package/cjs/data/table/tbody/DataTableTbody.js +3 -3
- package/cjs/data/table/tbody/DataTableTbody.js.map +1 -1
- package/cjs/data/table/tr/DataTableTr.d.ts +3 -3
- package/cjs/data/table/tr/DataTableTr.js +45 -23
- package/cjs/data/table/tr/DataTableTr.js.map +1 -1
- package/cjs/data/token-filter/TokenFilter.d.ts +0 -6
- package/cjs/data/token-filter/TokenFilter.js +1 -1
- package/cjs/data-grid/index.d.ts +2 -0
- package/cjs/data-grid/index.js +9 -0
- package/cjs/data-grid/index.js.map +1 -0
- package/cjs/data-grid/root/DataGrid.types.d.ts +48 -0
- package/cjs/{data/table/root/DataTable.types.js → data-grid/root/DataGrid.types.js} +1 -1
- package/cjs/data-grid/root/DataGrid.types.js.map +1 -0
- package/cjs/data-grid/root/DataGridRoot.context.d.ts +16 -0
- package/cjs/{data/data-grid → data-grid}/root/DataGridRoot.context.js +1 -1
- package/cjs/data-grid/root/DataGridRoot.context.js.map +1 -0
- package/cjs/data-grid/root/DataGridRoot.d.ts +89 -0
- package/cjs/{data/data-grid → data-grid}/root/DataGridRoot.js +35 -8
- package/cjs/data-grid/root/DataGridRoot.js.map +1 -0
- package/cjs/preview.d.ts +1 -0
- package/cjs/{data/data-grid/index.js → preview.js} +3 -3
- package/cjs/preview.js.map +1 -0
- package/cjs/primitives/bleed/Bleed.d.ts +0 -2
- package/cjs/primitives/bleed/Bleed.js.map +1 -1
- package/cjs/table/ColumnHeader.js.map +1 -1
- package/cjs/tabs/Tabs.context.d.ts +1 -1
- package/cjs/tabs/useTabs.d.ts +1 -1
- package/cjs/toggle-group/ToggleGroup.context.d.ts +1 -1
- package/cjs/toggle-group/useToggleGroup.d.ts +1 -1
- package/cjs/utils/components/dismissablelayer/DismissableLayer.js +1 -0
- package/cjs/utils/components/dismissablelayer/DismissableLayer.js.map +1 -1
- package/cjs/utils/components/dismissablelayer/util/useFocusOutside.d.ts +1 -0
- package/cjs/utils/components/dismissablelayer/util/useFocusOutside.js +11 -1
- package/cjs/utils/components/dismissablelayer/util/useFocusOutside.js.map +1 -1
- package/cjs/utils/hooks/useControllableState.d.ts +1 -1
- package/cjs/utils/hooks/useControllableState.js.map +1 -1
- package/esm/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js +5 -1
- package/esm/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js.map +1 -1
- package/esm/data/drag-and-drop/root/DragAndDropRoot.d.ts +1 -1
- package/esm/data/drag-and-drop/root/DragAndDropRoot.js +51 -21
- package/esm/data/drag-and-drop/root/DragAndDropRoot.js.map +1 -1
- package/esm/data/stories/Data.test-data.d.ts +2 -2
- package/esm/data/stories/Data.test-data.js +37 -42
- package/esm/data/stories/Data.test-data.js.map +1 -1
- package/esm/data/table/base-cell/DataTableBaseCell.d.ts +4 -4
- package/esm/data/table/base-cell/DataTableBaseCell.js +2 -2
- package/esm/data/table/base-cell/DataTableBaseCell.js.map +1 -1
- package/esm/data/table/column-header/DataTableColumnHeader.d.ts +3 -15
- package/esm/data/table/column-header/DataTableColumnHeader.js +8 -5
- package/esm/data/table/column-header/DataTableColumnHeader.js.map +1 -1
- package/esm/data/table/column-header/useTableColumnResize.d.ts +2 -4
- package/esm/data/table/column-header/useTableColumnResize.js +15 -11
- package/esm/data/table/column-header/useTableColumnResize.js.map +1 -1
- package/esm/data/table/helpers/collectTableRowEntries.d.ts +1 -1
- package/esm/data/table/helpers/selection/getMultipleSelectProps.d.ts +6 -5
- package/esm/data/table/helpers/selection/getMultipleSelectProps.js +6 -2
- package/esm/data/table/helpers/selection/getMultipleSelectProps.js.map +1 -1
- package/esm/data/table/helpers/selection/getSingleSelectProps.d.ts +3 -3
- package/esm/data/table/helpers/selection/getSingleSelectProps.js +1 -1
- package/esm/data/table/helpers/selection/getSingleSelectProps.js.map +1 -1
- package/esm/data/table/helpers/selection/selection.types.d.ts +19 -27
- package/esm/data/table/helpers/selection/selection.utils.d.ts +1 -1
- package/esm/data/table/helpers/table-focus.js +1 -1
- package/esm/data/table/helpers/table-focus.js.map +1 -1
- package/esm/data/table/hooks/useColumnOptions.d.ts +8 -5
- package/esm/data/table/hooks/useColumnOptions.js +25 -10
- package/esm/data/table/hooks/useColumnOptions.js.map +1 -1
- package/esm/data/table/hooks/useTableDetailsPanel.d.ts +8 -9
- package/esm/data/table/hooks/useTableDetailsPanel.js.map +1 -1
- package/esm/data/table/hooks/useTableItems.d.ts +10 -11
- package/esm/data/table/hooks/useTableItems.js +11 -3
- package/esm/data/table/hooks/useTableItems.js.map +1 -1
- package/esm/data/table/hooks/useTableSelection.d.ts +2 -1
- package/esm/data/table/hooks/useTableSelection.js +46 -29
- package/esm/data/table/hooks/useTableSelection.js.map +1 -1
- package/esm/data/table/hooks/useTableSort.d.ts +13 -7
- package/esm/data/table/hooks/useTableSort.js +9 -10
- package/esm/data/table/hooks/useTableSort.js.map +1 -1
- package/esm/data/table/index.d.ts +1 -1
- package/esm/data/table/index.js +1 -21
- package/esm/data/table/index.js.map +1 -1
- package/esm/data/table/root/{DataTable.types.d.ts → DataGridTable.types.d.ts} +16 -26
- package/esm/data/table/root/DataGridTable.types.js +2 -0
- package/esm/data/table/root/DataGridTable.types.js.map +1 -0
- package/esm/data/table/root/DataGridTableRoot.d.ts +104 -0
- package/esm/data/table/root/{DataTableRoot.js → DataGridTableRoot.js} +61 -39
- package/esm/data/table/root/DataGridTableRoot.js.map +1 -0
- package/esm/data/table/root/DataTableRoot.context.d.ts +6 -2
- package/esm/data/table/root/DataTableRoot.context.js.map +1 -1
- package/esm/data/table/tbody/DataTableTbody.js +3 -3
- package/esm/data/table/tbody/DataTableTbody.js.map +1 -1
- package/esm/data/table/tr/DataTableTr.d.ts +3 -3
- package/esm/data/table/tr/DataTableTr.js +45 -23
- package/esm/data/table/tr/DataTableTr.js.map +1 -1
- package/esm/data/token-filter/TokenFilter.d.ts +0 -6
- package/esm/data/token-filter/TokenFilter.js +1 -1
- package/esm/data-grid/index.d.ts +2 -0
- package/esm/data-grid/index.js +4 -0
- package/esm/data-grid/index.js.map +1 -0
- package/esm/data-grid/root/DataGrid.types.d.ts +48 -0
- package/esm/data-grid/root/DataGrid.types.js +2 -0
- package/esm/data-grid/root/DataGrid.types.js.map +1 -0
- package/esm/data-grid/root/DataGridRoot.context.d.ts +16 -0
- package/esm/{data/data-grid → data-grid}/root/DataGridRoot.context.js +1 -1
- package/esm/data-grid/root/DataGridRoot.context.js.map +1 -0
- package/esm/data-grid/root/DataGridRoot.d.ts +89 -0
- package/esm/data-grid/root/DataGridRoot.js +59 -0
- package/esm/data-grid/root/DataGridRoot.js.map +1 -0
- package/esm/preview.d.ts +1 -0
- package/esm/preview.js +3 -0
- package/esm/preview.js.map +1 -0
- package/esm/primitives/bleed/Bleed.d.ts +0 -2
- package/esm/primitives/bleed/Bleed.js.map +1 -1
- package/esm/table/ColumnHeader.js.map +1 -1
- package/esm/tabs/Tabs.context.d.ts +1 -1
- package/esm/tabs/useTabs.d.ts +1 -1
- package/esm/toggle-group/ToggleGroup.context.d.ts +1 -1
- package/esm/toggle-group/useToggleGroup.d.ts +1 -1
- package/esm/utils/components/dismissablelayer/DismissableLayer.js +1 -0
- package/esm/utils/components/dismissablelayer/DismissableLayer.js.map +1 -1
- package/esm/utils/components/dismissablelayer/util/useFocusOutside.d.ts +1 -0
- package/esm/utils/components/dismissablelayer/util/useFocusOutside.js +12 -2
- package/esm/utils/components/dismissablelayer/util/useFocusOutside.js.map +1 -1
- package/esm/utils/hooks/useControllableState.d.ts +1 -1
- package/esm/utils/hooks/useControllableState.js.map +1 -1
- package/package.json +25 -5
- package/src/data/drag-and-drop/drag-handler/DragAndDropDragHandler.tsx +5 -1
- package/src/data/drag-and-drop/root/DragAndDropRoot.tsx +55 -25
- package/src/data/stories/Data.test-data.tsx +53 -51
- package/src/data/table/base-cell/DataTableBaseCell.tsx +6 -6
- package/src/data/table/column-header/DataTableColumnHeader.tsx +17 -20
- package/src/data/table/column-header/useTableColumnResize.ts +19 -16
- package/src/data/table/helpers/collectTableRowEntries.ts +1 -1
- package/src/data/table/helpers/selection/getMultipleSelectProps.ts +11 -5
- package/src/data/table/helpers/selection/getSingleSelectProps.ts +4 -4
- package/src/data/table/helpers/selection/selection.types.ts +18 -29
- package/src/data/table/helpers/selection/selection.utils.test.ts +1 -1
- package/src/data/table/helpers/selection/selection.utils.ts +1 -1
- package/src/data/table/helpers/table-focus.ts +1 -1
- package/src/data/table/hooks/__tests__/useTableItems.test.ts +1 -1
- package/src/data/table/hooks/useColumnOptions.ts +50 -15
- package/src/data/table/hooks/useTableDetailsPanel.tsx +14 -18
- package/src/data/table/hooks/useTableItems.ts +37 -23
- package/src/data/table/hooks/useTableSelection.ts +62 -45
- package/src/data/table/hooks/useTableSort.ts +29 -17
- package/src/data/table/index.tsx +4 -21
- package/src/data/table/root/{DataTable.types.ts → DataGridTable.types.ts} +17 -30
- package/src/data/table/root/{DataTableRoot.tsx → DataGridTableRoot.tsx} +198 -144
- package/src/data/table/root/DataTableRoot.context.ts +10 -8
- package/src/data/table/sub-row-toggle/DataTableSubRowToggle.tsx +1 -1
- package/src/data/table/tbody/DataTableTbody.tsx +3 -3
- package/src/data/table/tr/DataTableTr.tsx +51 -20
- package/src/data/token-filter/TokenFilter.tsx +1 -1
- package/src/data-grid/index.ts +3 -0
- package/src/data-grid/root/DataGrid.types.ts +46 -0
- package/src/data-grid/root/DataGridRoot.context.ts +21 -0
- package/src/data-grid/root/DataGridRoot.tsx +154 -0
- package/src/preview.ts +2 -0
- package/src/primitives/bleed/Bleed.tsx +0 -2
- package/src/table/ColumnHeader.tsx +1 -0
- package/src/utils/components/dismissablelayer/DismissableLayer.tsx +1 -0
- package/src/utils/components/dismissablelayer/util/useFocusOutside.ts +14 -2
- package/src/utils/hooks/useControllableState.ts +10 -8
- package/cjs/data/data-grid/index.d.ts +0 -2
- package/cjs/data/data-grid/index.js.map +0 -1
- package/cjs/data/data-grid/root/DataGridRoot.context.d.ts +0 -11
- package/cjs/data/data-grid/root/DataGridRoot.context.js.map +0 -1
- package/cjs/data/data-grid/root/DataGridRoot.d.ts +0 -38
- package/cjs/data/data-grid/root/DataGridRoot.js.map +0 -1
- package/cjs/data/table/root/DataTable.types.js.map +0 -1
- package/cjs/data/table/root/DataTableRoot.d.ts +0 -118
- package/cjs/data/table/root/DataTableRoot.js.map +0 -1
- package/cjs/data/table/root/DataTableRoot.legacy.d.ts +0 -172
- package/cjs/data/table/root/DataTableRoot.legacy.js +0 -118
- package/cjs/data/table/root/DataTableRoot.legacy.js.map +0 -1
- package/esm/data/data-grid/index.d.ts +0 -2
- package/esm/data/data-grid/index.js +0 -3
- package/esm/data/data-grid/index.js.map +0 -1
- package/esm/data/data-grid/root/DataGridRoot.context.d.ts +0 -11
- package/esm/data/data-grid/root/DataGridRoot.context.js.map +0 -1
- package/esm/data/data-grid/root/DataGridRoot.d.ts +0 -38
- package/esm/data/data-grid/root/DataGridRoot.js +0 -32
- package/esm/data/data-grid/root/DataGridRoot.js.map +0 -1
- package/esm/data/table/root/DataTable.types.js +0 -2
- package/esm/data/table/root/DataTable.types.js.map +0 -1
- package/esm/data/table/root/DataTableRoot.d.ts +0 -118
- package/esm/data/table/root/DataTableRoot.js.map +0 -1
- package/esm/data/table/root/DataTableRoot.legacy.d.ts +0 -172
- package/esm/data/table/root/DataTableRoot.legacy.js +0 -73
- package/esm/data/table/root/DataTableRoot.legacy.js.map +0 -1
- package/src/data/data-grid/index.ts +0 -3
- package/src/data/data-grid/root/DataGridRoot.context.ts +0 -16
- package/src/data/data-grid/root/DataGridRoot.tsx +0 -71
- package/src/data/table/Readme.md +0 -11
- package/src/data/table/agent-component-review.md +0 -175
- package/src/data/table/root/DataTableRoot.legacy.tsx +0 -305
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import React, {
|
|
2
2
|
forwardRef,
|
|
3
|
+
memo,
|
|
3
4
|
useCallback,
|
|
4
5
|
useEffect,
|
|
5
6
|
useRef,
|
|
6
7
|
useState,
|
|
7
8
|
} from "react";
|
|
9
|
+
import { useDataGridContext } from "../../../data-grid/root/DataGridRoot.context";
|
|
8
10
|
import { Skeleton } from "../../../skeleton";
|
|
9
11
|
import { useId } from "../../../utils-external";
|
|
10
12
|
import { Slot } from "../../../utils/components/slot/Slot";
|
|
11
13
|
import { cl } from "../../../utils/helpers";
|
|
12
14
|
import { useMergeRefs } from "../../../utils/hooks";
|
|
13
|
-
import { useDataGridContext } from "../../data-grid/root/DataGridRoot.context";
|
|
14
15
|
import { DataTableBaseCell } from "../base-cell/DataTableBaseCell";
|
|
15
16
|
import { DataTableColumnHeader } from "../column-header/DataTableColumnHeader";
|
|
16
17
|
import { DataTableDetailsPanelRow } from "../details-panel-row/DataTableDetailsPanelRow";
|
|
17
18
|
import { DataTableEmptyState } from "../empty-state/DataTableEmptyState";
|
|
19
|
+
import type { ItemDetail } from "../helpers/collectTableRowEntries";
|
|
18
20
|
import { useColumnOptions } from "../hooks/useColumnOptions";
|
|
19
21
|
import {
|
|
20
22
|
DataTableDetailsPanelProvider,
|
|
@@ -22,26 +24,20 @@ import {
|
|
|
22
24
|
} from "../hooks/useTableDetailsPanel";
|
|
23
25
|
import { type SubRowsProps, useTableItems } from "../hooks/useTableItems";
|
|
24
26
|
import { useTableKeyboardNav } from "../hooks/useTableKeyboardNav";
|
|
25
|
-
import {
|
|
26
|
-
type SelectionProps,
|
|
27
|
-
useTableSelection,
|
|
28
|
-
} from "../hooks/useTableSelection";
|
|
27
|
+
import { useTableSelection } from "../hooks/useTableSelection";
|
|
29
28
|
import { type TableSortOptions, useTableSort } from "../hooks/useTableSort";
|
|
30
29
|
import { DataTableLoadingState } from "../loading-state/DataTableLoadingState";
|
|
31
30
|
import { DataTableSubRowToggle } from "../sub-row-toggle/DataTableSubRowToggle";
|
|
32
31
|
import { DataTableTbody } from "../tbody/DataTableTbody";
|
|
33
32
|
import { DataTableThead } from "../thead/DataTableThead";
|
|
34
33
|
import { DataTableTr } from "../tr/DataTableTr";
|
|
35
|
-
import type {
|
|
36
|
-
DataTableLoadingConfig,
|
|
37
|
-
TableRowEntryId,
|
|
38
|
-
} from "./DataTable.types";
|
|
34
|
+
import type { DataTableLoadingConfig } from "./DataGridTable.types";
|
|
39
35
|
import {
|
|
40
36
|
DataTableContextProvider,
|
|
41
37
|
useDataTableContext,
|
|
42
38
|
} from "./DataTableRoot.context";
|
|
43
39
|
|
|
44
|
-
|
|
40
|
+
/*
|
|
45
41
|
* TODO: For consideration:
|
|
46
42
|
* - Use namespacing for types. There will be a lot of standalone types connected to this component,
|
|
47
43
|
* it could make sense to access them under DataTable.X instead of separate imports.
|
|
@@ -50,35 +46,12 @@ import {
|
|
|
50
46
|
* This would make props more focused and discoverable since its not mixed with htmltable-props.
|
|
51
47
|
*/
|
|
52
48
|
|
|
53
|
-
|
|
49
|
+
/*
|
|
54
50
|
* TODO:
|
|
55
51
|
* - Test `onColumnDefinitionChange` callback that is called when resize, sort, order etc changes
|
|
56
52
|
*/
|
|
57
|
-
interface
|
|
53
|
+
interface DataGridTableProps<T> extends React.HTMLAttributes<HTMLTableElement> {
|
|
58
54
|
children?: never;
|
|
59
|
-
/**
|
|
60
|
-
* Controls vertical cell padding.
|
|
61
|
-
* @default "normal"
|
|
62
|
-
*/
|
|
63
|
-
rowDensity?: "condensed" | "normal" | "spacious";
|
|
64
|
-
/**
|
|
65
|
-
* Zebra striped table
|
|
66
|
-
* @default false
|
|
67
|
-
*/
|
|
68
|
-
zebraStripes?: boolean;
|
|
69
|
-
/**
|
|
70
|
-
* Truncate content in cells and show ellipsis for overflowed text.
|
|
71
|
-
*
|
|
72
|
-
* **NB:** When using this together with `layout="auto"`,
|
|
73
|
-
* you have to manually set a `maxWidth` on columns that should be truncated.
|
|
74
|
-
* @default false if layout="auto", else true
|
|
75
|
-
*/
|
|
76
|
-
truncateContent?: boolean;
|
|
77
|
-
/**
|
|
78
|
-
* Enables keyboard navigation for table rows and cells.
|
|
79
|
-
* @default true
|
|
80
|
-
*/
|
|
81
|
-
withKeyboardNav?: boolean;
|
|
82
55
|
/**
|
|
83
56
|
* Controls table layout.
|
|
84
57
|
*
|
|
@@ -95,29 +68,45 @@ interface DataTableProps<T> extends React.HTMLAttributes<HTMLTableElement> {
|
|
|
95
68
|
*/
|
|
96
69
|
layout?: "fixed" | "auto";
|
|
97
70
|
/**
|
|
98
|
-
*
|
|
71
|
+
* Whether the header should be sticky.
|
|
72
|
+
* For this to work, you have to put the component in a flex container with a height restriction.
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* <VStack height="100vh">
|
|
76
|
+
* <div>Content before DataGrid</div>
|
|
77
|
+
* <DataGrid>
|
|
78
|
+
* <DataGrid.Table />
|
|
79
|
+
* </DataGrid>
|
|
80
|
+
* <div>Content after DataGrid</div>
|
|
81
|
+
* </VStack>
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* <div style={{ display: "flex", maxHeight: "500px" }}>
|
|
85
|
+
* <DataGrid>
|
|
86
|
+
* <DataGrid.Table />
|
|
87
|
+
* </DataGrid>
|
|
88
|
+
* </div>
|
|
99
89
|
*
|
|
100
|
-
* You can specify 1 sticky column on the left and 1 on the right.
|
|
101
|
-
*/
|
|
102
|
-
stickyColumns?: {
|
|
103
|
-
start?: "1";
|
|
104
|
-
end?: "1";
|
|
105
|
-
};
|
|
106
|
-
/**
|
|
107
90
|
* @default true
|
|
108
91
|
*/
|
|
109
92
|
stickyHeader?: boolean;
|
|
110
93
|
/**
|
|
111
|
-
* Callback invoked when a
|
|
112
|
-
*
|
|
94
|
+
* Callback invoked when a row in the table body is clicked.
|
|
95
|
+
*
|
|
96
|
+
* Call `event.preventDefault()` inside the callback to prevent the default row click behavior, such as selection.
|
|
113
97
|
*/
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
98
|
+
onRowAction?: ({
|
|
99
|
+
row,
|
|
100
|
+
id,
|
|
101
|
+
event,
|
|
102
|
+
}: {
|
|
103
|
+
row: T;
|
|
104
|
+
id: string;
|
|
105
|
+
event: React.MouseEvent<HTMLTableRowElement>;
|
|
106
|
+
}) => void;
|
|
118
107
|
/**
|
|
119
108
|
* Content to render when `data` is empty.
|
|
120
|
-
* Rendered inside a
|
|
109
|
+
* Rendered inside a row spanning all columns.
|
|
121
110
|
*/
|
|
122
111
|
emptyContent?: React.ReactNode;
|
|
123
112
|
/**
|
|
@@ -127,17 +116,10 @@ interface DataTableProps<T> extends React.HTMLAttributes<HTMLTableElement> {
|
|
|
127
116
|
* - `"content"` — renders custom content inside a full-width row.
|
|
128
117
|
* - `"skeleton"` — renders skeleton placeholder rows.
|
|
129
118
|
* - `"overlay"` — keeps existing data visible with a loading overlay.
|
|
119
|
+
*
|
|
120
|
+
* @default { variant: "skeleton", rows: 5 }
|
|
130
121
|
*/
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* Adjusts font-size
|
|
134
|
-
* @default "medium"
|
|
135
|
-
*/
|
|
136
|
-
textSize?: "small" | "medium";
|
|
137
|
-
/**
|
|
138
|
-
* Object with props related to row selection.
|
|
139
|
-
*/
|
|
140
|
-
selection?: SelectionProps<T>;
|
|
122
|
+
loadingContent?: DataTableLoadingConfig;
|
|
141
123
|
/**
|
|
142
124
|
* Object with props related to nested rows (sub-rows).
|
|
143
125
|
*/
|
|
@@ -151,33 +133,46 @@ interface DataTableProps<T> extends React.HTMLAttributes<HTMLTableElement> {
|
|
|
151
133
|
* Object with props related to sorting.
|
|
152
134
|
*/
|
|
153
135
|
sorting?: TableSortOptions;
|
|
136
|
+
/**
|
|
137
|
+
* Determines if selection is triggered by clicking the row or the selection control (checkbox/radio).
|
|
138
|
+
* @default "row"
|
|
139
|
+
*/
|
|
140
|
+
selectionTrigger?: "row" | "control";
|
|
154
141
|
}
|
|
155
142
|
|
|
156
|
-
const
|
|
143
|
+
const DataGridTableInternal = forwardRef<
|
|
144
|
+
HTMLTableElement,
|
|
145
|
+
DataGridTableProps<any>
|
|
146
|
+
>(
|
|
157
147
|
(
|
|
158
148
|
{
|
|
159
149
|
className,
|
|
160
150
|
id,
|
|
161
|
-
rowDensity = "normal",
|
|
162
|
-
textSize = "medium",
|
|
163
|
-
withKeyboardNav = true,
|
|
164
|
-
zebraStripes = false,
|
|
165
|
-
truncateContent: truncateContentProp,
|
|
166
151
|
layout = "fixed",
|
|
167
|
-
stickyColumns,
|
|
168
152
|
stickyHeader = true,
|
|
169
|
-
|
|
153
|
+
onRowAction,
|
|
170
154
|
emptyContent,
|
|
171
|
-
|
|
172
|
-
|
|
155
|
+
loadingContent = {
|
|
156
|
+
variant: "skeleton",
|
|
157
|
+
rows: 5,
|
|
158
|
+
label: "Laster innhold",
|
|
159
|
+
}, // TODO translate label
|
|
173
160
|
detailsPanel,
|
|
174
161
|
subRows,
|
|
175
162
|
sorting,
|
|
163
|
+
selectionTrigger = "row",
|
|
176
164
|
...rest
|
|
177
|
-
}:
|
|
165
|
+
}: DataGridTableProps<unknown>,
|
|
178
166
|
forwardedRef,
|
|
179
167
|
) => {
|
|
180
|
-
const {
|
|
168
|
+
const {
|
|
169
|
+
columnDefinitions,
|
|
170
|
+
data,
|
|
171
|
+
getRowId,
|
|
172
|
+
selection,
|
|
173
|
+
isLoading,
|
|
174
|
+
tableSettings,
|
|
175
|
+
} = useDataGridContext();
|
|
181
176
|
|
|
182
177
|
const sortingState = useTableSort(sorting);
|
|
183
178
|
|
|
@@ -189,53 +184,63 @@ const DataTableInternal = forwardRef<HTMLTableElement, DataTableProps<any>>(
|
|
|
189
184
|
|
|
190
185
|
const tableSelectionState = useTableSelection({
|
|
191
186
|
selection,
|
|
187
|
+
selectionTrigger,
|
|
192
188
|
tableItems,
|
|
193
189
|
});
|
|
194
190
|
|
|
195
191
|
const { columns, stickyStart, totalColSpan } = useColumnOptions(
|
|
196
192
|
columnDefinitions,
|
|
197
193
|
{
|
|
198
|
-
stickyColumns,
|
|
199
|
-
hasSelection: tableSelectionState.selection.
|
|
194
|
+
stickyColumns: tableSettings?.stickyColumns,
|
|
195
|
+
hasSelection: tableSelectionState.selection.mode !== "none",
|
|
200
196
|
hasDetailsPanel: !!detailsPanel?.getContent,
|
|
201
197
|
layout,
|
|
198
|
+
columnDisplay: tableSettings?.columnDisplay,
|
|
202
199
|
},
|
|
203
200
|
);
|
|
204
201
|
|
|
205
202
|
const tableId = useId(id);
|
|
206
203
|
|
|
207
|
-
const truncateContent =
|
|
204
|
+
const truncateContent = tableSettings?.truncateContent ?? layout !== "auto";
|
|
208
205
|
|
|
209
206
|
return (
|
|
210
207
|
<DataTableContextProvider
|
|
211
208
|
layout={layout}
|
|
212
|
-
withKeyboardNav={
|
|
209
|
+
withKeyboardNav={true}
|
|
213
210
|
selectionState={tableSelectionState}
|
|
214
211
|
stickyStart={stickyStart}
|
|
215
212
|
stickyHeader={stickyHeader}
|
|
216
213
|
tableId={tableId}
|
|
217
|
-
loading={
|
|
218
|
-
|
|
214
|
+
loading={loadingContent}
|
|
215
|
+
onRowAction={onRowAction}
|
|
219
216
|
columns={columns}
|
|
220
217
|
totalColSpan={totalColSpan}
|
|
221
218
|
tableItems={tableItems}
|
|
222
219
|
sortingState={sortingState}
|
|
223
220
|
>
|
|
224
|
-
<TableElementWrapper
|
|
221
|
+
<TableElementWrapper
|
|
222
|
+
enabled={true}
|
|
223
|
+
hasStickyColumns={
|
|
224
|
+
!!(
|
|
225
|
+
tableSettings?.stickyColumns?.start ||
|
|
226
|
+
tableSettings?.stickyColumns?.end
|
|
227
|
+
)
|
|
228
|
+
}
|
|
229
|
+
>
|
|
225
230
|
<table
|
|
226
231
|
{...rest}
|
|
227
232
|
ref={forwardedRef}
|
|
228
233
|
className={cl("aksel-data-table", className)}
|
|
229
|
-
data-zebra-stripes={zebraStripes}
|
|
234
|
+
data-zebra-stripes={tableSettings?.zebraStripes}
|
|
230
235
|
data-truncate-content={truncateContent}
|
|
231
|
-
data-density={rowDensity}
|
|
232
|
-
data-text-size={textSize}
|
|
236
|
+
data-density={tableSettings?.rowDensity}
|
|
237
|
+
data-text-size={tableSettings?.textSize}
|
|
233
238
|
data-layout={layout}
|
|
234
|
-
data-loading={
|
|
235
|
-
aria-busy={
|
|
239
|
+
data-loading={isLoading || undefined}
|
|
240
|
+
aria-busy={isLoading || undefined}
|
|
236
241
|
>
|
|
237
242
|
<DataTableDetailsPanelProvider detailsPanel={detailsPanel}>
|
|
238
|
-
<DataTableThead>
|
|
243
|
+
<DataTableThead data-sticky={stickyHeader || undefined}>
|
|
239
244
|
<DataTableTr>
|
|
240
245
|
{columns.map(
|
|
241
246
|
({ isSticky, isStickyLast, stickyLeftOffset, colDef }) => {
|
|
@@ -243,11 +248,11 @@ const DataTableInternal = forwardRef<HTMLTableElement, DataTableProps<any>>(
|
|
|
243
248
|
<DataTableColumnHeader
|
|
244
249
|
id={colDef.id}
|
|
245
250
|
width={colDef.width}
|
|
246
|
-
|
|
251
|
+
align={colDef.align ?? "left"}
|
|
247
252
|
key={colDef.id}
|
|
248
253
|
isSticky={isSticky}
|
|
249
|
-
sortable={colDef.
|
|
250
|
-
label={colDef.
|
|
254
|
+
sortable={colDef.isSortable}
|
|
255
|
+
label={colDef.header}
|
|
251
256
|
style={
|
|
252
257
|
stickyLeftOffset
|
|
253
258
|
? { left: stickyLeftOffset }
|
|
@@ -255,7 +260,7 @@ const DataTableInternal = forwardRef<HTMLTableElement, DataTableProps<any>>(
|
|
|
255
260
|
}
|
|
256
261
|
data-sticky-last={isStickyLast || undefined}
|
|
257
262
|
>
|
|
258
|
-
{colDef.
|
|
263
|
+
{colDef.headerCell ?? colDef.header}
|
|
259
264
|
</DataTableColumnHeader>
|
|
260
265
|
);
|
|
261
266
|
},
|
|
@@ -280,9 +285,11 @@ const DataTableInternal = forwardRef<HTMLTableElement, DataTableProps<any>>(
|
|
|
280
285
|
function TableElementWrapper({
|
|
281
286
|
children,
|
|
282
287
|
enabled,
|
|
288
|
+
hasStickyColumns,
|
|
283
289
|
}: {
|
|
284
290
|
children: React.ReactNode;
|
|
285
291
|
enabled: boolean;
|
|
292
|
+
hasStickyColumns: boolean;
|
|
286
293
|
}) {
|
|
287
294
|
const [applyStickyStyles, setApplyStickyStyles] = useState<boolean>(false);
|
|
288
295
|
|
|
@@ -319,6 +326,10 @@ function TableElementWrapper({
|
|
|
319
326
|
|
|
320
327
|
useEffect(
|
|
321
328
|
function observeAndUpdateStickyStyles() {
|
|
329
|
+
if (!hasStickyColumns) {
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
|
|
322
333
|
const tableWrapperElement = tableWrapperRef.current;
|
|
323
334
|
|
|
324
335
|
if (!tableWrapperElement) {
|
|
@@ -349,7 +360,7 @@ function TableElementWrapper({
|
|
|
349
360
|
}
|
|
350
361
|
};
|
|
351
362
|
},
|
|
352
|
-
[scheduleStickyStylesUpdate],
|
|
363
|
+
[scheduleStickyStylesUpdate, hasStickyColumns],
|
|
353
364
|
);
|
|
354
365
|
|
|
355
366
|
return (
|
|
@@ -374,8 +385,9 @@ interface DataTableTBodyContentProps {
|
|
|
374
385
|
|
|
375
386
|
function DataTableTBodyContent({ emptyContent }: DataTableTBodyContentProps) {
|
|
376
387
|
const { columns, loading, totalColSpan, tableItems } = useDataTableContext();
|
|
388
|
+
const { isLoading } = useDataGridContext();
|
|
377
389
|
|
|
378
|
-
if (
|
|
390
|
+
if (isLoading && loading?.variant === "content") {
|
|
379
391
|
return (
|
|
380
392
|
<DataTableLoadingState colSpan={totalColSpan}>
|
|
381
393
|
{loading.content}
|
|
@@ -383,9 +395,9 @@ function DataTableTBodyContent({ emptyContent }: DataTableTBodyContentProps) {
|
|
|
383
395
|
);
|
|
384
396
|
}
|
|
385
397
|
|
|
386
|
-
if (
|
|
398
|
+
if (isLoading && loading?.variant === "skeleton") {
|
|
387
399
|
const rows = loading.rows ?? 5;
|
|
388
|
-
const label = loading.label ?? "Laster innhold";
|
|
400
|
+
const label = loading.label ?? "Laster innhold"; // TODO translate
|
|
389
401
|
return (
|
|
390
402
|
<>
|
|
391
403
|
<tr>
|
|
@@ -401,7 +413,7 @@ function DataTableTBodyContent({ emptyContent }: DataTableTBodyContentProps) {
|
|
|
401
413
|
colDefIndex,
|
|
402
414
|
) => (
|
|
403
415
|
<DataTableBaseCell
|
|
404
|
-
|
|
416
|
+
align={colDef.align ?? "left"}
|
|
405
417
|
key={colDef.id || colDefIndex}
|
|
406
418
|
as={colDef.isRowHeader ? "th" : "td"}
|
|
407
419
|
isSticky={isSticky}
|
|
@@ -428,12 +440,11 @@ function DataTableTBodyContent({ emptyContent }: DataTableTBodyContentProps) {
|
|
|
428
440
|
);
|
|
429
441
|
}
|
|
430
442
|
|
|
431
|
-
const renderLoadingAnnouncement =
|
|
432
|
-
loading?.isLoading && loading?.variant === "overlay";
|
|
443
|
+
const renderLoadingAnnouncement = isLoading && loading?.variant === "overlay";
|
|
433
444
|
|
|
434
445
|
const overlayLabel =
|
|
435
446
|
loading?.variant === "overlay"
|
|
436
|
-
? (loading.label ?? "Laster innhold")
|
|
447
|
+
? (loading.label ?? "Laster innhold") // TODO translate
|
|
437
448
|
: "Laster innhold";
|
|
438
449
|
|
|
439
450
|
return (
|
|
@@ -455,59 +466,102 @@ function DataTableTBodyContent({ emptyContent }: DataTableTBodyContentProps) {
|
|
|
455
466
|
return null;
|
|
456
467
|
}
|
|
457
468
|
|
|
458
|
-
const hasSubRows = details.children.length > 0;
|
|
459
|
-
|
|
460
469
|
return (
|
|
461
|
-
<
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
) => {
|
|
468
|
-
const renderNestedToggle = colDefIndex === 0 && hasSubRows;
|
|
469
|
-
const renderNestedIndent =
|
|
470
|
-
colDefIndex === 0 && (details.level > 0 || hasSubRows);
|
|
471
|
-
|
|
472
|
-
const style: React.CSSProperties = {
|
|
473
|
-
"--__axc-data-table-nested-depth": details.level,
|
|
474
|
-
...(stickyLeftOffset ? { left: stickyLeftOffset } : {}),
|
|
475
|
-
};
|
|
476
|
-
|
|
477
|
-
return (
|
|
478
|
-
<DataTableBaseCell
|
|
479
|
-
textAlign={colDef.align ?? "left"}
|
|
480
|
-
key={colDef.id || colDefIndex}
|
|
481
|
-
as={colDef.isRowHeader ? "th" : "td"}
|
|
482
|
-
isSticky={isSticky}
|
|
483
|
-
data-nested={renderNestedIndent || undefined}
|
|
484
|
-
data-sticky-last={isStickyLast || undefined}
|
|
485
|
-
style={style}
|
|
486
|
-
beforeContent={
|
|
487
|
-
renderNestedToggle ? (
|
|
488
|
-
<DataTableSubRowToggle details={details} />
|
|
489
|
-
) : undefined
|
|
490
|
-
}
|
|
491
|
-
>
|
|
492
|
-
{colDef.cell(rowData)}
|
|
493
|
-
</DataTableBaseCell>
|
|
494
|
-
);
|
|
495
|
-
},
|
|
496
|
-
)}
|
|
497
|
-
</DataTableTr>
|
|
498
|
-
<DataTableDetailsPanelRow rowId={details.id} rowData={rowData} />
|
|
499
|
-
</React.Fragment>
|
|
470
|
+
<DataTableDataRow
|
|
471
|
+
key={details.id}
|
|
472
|
+
rowData={rowData}
|
|
473
|
+
details={details}
|
|
474
|
+
columns={columns}
|
|
475
|
+
/>
|
|
500
476
|
);
|
|
501
477
|
})}
|
|
502
478
|
</>
|
|
503
479
|
);
|
|
504
480
|
}
|
|
505
481
|
|
|
506
|
-
|
|
507
|
-
|
|
482
|
+
interface DataTableDataRowProps {
|
|
483
|
+
rowData: any;
|
|
484
|
+
details: ItemDetail<any>;
|
|
485
|
+
columns: ReturnType<typeof useColumnOptions>["columns"];
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
const DataTableDataRow = memo(
|
|
489
|
+
function DataTableDataRow({
|
|
490
|
+
rowData,
|
|
491
|
+
details,
|
|
492
|
+
columns,
|
|
493
|
+
}: DataTableDataRowProps) {
|
|
494
|
+
const hasSubRows = details.children.length > 0;
|
|
495
|
+
|
|
496
|
+
return (
|
|
497
|
+
<>
|
|
498
|
+
<DataTableTr rowId={details.id}>
|
|
499
|
+
{columns.map(
|
|
500
|
+
(
|
|
501
|
+
{ isSticky, isStickyLast, stickyLeftOffset, colDef },
|
|
502
|
+
colDefIndex,
|
|
503
|
+
) => {
|
|
504
|
+
const renderNestedToggle = colDefIndex === 0 && hasSubRows;
|
|
505
|
+
const renderNestedIndent =
|
|
506
|
+
colDefIndex === 0 && (details.level > 0 || hasSubRows);
|
|
507
|
+
|
|
508
|
+
const style: React.CSSProperties = {
|
|
509
|
+
"--__axc-data-table-nested-depth": details.level,
|
|
510
|
+
...(stickyLeftOffset ? { left: stickyLeftOffset } : {}),
|
|
511
|
+
};
|
|
512
|
+
|
|
513
|
+
return (
|
|
514
|
+
<DataTableBaseCell
|
|
515
|
+
align={colDef.align ?? "left"}
|
|
516
|
+
key={colDef.id || colDefIndex}
|
|
517
|
+
as={colDef.isRowHeader ? "th" : "td"}
|
|
518
|
+
isSticky={isSticky}
|
|
519
|
+
data-nested={renderNestedIndent || undefined}
|
|
520
|
+
data-sticky-last={isStickyLast || undefined}
|
|
521
|
+
style={style}
|
|
522
|
+
beforeContent={
|
|
523
|
+
renderNestedToggle ? (
|
|
524
|
+
<DataTableSubRowToggle details={details} />
|
|
525
|
+
) : undefined
|
|
526
|
+
}
|
|
527
|
+
>
|
|
528
|
+
{colDef.bodyCell(rowData)}
|
|
529
|
+
</DataTableBaseCell>
|
|
530
|
+
);
|
|
531
|
+
},
|
|
532
|
+
)}
|
|
533
|
+
</DataTableTr>
|
|
534
|
+
<DataTableDetailsPanelRow rowId={details.id} rowData={rowData} />
|
|
535
|
+
</>
|
|
536
|
+
);
|
|
537
|
+
},
|
|
538
|
+
/* TODO: Might be some better metrics we could use to optimize this */
|
|
539
|
+
(prev, next) =>
|
|
540
|
+
prev.rowData === next.rowData &&
|
|
541
|
+
prev.columns === next.columns &&
|
|
542
|
+
prev.details.id === next.details.id &&
|
|
543
|
+
prev.details.level === next.details.level &&
|
|
544
|
+
prev.details.children.length === next.details.children.length,
|
|
545
|
+
);
|
|
546
|
+
|
|
547
|
+
const DataGridTable = DataGridTableInternal as <RowT>(
|
|
548
|
+
props: DataGridTableProps<RowT> & React.RefAttributes<HTMLTableElement>,
|
|
508
549
|
) => React.ReactElement | null;
|
|
509
550
|
|
|
510
|
-
//
|
|
511
|
-
export
|
|
512
|
-
export type
|
|
513
|
-
export
|
|
551
|
+
// eslint-disable-next-line @typescript-eslint/no-namespace, import/export
|
|
552
|
+
export namespace DataGridTable {
|
|
553
|
+
export type Props<T = unknown> = DataGridTableProps<T>;
|
|
554
|
+
export type Sorting = TableSortOptions;
|
|
555
|
+
export type SortEntry = import("./DataGridTable.types").SortEntry;
|
|
556
|
+
export type SortChangeDetail =
|
|
557
|
+
import("./DataGridTable.types").SortChangeDetail;
|
|
558
|
+
export type LoadingContent = DataTableLoadingConfig;
|
|
559
|
+
export type SubRows<T = unknown> = SubRowsProps<T>;
|
|
560
|
+
export type DetailsPanel<T = unknown> = DetailsPanelProps<T>;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
// docgen doesn't work well with type params, so we let it use DataGridTableInternal instead
|
|
564
|
+
// eslint-disable-next-line import/export
|
|
565
|
+
export { DataGridTable, DataGridTableInternal };
|
|
566
|
+
export type { DataGridTableProps };
|
|
567
|
+
export default DataGridTable;
|
|
@@ -6,10 +6,7 @@ import type {
|
|
|
6
6
|
import type { UseTableItemsReturn } from "../hooks/useTableItems";
|
|
7
7
|
import type { UseTableSelectionReturn } from "../hooks/useTableSelection";
|
|
8
8
|
import type { UseTableSortResults } from "../hooks/useTableSort";
|
|
9
|
-
import type {
|
|
10
|
-
DataTableLoadingConfig,
|
|
11
|
-
TableRowEntryId,
|
|
12
|
-
} from "./DataTable.types";
|
|
9
|
+
import type { DataTableLoadingConfig } from "./DataGridTable.types";
|
|
13
10
|
|
|
14
11
|
type DataTableContextProps<T> = {
|
|
15
12
|
layout: "fixed" | "auto";
|
|
@@ -19,10 +16,15 @@ type DataTableContextProps<T> = {
|
|
|
19
16
|
stickyHeader: boolean;
|
|
20
17
|
tableId: string;
|
|
21
18
|
loading: DataTableLoadingConfig | undefined;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
onRowAction?: ({
|
|
20
|
+
row,
|
|
21
|
+
id,
|
|
22
|
+
event,
|
|
23
|
+
}: {
|
|
24
|
+
row: T;
|
|
25
|
+
id: string;
|
|
26
|
+
event: React.MouseEvent<HTMLTableRowElement>;
|
|
27
|
+
}) => void;
|
|
26
28
|
columns: UseColumnOptionsResult<T>["columns"];
|
|
27
29
|
/**
|
|
28
30
|
* Used to set exact colspan for detailsPanel, loadingState and emptyState.
|
|
@@ -23,7 +23,7 @@ function DataTableSubRowToggle({ details }: { details: ItemDetail<any> }) {
|
|
|
23
23
|
tableItems.onExpandedRowIdsChange(details.id);
|
|
24
24
|
}}
|
|
25
25
|
aria-expanded={isRowExpanded}
|
|
26
|
-
aria-label={isRowExpanded ? "Skjul under-rader" : "Vis under-rader"}
|
|
26
|
+
aria-label={isRowExpanded ? "Skjul under-rader" : "Vis under-rader"} // TODO translate
|
|
27
27
|
icon={
|
|
28
28
|
isRowExpanded ? (
|
|
29
29
|
<ChevronDownIcon aria-hidden />
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React, { forwardRef, version } from "react";
|
|
2
|
+
import { useDataGridContext } from "../../../data-grid/root/DataGridRoot.context";
|
|
2
3
|
import { cl } from "../../../utils/helpers";
|
|
3
4
|
import {
|
|
4
5
|
DataTableLocationProvider,
|
|
@@ -11,6 +12,7 @@ const inertValue = parseInt(version.split(".")[0], 10) > 18 ? true : ""; // Supp
|
|
|
11
12
|
|
|
12
13
|
const DataTableTbody = forwardRef<HTMLTableSectionElement, DataTableTbodyProps>(
|
|
13
14
|
({ className, ...rest }, forwardedRef) => {
|
|
15
|
+
const { isLoading } = useDataGridContext();
|
|
14
16
|
const { loading } = useDataTableContext();
|
|
15
17
|
return (
|
|
16
18
|
<DataTableLocationProvider location="tbody">
|
|
@@ -20,9 +22,7 @@ const DataTableTbody = forwardRef<HTMLTableSectionElement, DataTableTbodyProps>(
|
|
|
20
22
|
className={cl("aksel-data-table__tbody", className)}
|
|
21
23
|
// @ts-expect-error - inert is not yet recognized by React's type definitions, but we want to use it for better accessibility when showing the loading overlay.
|
|
22
24
|
inert={
|
|
23
|
-
|
|
24
|
-
? inertValue
|
|
25
|
-
: false
|
|
25
|
+
isLoading && loading?.variant === "overlay" ? inertValue : false
|
|
26
26
|
}
|
|
27
27
|
/>
|
|
28
28
|
</DataTableLocationProvider>
|