@navikt/ds-react 8.10.3 → 8.10.5
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/action-menu/ActionMenu.js +1 -1
- package/cjs/action-menu/ActionMenu.js.map +1 -1
- package/cjs/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js +11 -12
- 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.d.ts +5 -5
- package/cjs/data/drag-and-drop/root/DragAndDropRoot.js +49 -28
- 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/{drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.d.ts → drag-and-drop-legacy/drag-handler/DragAndDropDragHandlerLegacy.d.ts} +3 -3
- package/cjs/data/{drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.js → drag-and-drop-legacy/drag-handler/DragAndDropDragHandlerLegacy.js} +5 -5
- package/cjs/data/drag-and-drop-legacy/drag-handler/DragAndDropDragHandlerLegacy.js.map +1 -0
- package/cjs/data/drag-and-drop-legacy/item/DragAndDropItemLegacy.d.ts +27 -0
- package/cjs/data/{drag-and-drop-old/item/DataDragAndDropItem.js → drag-and-drop-legacy/item/DragAndDropItemLegacy.js} +12 -12
- package/cjs/data/drag-and-drop-legacy/item/DragAndDropItemLegacy.js.map +1 -0
- package/cjs/data/drag-and-drop-legacy/root/DragAndDropLegacy.context.d.ts +5 -0
- package/cjs/data/drag-and-drop-legacy/root/DragAndDropLegacy.context.js +6 -0
- package/cjs/data/drag-and-drop-legacy/root/DragAndDropLegacy.context.js.map +1 -0
- package/cjs/data/drag-and-drop-legacy/root/DragAndDropLegacyRoot.d.ts +24 -0
- package/cjs/data/{drag-and-drop-old/root/DataDragAndDropRoot.js → drag-and-drop-legacy/root/DragAndDropLegacyRoot.js} +10 -10
- package/cjs/data/drag-and-drop-legacy/root/DragAndDropLegacyRoot.js.map +1 -0
- package/cjs/data/stories/Data.test-data.d.ts +24 -0
- package/cjs/data/stories/Data.test-data.js +1615 -0
- package/cjs/data/stories/Data.test-data.js.map +1 -0
- package/cjs/data/table/column-header/DataTableColumnHeader.d.ts +4 -1
- package/cjs/data/table/column-header/DataTableColumnHeader.js +4 -4
- package/cjs/data/table/column-header/DataTableColumnHeader.js.map +1 -1
- package/cjs/data/table/column-header/useTableColumnResize.d.ts +21 -18
- package/cjs/data/table/column-header/useTableColumnResize.js +7 -25
- package/cjs/data/table/column-header/useTableColumnResize.js.map +1 -1
- package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.d.ts +6 -0
- package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.js +32 -0
- package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.js.map +1 -0
- package/cjs/data/table/helpers/collectTableRowEntries.d.ts +9 -7
- package/cjs/data/table/helpers/collectTableRowEntries.js +21 -14
- package/cjs/data/table/helpers/collectTableRowEntries.js.map +1 -1
- 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.js +18 -5
- 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 +62 -0
- package/cjs/data/table/hooks/{useTableExpansion.js → useTableDetailsPanel.js} +21 -20
- package/cjs/data/table/hooks/useTableDetailsPanel.js.map +1 -0
- package/cjs/data/table/hooks/useTableItems.d.ts +14 -17
- package/cjs/data/table/hooks/useTableItems.js +17 -16
- package/cjs/data/table/hooks/useTableItems.js.map +1 -1
- package/cjs/data/table/hooks/useTableKeyboardNav.js +5 -1
- package/cjs/data/table/hooks/useTableKeyboardNav.js.map +1 -1
- package/cjs/data/table/hooks/useTableSelection.d.ts +4 -2
- package/cjs/data/table/hooks/useTableSelection.js +6 -1
- package/cjs/data/table/hooks/useTableSelection.js.map +1 -1
- package/cjs/data/table/index.d.ts +1 -2
- package/cjs/data/table/index.js +22 -12
- package/cjs/data/table/index.js.map +1 -1
- package/cjs/data/table/root/DataTable.types.d.ts +7 -9
- package/cjs/data/table/root/DataTableRoot.context.d.ts +5 -1
- package/cjs/data/table/root/DataTableRoot.context.js.map +1 -1
- package/cjs/data/table/root/DataTableRoot.d.ts +79 -115
- package/cjs/data/table/root/DataTableRoot.js +163 -38
- package/cjs/data/table/root/DataTableRoot.js.map +1 -1
- package/cjs/data/table/root/DataTableRoot.legacy.d.ts +177 -0
- package/cjs/data/table/root/DataTableRoot.legacy.js +104 -0
- package/cjs/data/table/root/DataTableRoot.legacy.js.map +1 -0
- package/cjs/data/table/sub-row-toggle/DataTableSubRowToggle.d.ts +6 -0
- package/cjs/data/table/sub-row-toggle/DataTableSubRowToggle.js +21 -0
- package/cjs/data/table/sub-row-toggle/DataTableSubRowToggle.js.map +1 -0
- package/cjs/data/table/tr/DataTableTr.js +11 -11
- package/cjs/data/table/tr/DataTableTr.js.map +1 -1
- package/cjs/utils/components/dismissablelayer/DismissableLayer.js +1 -1
- package/cjs/utils/components/dismissablelayer/DismissableLayer.js.map +1 -1
- package/cjs/utils/components/floating/Floating.d.ts +16 -1
- package/cjs/utils/components/floating/Floating.js +50 -13
- package/cjs/utils/components/floating/Floating.js.map +1 -1
- package/cjs/utils/components/floating-menu/Menu.js +1 -1
- package/cjs/utils/components/floating-menu/Menu.js.map +1 -1
- package/cjs/utils/helpers/create-strict-context.js +1 -1
- package/cjs/utils/helpers/create-strict-context.js.map +1 -1
- package/cjs/utils/hooks/useControllableState.d.ts +5 -5
- package/cjs/utils/hooks/useControllableState.js.map +1 -1
- package/cjs/utils/hooks/useValueAsRef.js +1 -1
- package/cjs/utils/hooks/useValueAsRef.js.map +1 -1
- package/cjs/utils-external/hooks/useId.js +1 -1
- package/cjs/utils-external/hooks/useId.js.map +1 -1
- package/esm/action-menu/ActionMenu.js +1 -1
- package/esm/action-menu/ActionMenu.js.map +1 -1
- package/esm/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js +11 -12
- 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.d.ts +5 -5
- package/esm/data/drag-and-drop/root/DragAndDropRoot.js +49 -28
- 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/{drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.d.ts → drag-and-drop-legacy/drag-handler/DragAndDropDragHandlerLegacy.d.ts} +3 -3
- package/esm/data/{drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.js → drag-and-drop-legacy/drag-handler/DragAndDropDragHandlerLegacy.js} +4 -4
- package/esm/data/drag-and-drop-legacy/drag-handler/DragAndDropDragHandlerLegacy.js.map +1 -0
- package/esm/data/drag-and-drop-legacy/item/DragAndDropItemLegacy.d.ts +27 -0
- package/esm/data/{drag-and-drop-old/item/DataDragAndDropItem.js → drag-and-drop-legacy/item/DragAndDropItemLegacy.js} +11 -11
- package/esm/data/drag-and-drop-legacy/item/DragAndDropItemLegacy.js.map +1 -0
- package/esm/data/drag-and-drop-legacy/root/DragAndDropLegacy.context.d.ts +5 -0
- package/esm/data/drag-and-drop-legacy/root/DragAndDropLegacy.context.js +3 -0
- package/esm/data/drag-and-drop-legacy/root/DragAndDropLegacy.context.js.map +1 -0
- package/esm/data/drag-and-drop-legacy/root/DragAndDropLegacyRoot.d.ts +24 -0
- package/esm/data/{drag-and-drop-old/root/DataDragAndDropRoot.js → drag-and-drop-legacy/root/DragAndDropLegacyRoot.js} +8 -8
- package/esm/data/drag-and-drop-legacy/root/DragAndDropLegacyRoot.js.map +1 -0
- package/esm/data/stories/Data.test-data.d.ts +24 -0
- package/esm/data/stories/Data.test-data.js +1606 -0
- package/esm/data/stories/Data.test-data.js.map +1 -0
- package/esm/data/table/column-header/DataTableColumnHeader.d.ts +4 -1
- package/esm/data/table/column-header/DataTableColumnHeader.js +4 -4
- package/esm/data/table/column-header/DataTableColumnHeader.js.map +1 -1
- package/esm/data/table/column-header/useTableColumnResize.d.ts +21 -18
- package/esm/data/table/column-header/useTableColumnResize.js +7 -25
- package/esm/data/table/column-header/useTableColumnResize.js.map +1 -1
- package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.d.ts +6 -0
- package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.js +27 -0
- package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.js.map +1 -0
- package/esm/data/table/helpers/collectTableRowEntries.d.ts +9 -7
- package/esm/data/table/helpers/collectTableRowEntries.js +21 -14
- package/esm/data/table/helpers/collectTableRowEntries.js.map +1 -1
- 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.js +18 -5
- 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 +62 -0
- package/esm/data/table/hooks/{useTableExpansion.js → useTableDetailsPanel.js} +18 -17
- package/esm/data/table/hooks/useTableDetailsPanel.js.map +1 -0
- package/esm/data/table/hooks/useTableItems.d.ts +14 -17
- package/esm/data/table/hooks/useTableItems.js +17 -16
- package/esm/data/table/hooks/useTableItems.js.map +1 -1
- package/esm/data/table/hooks/useTableKeyboardNav.js +6 -2
- package/esm/data/table/hooks/useTableKeyboardNav.js.map +1 -1
- package/esm/data/table/hooks/useTableSelection.d.ts +4 -2
- package/esm/data/table/hooks/useTableSelection.js +6 -1
- package/esm/data/table/hooks/useTableSelection.js.map +1 -1
- package/esm/data/table/index.d.ts +1 -2
- package/esm/data/table/index.js +21 -1
- package/esm/data/table/index.js.map +1 -1
- package/esm/data/table/root/DataTable.types.d.ts +7 -9
- package/esm/data/table/root/DataTableRoot.context.d.ts +5 -1
- package/esm/data/table/root/DataTableRoot.context.js.map +1 -1
- package/esm/data/table/root/DataTableRoot.d.ts +79 -115
- package/esm/data/table/root/DataTableRoot.js +170 -36
- package/esm/data/table/root/DataTableRoot.js.map +1 -1
- package/esm/data/table/root/DataTableRoot.legacy.d.ts +177 -0
- package/esm/data/table/root/DataTableRoot.legacy.js +59 -0
- package/esm/data/table/root/DataTableRoot.legacy.js.map +1 -0
- package/esm/data/table/sub-row-toggle/DataTableSubRowToggle.d.ts +6 -0
- package/esm/data/table/sub-row-toggle/DataTableSubRowToggle.js +16 -0
- package/esm/data/table/sub-row-toggle/DataTableSubRowToggle.js.map +1 -0
- package/esm/data/table/tr/DataTableTr.js +11 -11
- package/esm/data/table/tr/DataTableTr.js.map +1 -1
- package/esm/utils/components/dismissablelayer/DismissableLayer.js +1 -1
- package/esm/utils/components/dismissablelayer/DismissableLayer.js.map +1 -1
- package/esm/utils/components/floating/Floating.d.ts +16 -1
- package/esm/utils/components/floating/Floating.js +48 -13
- package/esm/utils/components/floating/Floating.js.map +1 -1
- package/esm/utils/components/floating-menu/Menu.js +2 -2
- package/esm/utils/components/floating-menu/Menu.js.map +1 -1
- package/esm/utils/helpers/create-strict-context.js +1 -1
- package/esm/utils/helpers/create-strict-context.js.map +1 -1
- package/esm/utils/hooks/useControllableState.d.ts +5 -5
- package/esm/utils/hooks/useControllableState.js.map +1 -1
- package/esm/utils/hooks/useValueAsRef.js +1 -1
- package/esm/utils/hooks/useValueAsRef.js.map +1 -1
- package/esm/utils-external/hooks/useId.js +1 -1
- package/esm/utils-external/hooks/useId.js.map +1 -1
- package/package.json +8 -7
- package/src/action-menu/ActionMenu.tsx +1 -1
- package/src/data/drag-and-drop/drag-handler/DragAndDropDragHandler.tsx +11 -16
- package/src/data/drag-and-drop/root/DragAndDrop.context.tsx +4 -2
- package/src/data/drag-and-drop/root/DragAndDropRoot.tsx +85 -40
- package/src/data/drag-and-drop/types.ts +0 -5
- package/src/data/{drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.tsx → drag-and-drop-legacy/drag-handler/DragAndDropDragHandlerLegacy.tsx} +5 -5
- package/src/data/{drag-and-drop-old/item/DataDragAndDropItem.tsx → drag-and-drop-legacy/item/DragAndDropItemLegacy.tsx} +13 -13
- package/src/data/{drag-and-drop-old/root/DataDragAndDrop.context.tsx → drag-and-drop-legacy/root/DragAndDropLegacy.context.tsx} +3 -3
- package/src/data/{drag-and-drop-old/root/DataDragAndDropRoot.tsx → drag-and-drop-legacy/root/DragAndDropLegacyRoot.tsx} +19 -21
- package/src/data/stories/Data.test-data.tsx +1702 -0
- package/src/data/table/column-header/DataTableColumnHeader.tsx +8 -6
- package/src/data/table/column-header/useTableColumnResize.ts +29 -44
- package/src/data/table/details-panel-row/DataTableDetailsPanelRow.tsx +57 -0
- package/src/data/table/helpers/collectTableRowEntries.ts +36 -30
- package/src/data/table/helpers/table-focus.ts +63 -9
- package/src/data/table/hooks/__tests__/useTableItems.test.ts +58 -12
- package/src/data/table/hooks/__tests__/useTableSelection.test.ts +57 -44
- package/src/data/table/hooks/useColumnOptions.ts +19 -5
- package/src/data/table/hooks/useGridCache.ts +3 -2
- package/src/data/table/hooks/useTableDetailsPanel.tsx +185 -0
- package/src/data/table/hooks/useTableItems.ts +44 -52
- package/src/data/table/hooks/useTableKeyboardNav.ts +6 -2
- package/src/data/table/hooks/useTableSelection.ts +17 -6
- package/src/data/table/index.tsx +5 -3
- package/src/data/table/root/DataTable.types.ts +20 -9
- package/src/data/table/root/DataTableRoot.context.ts +5 -1
- package/src/data/table/root/DataTableRoot.legacy.tsx +297 -0
- package/src/data/table/root/DataTableRoot.tsx +484 -219
- package/src/data/table/root/agent-feature-gap.md +96 -0
- package/src/data/table/sub-row-toggle/DataTableSubRowToggle.tsx +39 -0
- package/src/data/table/tr/DataTableTr.tsx +14 -13
- package/src/utils/components/dismissablelayer/DismissableLayer.tsx +1 -1
- package/src/utils/components/floating/Floating.tsx +56 -13
- package/src/utils/components/floating-menu/Menu.tsx +4 -1
- package/src/utils/helpers/create-strict-context.tsx +1 -1
- package/src/utils/hooks/useControllableState.ts +11 -8
- package/src/utils/hooks/useValueAsRef.ts +1 -1
- package/src/utils-external/hooks/useId.ts +1 -1
- 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.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.map +0 -1
- package/cjs/data/table/hooks/useTableExpansion.d.ts +0 -27
- package/cjs/data/table/hooks/useTableExpansion.js.map +0 -1
- package/cjs/data/table/root/DataTableAuto.d.ts +0 -182
- package/cjs/data/table/root/DataTableAuto.js +0 -206
- package/cjs/data/table/root/DataTableAuto.js.map +0 -1
- 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.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.map +0 -1
- package/esm/data/table/hooks/useTableExpansion.d.ts +0 -27
- package/esm/data/table/hooks/useTableExpansion.js.map +0 -1
- package/esm/data/table/root/DataTableAuto.d.ts +0 -182
- package/esm/data/table/root/DataTableAuto.js +0 -170
- package/esm/data/table/root/DataTableAuto.js.map +0 -1
- package/src/data/table/hooks/useTableExpansion.tsx +0 -146
- package/src/data/table/root/DataTableAuto.test.tsx +0 -244
- package/src/data/table/root/DataTableAuto.tsx +0 -612
|
@@ -1,612 +0,0 @@
|
|
|
1
|
-
/** biome-ignore-all lint/correctness/useHookAtTopLevel: False positive because of the way forwardRef() is added */
|
|
2
|
-
import React, { forwardRef } from "react";
|
|
3
|
-
import { ChevronDownIcon, ChevronRightIcon } from "@navikt/aksel-icons";
|
|
4
|
-
import { Button } from "../../../button";
|
|
5
|
-
import { Skeleton } from "../../../skeleton";
|
|
6
|
-
import { useId } from "../../../utils-external";
|
|
7
|
-
import { cl } from "../../../utils/helpers";
|
|
8
|
-
import { useMergeRefs } from "../../../utils/hooks";
|
|
9
|
-
import { DataTableBaseCell } from "../base-cell/DataTableBaseCell";
|
|
10
|
-
import { DataTableColumnHeader } from "../column-header/DataTableColumnHeader";
|
|
11
|
-
import { DataTableEmptyState } from "../empty-state/DataTableEmptyState";
|
|
12
|
-
import { useColumnOptions } from "../hooks/useColumnOptions";
|
|
13
|
-
import {
|
|
14
|
-
DataTableExpansionProvider,
|
|
15
|
-
getDataTableExpansionId,
|
|
16
|
-
useDataTableExpansion,
|
|
17
|
-
} from "../hooks/useTableExpansion";
|
|
18
|
-
import {
|
|
19
|
-
type ItemDetail,
|
|
20
|
-
TableItemsProvider,
|
|
21
|
-
useTableItems,
|
|
22
|
-
useTableItemsContext,
|
|
23
|
-
} from "../hooks/useTableItems";
|
|
24
|
-
import { useTableKeyboardNav } from "../hooks/useTableKeyboardNav";
|
|
25
|
-
import {
|
|
26
|
-
type SelectionProps,
|
|
27
|
-
useTableSelection,
|
|
28
|
-
} from "../hooks/useTableSelection";
|
|
29
|
-
import { type TableSortOptions, useTableSort } from "../hooks/useTableSort";
|
|
30
|
-
import { DataTableLoadingState } from "../loading-state/DataTableLoadingState";
|
|
31
|
-
import { DataTableTbody } from "../tbody/DataTableTbody";
|
|
32
|
-
import { DataTableThead } from "../thead/DataTableThead";
|
|
33
|
-
import { DataTableTr } from "../tr/DataTableTr";
|
|
34
|
-
import type { ColumnDefinitions } from "./DataTable.types";
|
|
35
|
-
import {
|
|
36
|
-
DataTableContextProvider,
|
|
37
|
-
useDataTableContext,
|
|
38
|
-
} from "./DataTableRoot.context";
|
|
39
|
-
|
|
40
|
-
interface DataTableProps<T>
|
|
41
|
-
extends React.HTMLAttributes<HTMLTableElement>, TableSortOptions {
|
|
42
|
-
children?: never;
|
|
43
|
-
/**
|
|
44
|
-
* Controls vertical cell padding.
|
|
45
|
-
* @default "normal"
|
|
46
|
-
*/
|
|
47
|
-
rowDensity?: "condensed" | "normal" | "spacious";
|
|
48
|
-
/**
|
|
49
|
-
* Zebra striped table
|
|
50
|
-
* @default false
|
|
51
|
-
*/
|
|
52
|
-
zebraStripes?: boolean;
|
|
53
|
-
/**
|
|
54
|
-
* Truncate content in cells and show ellipsis for overflowed text.
|
|
55
|
-
*
|
|
56
|
-
* **NB:** When using `layout="auto"`, you have to manually set a `maxWidth` on columns that should be truncated.
|
|
57
|
-
* @default true
|
|
58
|
-
*/
|
|
59
|
-
truncateContent?: boolean; // TODO: Consider making this default false when layout=auto, and maybe disallow it but add a wrap prop on the td-comp.
|
|
60
|
-
/**
|
|
61
|
-
* Enables keyboard navigation for table rows and cells.
|
|
62
|
-
* @default false
|
|
63
|
-
*/
|
|
64
|
-
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
|
-
/**
|
|
72
|
-
* Controls table layout.
|
|
73
|
-
*
|
|
74
|
-
* ### fixed
|
|
75
|
-
* Gives you full control of column widths. This is required for resizable columns.
|
|
76
|
-
*
|
|
77
|
-
* ### auto
|
|
78
|
-
* Makes the columns resize automatically based on the content.
|
|
79
|
-
* The table will take up at least 100% of available width.
|
|
80
|
-
*
|
|
81
|
-
* **NB:** When using this with `truncateContent`, you have to manually
|
|
82
|
-
* set a `contentMaxWidth` on cells that should be truncated.
|
|
83
|
-
* @default "fixed"
|
|
84
|
-
*/
|
|
85
|
-
layout?: "fixed" | "auto";
|
|
86
|
-
/**
|
|
87
|
-
* Defines the columns of the table and how to render them.
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
* Each column definition should have a unique `id` (or use the column index as fallback) and a `cell`-renderer function that takes the row data as argument and returns a React node.
|
|
91
|
-
*/
|
|
92
|
-
columnDefinitions: ColumnDefinitions<T>;
|
|
93
|
-
/**
|
|
94
|
-
* The data to display in the table.
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
* Each object in the array represents a row, and the properties of the object are used to render the cells based on the `columnDefinitions`.
|
|
98
|
-
*/
|
|
99
|
-
data: T[];
|
|
100
|
-
/**
|
|
101
|
-
* Function to get unique row id from row data.
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
* If not provided, the row index will be used as id. This can cause issues if your data changes dynamically, so it's recommended to provide a stable id if possible.
|
|
105
|
-
*/
|
|
106
|
-
getRowId?: (rowData: T, index: number) => string | number;
|
|
107
|
-
/**
|
|
108
|
-
* Sticky columns that remain visible when horizontally scrolling the table.
|
|
109
|
-
*
|
|
110
|
-
* You can specify 1 sticky column on the left and 1 on the right.
|
|
111
|
-
*/
|
|
112
|
-
stickyColumns?: {
|
|
113
|
-
first?: "1";
|
|
114
|
-
last?: "1";
|
|
115
|
-
};
|
|
116
|
-
/**
|
|
117
|
-
* @default false
|
|
118
|
-
*/
|
|
119
|
-
stickyHeader?: boolean;
|
|
120
|
-
/**
|
|
121
|
-
* Callback invoked when a data row is clicked.
|
|
122
|
-
* Not called when clicking header, loading, or empty-state rows.
|
|
123
|
-
*/
|
|
124
|
-
onRowClick?: (
|
|
125
|
-
rowId: string | number,
|
|
126
|
-
event: React.MouseEvent<HTMLTableRowElement>,
|
|
127
|
-
) => void;
|
|
128
|
-
/**
|
|
129
|
-
* Content to render when `data` is empty.
|
|
130
|
-
* Rendered inside a `DataTable.EmptyState` row spanning all columns.
|
|
131
|
-
*/
|
|
132
|
-
emptyState?: React.ReactNode;
|
|
133
|
-
/**
|
|
134
|
-
* Shows the table in a loading state.
|
|
135
|
-
*
|
|
136
|
-
* - When `loadingState` is provided, it is rendered inside a `DataTable.LoadingState` row.
|
|
137
|
-
* - When `loadingState` is **not** provided, skeleton placeholder rows are rendered instead.
|
|
138
|
-
* @default false
|
|
139
|
-
*/
|
|
140
|
-
isLoading?: boolean;
|
|
141
|
-
/**
|
|
142
|
-
* Custom content to render when `isLoading` is `true`.
|
|
143
|
-
* Rendered inside a `DataTable.LoadingState` row spanning all columns.
|
|
144
|
-
* When omitted, skeleton rows are rendered based on `loadingRows`.
|
|
145
|
-
*/
|
|
146
|
-
loadingState?: React.ReactNode;
|
|
147
|
-
/**
|
|
148
|
-
* Number of skeleton rows to render when `isLoading` is `true` and no `loadingState` is provided.
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
* If not provided, the rendered content will get a temporarily overlay while loading
|
|
152
|
-
*/
|
|
153
|
-
loadingRows?: number;
|
|
154
|
-
/**
|
|
155
|
-
* Visually hidden label announced to screen readers when skeleton rows are shown.
|
|
156
|
-
* Only used when `isLoading` is `true` and no `loadingState` is provided.
|
|
157
|
-
* @default "Laster innhold"
|
|
158
|
-
*/
|
|
159
|
-
loadingLabel?: string;
|
|
160
|
-
/**
|
|
161
|
-
* Renders a details panel below the row when expanded.
|
|
162
|
-
* When provided, an expand toggle column is added automatically.
|
|
163
|
-
*/
|
|
164
|
-
getDetailsPanelContent?: (rowData: T) => React.ReactNode;
|
|
165
|
-
/**
|
|
166
|
-
* Determines whether a row can be expanded to show details panel content.
|
|
167
|
-
* @default () => true
|
|
168
|
-
*/
|
|
169
|
-
isDetailsPanelExpandable?: (rowData: T) => boolean;
|
|
170
|
-
/**
|
|
171
|
-
* Controlled list of expanded row IDs.
|
|
172
|
-
* Use with `onDetailsPanelChange` for controlled usage, or `defaultDetailsPanelRowIds` for uncontrolled.
|
|
173
|
-
*/
|
|
174
|
-
detailsPanelRowIds?: (string | number)[];
|
|
175
|
-
/**
|
|
176
|
-
* Initial list of expanded row IDs for uncontrolled usage.
|
|
177
|
-
* @default []
|
|
178
|
-
*/
|
|
179
|
-
defaultDetailsPanelRowIds?: (string | number)[];
|
|
180
|
-
/**
|
|
181
|
-
* Called when the list of expanded row IDs changes.
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
* TODO:
|
|
185
|
-
* - Docs: This pattern is called "Master / Detail" in general terms
|
|
186
|
-
*/
|
|
187
|
-
onDetailsPanelChange?: (ids: (string | number)[]) => void;
|
|
188
|
-
/**
|
|
189
|
-
* Returns the height (in px) or `"auto"` for a row's details panel.
|
|
190
|
-
* When a number is returned, the panel scrolls within that fixed height.
|
|
191
|
-
* @default "auto"
|
|
192
|
-
*/
|
|
193
|
-
getDetailsPanelHeight?: (rowData: T) => number | "auto";
|
|
194
|
-
/**
|
|
195
|
-
* Shows an expand-all toggle button in the expand column header.
|
|
196
|
-
* @default false
|
|
197
|
-
*/
|
|
198
|
-
showExpandAll?: boolean;
|
|
199
|
-
/**
|
|
200
|
-
* Function to get sub-rows for a given row, used for nested rows.
|
|
201
|
-
* When provided, an expand toggle column is added automatically.
|
|
202
|
-
*
|
|
203
|
-
*
|
|
204
|
-
* TODO:
|
|
205
|
-
* - Table might need to be implemented with role="treegrid" for a11y when having nested rows.
|
|
206
|
-
*/
|
|
207
|
-
getSubRows?: (rowData: T) => T[];
|
|
208
|
-
expandedSubRowIds?: (string | number)[];
|
|
209
|
-
defaultExpandedSubRowIds?: (string | number)[];
|
|
210
|
-
isSubRowExpandable?: (rowData: T) => boolean;
|
|
211
|
-
onExpandedSubRowIdsChange?: (ids: (string | number)[]) => void;
|
|
212
|
-
/**
|
|
213
|
-
* Props for row selection functionality.
|
|
214
|
-
*/
|
|
215
|
-
selection?: SelectionProps;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
function DataTableAutoInner<T>(
|
|
219
|
-
{
|
|
220
|
-
className,
|
|
221
|
-
id,
|
|
222
|
-
rowDensity = "normal",
|
|
223
|
-
withKeyboardNav = false,
|
|
224
|
-
zebraStripes = false,
|
|
225
|
-
truncateContent = true,
|
|
226
|
-
shouldBlockNavigation,
|
|
227
|
-
layout = "fixed",
|
|
228
|
-
selection,
|
|
229
|
-
data,
|
|
230
|
-
columnDefinitions,
|
|
231
|
-
getRowId,
|
|
232
|
-
stickyColumns,
|
|
233
|
-
stickyHeader = false,
|
|
234
|
-
sort: sortProp,
|
|
235
|
-
defaultSort = [],
|
|
236
|
-
onSortChange,
|
|
237
|
-
onRowClick,
|
|
238
|
-
emptyState,
|
|
239
|
-
isLoading = false,
|
|
240
|
-
loadingState,
|
|
241
|
-
loadingRows,
|
|
242
|
-
loadingLabel = "Laster innhold",
|
|
243
|
-
getDetailsPanelContent,
|
|
244
|
-
isDetailsPanelExpandable,
|
|
245
|
-
getDetailsPanelHeight,
|
|
246
|
-
showExpandAll = false,
|
|
247
|
-
detailsPanelRowIds,
|
|
248
|
-
defaultDetailsPanelRowIds,
|
|
249
|
-
onDetailsPanelChange,
|
|
250
|
-
getSubRows,
|
|
251
|
-
expandedSubRowIds,
|
|
252
|
-
defaultExpandedSubRowIds,
|
|
253
|
-
isSubRowExpandable,
|
|
254
|
-
onExpandedSubRowIdsChange,
|
|
255
|
-
...rest
|
|
256
|
-
}: DataTableProps<T>,
|
|
257
|
-
forwardedRef: React.ForwardedRef<HTMLTableElement>,
|
|
258
|
-
) {
|
|
259
|
-
const { tabIndex, setTableRef } = useTableKeyboardNav({
|
|
260
|
-
enabled: withKeyboardNav,
|
|
261
|
-
shouldBlockNavigation,
|
|
262
|
-
});
|
|
263
|
-
|
|
264
|
-
const { sortState, onSortClick } = useTableSort({
|
|
265
|
-
defaultSort,
|
|
266
|
-
onSortChange,
|
|
267
|
-
sort: sortProp,
|
|
268
|
-
});
|
|
269
|
-
|
|
270
|
-
const mergedRef = useMergeRefs(forwardedRef, setTableRef);
|
|
271
|
-
|
|
272
|
-
const tableItems = useTableItems({
|
|
273
|
-
items: data,
|
|
274
|
-
getRowId,
|
|
275
|
-
getSubRows,
|
|
276
|
-
expandedSubRowIds,
|
|
277
|
-
defaultExpandedSubRowIds,
|
|
278
|
-
isSubRowExpandable,
|
|
279
|
-
onExpandedSubRowIdsChange,
|
|
280
|
-
});
|
|
281
|
-
|
|
282
|
-
const {
|
|
283
|
-
selectionMode: selectionModeProp = "none",
|
|
284
|
-
selectedKeys,
|
|
285
|
-
defaultSelectedKeys,
|
|
286
|
-
onSelectionChange,
|
|
287
|
-
disabledSelectionKeys = [],
|
|
288
|
-
disableRowSelectionOnClick = false,
|
|
289
|
-
} = selection || {};
|
|
290
|
-
|
|
291
|
-
const tableSelectionState = useTableSelection({
|
|
292
|
-
selectionMode: selectionModeProp,
|
|
293
|
-
selectedKeys,
|
|
294
|
-
defaultSelectedKeys,
|
|
295
|
-
onSelectionChange,
|
|
296
|
-
disabledSelectionKeys,
|
|
297
|
-
visibleRowIds: tableItems.visibleRowIds,
|
|
298
|
-
childRowIdsById: tableItems.childRowIdsById,
|
|
299
|
-
});
|
|
300
|
-
|
|
301
|
-
const { columns, stickySelection } = useColumnOptions<T>(columnDefinitions, {
|
|
302
|
-
stickyColumns,
|
|
303
|
-
selectionMode: tableSelectionState.selection.selectionMode,
|
|
304
|
-
});
|
|
305
|
-
|
|
306
|
-
const fullWidthColSpan =
|
|
307
|
-
columns.length +
|
|
308
|
-
(layout === "fixed" ? 1 : 0) +
|
|
309
|
-
(tableSelectionState.selection.selectionMode !== "none" ? 1 : 0) +
|
|
310
|
-
(getDetailsPanelContent ? 1 : 0);
|
|
311
|
-
|
|
312
|
-
const tableId = useId(id);
|
|
313
|
-
|
|
314
|
-
return (
|
|
315
|
-
<DataTableContextProvider
|
|
316
|
-
layout={layout}
|
|
317
|
-
withKeyboardNav={withKeyboardNav}
|
|
318
|
-
selectionState={tableSelectionState}
|
|
319
|
-
stickySelection={stickySelection}
|
|
320
|
-
stickyHeader={stickyHeader}
|
|
321
|
-
tableId={tableId}
|
|
322
|
-
showLoadingSkeletons={isLoading && loadingState == null}
|
|
323
|
-
onRowClick={onRowClick}
|
|
324
|
-
disableRowSelectionOnClick={disableRowSelectionOnClick}
|
|
325
|
-
isLoading={isLoading}
|
|
326
|
-
showLoadingOverlay={isLoading && !loadingState && !loadingRows}
|
|
327
|
-
columns={columns}
|
|
328
|
-
>
|
|
329
|
-
<TableItemsProvider
|
|
330
|
-
itemDetails={tableItems.itemDetails}
|
|
331
|
-
items={tableItems.items}
|
|
332
|
-
onExpandedSubRowIdsChange={tableItems.onExpandedSubRowIdsChange}
|
|
333
|
-
isSubRowExpanded={tableItems.isSubRowExpanded}
|
|
334
|
-
>
|
|
335
|
-
<DataTableExpansionProvider
|
|
336
|
-
detailsPanelRowIds={detailsPanelRowIds}
|
|
337
|
-
defaultDetailsPanelRowIds={defaultDetailsPanelRowIds}
|
|
338
|
-
onDetailsPanelChange={onDetailsPanelChange}
|
|
339
|
-
getDetailsPanelContent={getDetailsPanelContent}
|
|
340
|
-
isDetailsPanelExpandable={isDetailsPanelExpandable}
|
|
341
|
-
getDetailsPanelHeight={getDetailsPanelHeight}
|
|
342
|
-
showExpandAll={showExpandAll}
|
|
343
|
-
>
|
|
344
|
-
<div className="aksel-data-table__border-wrapper">
|
|
345
|
-
<div className="aksel-data-table__scroll-wrapper">
|
|
346
|
-
<table
|
|
347
|
-
{...rest}
|
|
348
|
-
ref={mergedRef}
|
|
349
|
-
className={cl("aksel-data-table", className)}
|
|
350
|
-
data-zebra-stripes={zebraStripes}
|
|
351
|
-
data-truncate-content={truncateContent}
|
|
352
|
-
data-density={rowDensity}
|
|
353
|
-
data-layout={layout}
|
|
354
|
-
data-loading={isLoading || undefined}
|
|
355
|
-
tabIndex={tabIndex}
|
|
356
|
-
aria-busy={isLoading || undefined}
|
|
357
|
-
>
|
|
358
|
-
<DataTableThead>
|
|
359
|
-
<DataTableTr>
|
|
360
|
-
{columns.map(({ isSticky, colDef }) => {
|
|
361
|
-
const sortEntry = sortState.find(
|
|
362
|
-
(s) => s.columnId === colDef.id,
|
|
363
|
-
);
|
|
364
|
-
const sortDirection = sortEntry?.direction ?? "none";
|
|
365
|
-
return (
|
|
366
|
-
<DataTableColumnHeader
|
|
367
|
-
maxWidth={colDef.maxWidth}
|
|
368
|
-
minWidth={colDef.minWidth}
|
|
369
|
-
width={colDef.width}
|
|
370
|
-
defaultWidth={colDef.defaultWidth ?? "100%"}
|
|
371
|
-
textAlign={colDef.align ?? "left"}
|
|
372
|
-
key={colDef.id}
|
|
373
|
-
isSticky={isSticky}
|
|
374
|
-
sortable={colDef.sortable}
|
|
375
|
-
sortDirection={sortDirection}
|
|
376
|
-
onSortClick={(event) => onSortClick(colDef.id, event)}
|
|
377
|
-
>
|
|
378
|
-
{colDef.header}
|
|
379
|
-
</DataTableColumnHeader>
|
|
380
|
-
);
|
|
381
|
-
})}
|
|
382
|
-
</DataTableTr>
|
|
383
|
-
</DataTableThead>
|
|
384
|
-
|
|
385
|
-
<DataTableTbody>
|
|
386
|
-
<DataTableAutoTBodyContent
|
|
387
|
-
loadingState={loadingState}
|
|
388
|
-
loadingRows={loadingRows}
|
|
389
|
-
loadingLabel={loadingLabel}
|
|
390
|
-
emptyState={emptyState}
|
|
391
|
-
fullWidthColSpan={fullWidthColSpan}
|
|
392
|
-
/>
|
|
393
|
-
</DataTableTbody>
|
|
394
|
-
</table>
|
|
395
|
-
</div>
|
|
396
|
-
</div>
|
|
397
|
-
</DataTableExpansionProvider>
|
|
398
|
-
</TableItemsProvider>
|
|
399
|
-
</DataTableContextProvider>
|
|
400
|
-
);
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
interface DataTableAutoTBodyContentProps {
|
|
404
|
-
loadingState: React.ReactNode;
|
|
405
|
-
loadingLabel: string;
|
|
406
|
-
loadingRows?: number;
|
|
407
|
-
emptyState: React.ReactNode;
|
|
408
|
-
fullWidthColSpan: number;
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
function DataTableAutoTBodyContent({
|
|
412
|
-
loadingState,
|
|
413
|
-
loadingRows,
|
|
414
|
-
loadingLabel,
|
|
415
|
-
emptyState,
|
|
416
|
-
fullWidthColSpan,
|
|
417
|
-
}: DataTableAutoTBodyContentProps) {
|
|
418
|
-
const { items, itemDetails } = useTableItemsContext();
|
|
419
|
-
const { columns, isLoading } = useDataTableContext();
|
|
420
|
-
|
|
421
|
-
if (isLoading && loadingState != null) {
|
|
422
|
-
return (
|
|
423
|
-
<DataTableLoadingState colSpan={fullWidthColSpan}>
|
|
424
|
-
{loadingState}
|
|
425
|
-
</DataTableLoadingState>
|
|
426
|
-
);
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
if (isLoading && loadingRows) {
|
|
430
|
-
return (
|
|
431
|
-
<>
|
|
432
|
-
<tr>
|
|
433
|
-
<td colSpan={fullWidthColSpan} className="aksel-sr-only">
|
|
434
|
-
{loadingLabel}
|
|
435
|
-
</td>
|
|
436
|
-
</tr>
|
|
437
|
-
{Array.from({ length: loadingRows }, (_, rowIndex) => (
|
|
438
|
-
<DataTableTr key={`skeleton-row-${rowIndex}`} aria-hidden>
|
|
439
|
-
{columns.map(({ isSticky, colDef }, colDefIndex) => (
|
|
440
|
-
<DataTableBaseCell
|
|
441
|
-
textAlign={colDef.align ?? "left"}
|
|
442
|
-
key={colDef.id || colDefIndex}
|
|
443
|
-
as={colDef.isRowHeader ? "th" : "td"}
|
|
444
|
-
isSticky={isSticky}
|
|
445
|
-
>
|
|
446
|
-
<Skeleton variant="text" />
|
|
447
|
-
</DataTableBaseCell>
|
|
448
|
-
))}
|
|
449
|
-
</DataTableTr>
|
|
450
|
-
))}
|
|
451
|
-
</>
|
|
452
|
-
);
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
if (items.length === 0 && emptyState !== undefined) {
|
|
456
|
-
return (
|
|
457
|
-
<DataTableEmptyState colSpan={fullWidthColSpan}>
|
|
458
|
-
{emptyState}
|
|
459
|
-
</DataTableEmptyState>
|
|
460
|
-
);
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
const renderLoadingAnnouncement = isLoading && !loadingState && !loadingRows;
|
|
464
|
-
|
|
465
|
-
return (
|
|
466
|
-
<>
|
|
467
|
-
{renderLoadingAnnouncement && (
|
|
468
|
-
<tr>
|
|
469
|
-
<td colSpan={fullWidthColSpan} className="aksel-sr-only">
|
|
470
|
-
{loadingLabel}
|
|
471
|
-
</td>
|
|
472
|
-
</tr>
|
|
473
|
-
)}
|
|
474
|
-
{items.map((rowData) => {
|
|
475
|
-
const details = itemDetails.get(rowData);
|
|
476
|
-
|
|
477
|
-
/* Should in theory be impossible. Look about typing this? */
|
|
478
|
-
if (!details) {
|
|
479
|
-
return null;
|
|
480
|
-
}
|
|
481
|
-
|
|
482
|
-
const hasSubRows = details.children.length > 0;
|
|
483
|
-
|
|
484
|
-
return (
|
|
485
|
-
<React.Fragment key={details.id}>
|
|
486
|
-
<DataTableTr rowId={details.id}>
|
|
487
|
-
{columns.map(({ isSticky, colDef }, colDefIndex) => {
|
|
488
|
-
const renderNestedToggle = colDefIndex === 0 && hasSubRows;
|
|
489
|
-
const renderNestedIndent =
|
|
490
|
-
colDefIndex === 0 && (details.level > 0 || hasSubRows);
|
|
491
|
-
|
|
492
|
-
const style: React.CSSProperties = {
|
|
493
|
-
"--__axc-data-table-nested-depth": details.level,
|
|
494
|
-
};
|
|
495
|
-
|
|
496
|
-
return (
|
|
497
|
-
<DataTableBaseCell
|
|
498
|
-
textAlign={colDef.align ?? "left"}
|
|
499
|
-
key={colDef.id || colDefIndex}
|
|
500
|
-
as={colDef.isRowHeader ? "th" : "td"}
|
|
501
|
-
isSticky={isSticky}
|
|
502
|
-
data-nested={renderNestedIndent || undefined}
|
|
503
|
-
style={style}
|
|
504
|
-
>
|
|
505
|
-
{renderNestedToggle && (
|
|
506
|
-
<NestedRowToggle details={details} />
|
|
507
|
-
)}
|
|
508
|
-
{colDef.cell(rowData)}
|
|
509
|
-
</DataTableBaseCell>
|
|
510
|
-
);
|
|
511
|
-
})}
|
|
512
|
-
</DataTableTr>
|
|
513
|
-
<DataTableExpandedRow
|
|
514
|
-
rowId={details.id}
|
|
515
|
-
rowData={rowData}
|
|
516
|
-
fullWidthColSpan={fullWidthColSpan}
|
|
517
|
-
/>
|
|
518
|
-
</React.Fragment>
|
|
519
|
-
);
|
|
520
|
-
})}
|
|
521
|
-
</>
|
|
522
|
-
);
|
|
523
|
-
}
|
|
524
|
-
|
|
525
|
-
function NestedRowToggle({ details }: { details: ItemDetail<any> }) {
|
|
526
|
-
const { isSubRowExpanded, onExpandedSubRowIdsChange } =
|
|
527
|
-
useTableItemsContext();
|
|
528
|
-
|
|
529
|
-
const subRows = details.children;
|
|
530
|
-
const hasSubRows = subRows && subRows.length > 0;
|
|
531
|
-
const isRowExpanded = isSubRowExpanded(details.id);
|
|
532
|
-
|
|
533
|
-
return (
|
|
534
|
-
<div className="aksel-data-table__nested-toggle">
|
|
535
|
-
{hasSubRows && (
|
|
536
|
-
<Button
|
|
537
|
-
variant="tertiary"
|
|
538
|
-
data-color="neutral"
|
|
539
|
-
size="small"
|
|
540
|
-
onClick={(e) => {
|
|
541
|
-
e.stopPropagation();
|
|
542
|
-
onExpandedSubRowIdsChange(details.id);
|
|
543
|
-
}}
|
|
544
|
-
aria-expanded={isRowExpanded}
|
|
545
|
-
aria-label={isRowExpanded ? "Skjul under-rader" : "Vis under-rader"}
|
|
546
|
-
icon={
|
|
547
|
-
isRowExpanded ? (
|
|
548
|
-
<ChevronDownIcon aria-hidden />
|
|
549
|
-
) : (
|
|
550
|
-
<ChevronRightIcon aria-hidden />
|
|
551
|
-
)
|
|
552
|
-
}
|
|
553
|
-
/>
|
|
554
|
-
)}
|
|
555
|
-
</div>
|
|
556
|
-
);
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
function DataTableExpandedRow<T>({
|
|
560
|
-
rowId,
|
|
561
|
-
rowData,
|
|
562
|
-
fullWidthColSpan,
|
|
563
|
-
}: {
|
|
564
|
-
rowId: string | number;
|
|
565
|
-
rowData: T;
|
|
566
|
-
fullWidthColSpan: number;
|
|
567
|
-
}) {
|
|
568
|
-
const { tableId } = useDataTableContext();
|
|
569
|
-
const {
|
|
570
|
-
enableDetailsPanel,
|
|
571
|
-
isExpanded,
|
|
572
|
-
getDetailsPanelContent,
|
|
573
|
-
getDetailsPanelHeight,
|
|
574
|
-
} = useDataTableExpansion();
|
|
575
|
-
|
|
576
|
-
if (!enableDetailsPanel) {
|
|
577
|
-
return null;
|
|
578
|
-
}
|
|
579
|
-
|
|
580
|
-
if (!isExpanded(rowId)) {
|
|
581
|
-
return null;
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
const content = getDetailsPanelContent?.(rowData);
|
|
585
|
-
const expansionId = getDataTableExpansionId(tableId, rowId);
|
|
586
|
-
|
|
587
|
-
if (!content) {
|
|
588
|
-
return null;
|
|
589
|
-
}
|
|
590
|
-
|
|
591
|
-
const panelHeight = getDetailsPanelHeight?.(rowData);
|
|
592
|
-
|
|
593
|
-
const style: React.CSSProperties = panelHeight
|
|
594
|
-
? { height: panelHeight, overflow: "auto" }
|
|
595
|
-
: { height: "auto" };
|
|
596
|
-
|
|
597
|
-
return (
|
|
598
|
-
<tr>
|
|
599
|
-
<td id={expansionId} colSpan={fullWidthColSpan}>
|
|
600
|
-
<div style={style}>{content}</div>
|
|
601
|
-
</td>
|
|
602
|
-
</tr>
|
|
603
|
-
);
|
|
604
|
-
}
|
|
605
|
-
|
|
606
|
-
const DataTableAuto = forwardRef(DataTableAutoInner) as <T>(
|
|
607
|
-
props: DataTableProps<T> & React.RefAttributes<HTMLTableElement>,
|
|
608
|
-
) => React.ReactElement | null;
|
|
609
|
-
|
|
610
|
-
export { DataTableAuto };
|
|
611
|
-
export type { DataTableProps };
|
|
612
|
-
export default DataTableAuto;
|