@navikt/ds-react 8.10.2 → 8.10.4

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.
Files changed (200) hide show
  1. package/cjs/action-menu/ActionMenu.js +1 -1
  2. package/cjs/action-menu/ActionMenu.js.map +1 -1
  3. package/cjs/data/stories/Data.test-data.d.ts +24 -0
  4. package/cjs/data/stories/Data.test-data.js +1616 -0
  5. package/cjs/data/stories/Data.test-data.js.map +1 -0
  6. package/cjs/data/table/column-header/DataTableColumnHeader.d.ts +4 -1
  7. package/cjs/data/table/column-header/DataTableColumnHeader.js +4 -2
  8. package/cjs/data/table/column-header/DataTableColumnHeader.js.map +1 -1
  9. package/cjs/data/table/column-header/useTableColumnResize.d.ts +39 -14
  10. package/cjs/data/table/column-header/useTableColumnResize.js +37 -39
  11. package/cjs/data/table/column-header/useTableColumnResize.js.map +1 -1
  12. package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.d.ts +6 -0
  13. package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.js +32 -0
  14. package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.js.map +1 -0
  15. package/cjs/data/table/helpers/collectTableRowEntries.d.ts +13 -5
  16. package/cjs/data/table/helpers/collectTableRowEntries.js +26 -19
  17. package/cjs/data/table/helpers/collectTableRowEntries.js.map +1 -1
  18. package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.d.ts +46 -0
  19. package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.js +112 -0
  20. package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.js.map +1 -0
  21. package/cjs/data/table/helpers/selection/getMultipleSelectProps.d.ts +3 -2
  22. package/cjs/data/table/helpers/selection/getMultipleSelectProps.js +43 -19
  23. package/cjs/data/table/helpers/selection/getMultipleSelectProps.js.map +1 -1
  24. package/cjs/data/table/helpers/selection/selection.types.d.ts +1 -0
  25. package/cjs/data/table/helpers/table-keyboard.d.ts +1 -2
  26. package/cjs/data/table/helpers/table-keyboard.js +1 -2
  27. package/cjs/data/table/helpers/table-keyboard.js.map +1 -1
  28. package/cjs/data/table/hooks/useColumnOptions.js +18 -5
  29. package/cjs/data/table/hooks/useColumnOptions.js.map +1 -1
  30. package/cjs/data/table/hooks/useTableDetailsPanel.d.ts +62 -0
  31. package/cjs/data/table/hooks/{useTableExpansion.js → useTableDetailsPanel.js} +26 -19
  32. package/cjs/data/table/hooks/useTableDetailsPanel.js.map +1 -0
  33. package/cjs/data/table/hooks/useTableItems.d.ts +18 -17
  34. package/cjs/data/table/hooks/useTableItems.js +27 -15
  35. package/cjs/data/table/hooks/useTableItems.js.map +1 -1
  36. package/cjs/data/table/hooks/useTableSelection.d.ts +6 -3
  37. package/cjs/data/table/hooks/useTableSelection.js +10 -4
  38. package/cjs/data/table/hooks/useTableSelection.js.map +1 -1
  39. package/cjs/data/table/index.d.ts +1 -2
  40. package/cjs/data/table/index.js +22 -12
  41. package/cjs/data/table/index.js.map +1 -1
  42. package/cjs/data/table/root/DataTable.types.d.ts +12 -10
  43. package/cjs/data/table/root/DataTableRoot.context.d.ts +5 -1
  44. package/cjs/data/table/root/DataTableRoot.context.js.map +1 -1
  45. package/cjs/data/table/root/DataTableRoot.d.ts +79 -115
  46. package/cjs/data/table/root/DataTableRoot.js +167 -39
  47. package/cjs/data/table/root/DataTableRoot.js.map +1 -1
  48. package/cjs/data/table/root/DataTableRoot.legacy.d.ts +177 -0
  49. package/cjs/data/table/root/DataTableRoot.legacy.js +104 -0
  50. package/cjs/data/table/root/DataTableRoot.legacy.js.map +1 -0
  51. package/cjs/data/table/sub-row-toggle/DataTableSubRowToggle.d.ts +6 -0
  52. package/cjs/data/table/sub-row-toggle/DataTableSubRowToggle.js +21 -0
  53. package/cjs/data/table/sub-row-toggle/DataTableSubRowToggle.js.map +1 -0
  54. package/cjs/data/table/tr/DataTableTr.js +11 -11
  55. package/cjs/data/table/tr/DataTableTr.js.map +1 -1
  56. package/cjs/form/checkbox/Checkbox.js +1 -0
  57. package/cjs/form/checkbox/Checkbox.js.map +1 -1
  58. package/cjs/form/radio/Radio.js +7 -1
  59. package/cjs/form/radio/Radio.js.map +1 -1
  60. package/cjs/modal/types.d.ts +8 -4
  61. package/cjs/utils/components/dismissablelayer/DismissableLayer.js +1 -1
  62. package/cjs/utils/components/dismissablelayer/DismissableLayer.js.map +1 -1
  63. package/cjs/utils/components/floating/Floating.d.ts +16 -1
  64. package/cjs/utils/components/floating/Floating.js +50 -13
  65. package/cjs/utils/components/floating/Floating.js.map +1 -1
  66. package/cjs/utils/components/floating-menu/Menu.js +1 -1
  67. package/cjs/utils/components/floating-menu/Menu.js.map +1 -1
  68. package/cjs/utils/helpers/create-strict-context.js +1 -1
  69. package/cjs/utils/helpers/create-strict-context.js.map +1 -1
  70. package/cjs/utils/hooks/useControllableState.d.ts +5 -5
  71. package/cjs/utils/hooks/useControllableState.js.map +1 -1
  72. package/cjs/utils/hooks/useValueAsRef.js +1 -1
  73. package/cjs/utils/hooks/useValueAsRef.js.map +1 -1
  74. package/cjs/utils-external/hooks/useId.js +1 -1
  75. package/cjs/utils-external/hooks/useId.js.map +1 -1
  76. package/esm/action-menu/ActionMenu.js +1 -1
  77. package/esm/action-menu/ActionMenu.js.map +1 -1
  78. package/esm/data/stories/Data.test-data.d.ts +24 -0
  79. package/esm/data/stories/Data.test-data.js +1607 -0
  80. package/esm/data/stories/Data.test-data.js.map +1 -0
  81. package/esm/data/table/column-header/DataTableColumnHeader.d.ts +4 -1
  82. package/esm/data/table/column-header/DataTableColumnHeader.js +4 -2
  83. package/esm/data/table/column-header/DataTableColumnHeader.js.map +1 -1
  84. package/esm/data/table/column-header/useTableColumnResize.d.ts +39 -14
  85. package/esm/data/table/column-header/useTableColumnResize.js +38 -40
  86. package/esm/data/table/column-header/useTableColumnResize.js.map +1 -1
  87. package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.d.ts +6 -0
  88. package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.js +27 -0
  89. package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.js.map +1 -0
  90. package/esm/data/table/helpers/collectTableRowEntries.d.ts +13 -5
  91. package/esm/data/table/helpers/collectTableRowEntries.js +26 -19
  92. package/esm/data/table/helpers/collectTableRowEntries.js.map +1 -1
  93. package/esm/data/table/helpers/selection/SelectionSubtreeHelper.d.ts +46 -0
  94. package/esm/data/table/helpers/selection/SelectionSubtreeHelper.js +109 -0
  95. package/esm/data/table/helpers/selection/SelectionSubtreeHelper.js.map +1 -0
  96. package/esm/data/table/helpers/selection/getMultipleSelectProps.d.ts +3 -2
  97. package/esm/data/table/helpers/selection/getMultipleSelectProps.js +43 -19
  98. package/esm/data/table/helpers/selection/getMultipleSelectProps.js.map +1 -1
  99. package/esm/data/table/helpers/selection/selection.types.d.ts +1 -0
  100. package/esm/data/table/helpers/table-keyboard.d.ts +1 -2
  101. package/esm/data/table/helpers/table-keyboard.js +1 -2
  102. package/esm/data/table/helpers/table-keyboard.js.map +1 -1
  103. package/esm/data/table/hooks/useColumnOptions.js +18 -5
  104. package/esm/data/table/hooks/useColumnOptions.js.map +1 -1
  105. package/esm/data/table/hooks/useTableDetailsPanel.d.ts +62 -0
  106. package/esm/data/table/hooks/useTableDetailsPanel.js +58 -0
  107. package/esm/data/table/hooks/useTableDetailsPanel.js.map +1 -0
  108. package/esm/data/table/hooks/useTableItems.d.ts +18 -17
  109. package/esm/data/table/hooks/useTableItems.js +27 -15
  110. package/esm/data/table/hooks/useTableItems.js.map +1 -1
  111. package/esm/data/table/hooks/useTableSelection.d.ts +6 -3
  112. package/esm/data/table/hooks/useTableSelection.js +10 -4
  113. package/esm/data/table/hooks/useTableSelection.js.map +1 -1
  114. package/esm/data/table/index.d.ts +1 -2
  115. package/esm/data/table/index.js +21 -1
  116. package/esm/data/table/index.js.map +1 -1
  117. package/esm/data/table/root/DataTable.types.d.ts +12 -10
  118. package/esm/data/table/root/DataTableRoot.context.d.ts +5 -1
  119. package/esm/data/table/root/DataTableRoot.context.js.map +1 -1
  120. package/esm/data/table/root/DataTableRoot.d.ts +79 -115
  121. package/esm/data/table/root/DataTableRoot.js +174 -37
  122. package/esm/data/table/root/DataTableRoot.js.map +1 -1
  123. package/esm/data/table/root/DataTableRoot.legacy.d.ts +177 -0
  124. package/esm/data/table/root/DataTableRoot.legacy.js +59 -0
  125. package/esm/data/table/root/DataTableRoot.legacy.js.map +1 -0
  126. package/esm/data/table/sub-row-toggle/DataTableSubRowToggle.d.ts +6 -0
  127. package/esm/data/table/sub-row-toggle/DataTableSubRowToggle.js +16 -0
  128. package/esm/data/table/sub-row-toggle/DataTableSubRowToggle.js.map +1 -0
  129. package/esm/data/table/tr/DataTableTr.js +11 -11
  130. package/esm/data/table/tr/DataTableTr.js.map +1 -1
  131. package/esm/form/checkbox/Checkbox.js +1 -0
  132. package/esm/form/checkbox/Checkbox.js.map +1 -1
  133. package/esm/form/radio/Radio.js +7 -1
  134. package/esm/form/radio/Radio.js.map +1 -1
  135. package/esm/modal/types.d.ts +8 -4
  136. package/esm/utils/components/dismissablelayer/DismissableLayer.js +1 -1
  137. package/esm/utils/components/dismissablelayer/DismissableLayer.js.map +1 -1
  138. package/esm/utils/components/floating/Floating.d.ts +16 -1
  139. package/esm/utils/components/floating/Floating.js +48 -13
  140. package/esm/utils/components/floating/Floating.js.map +1 -1
  141. package/esm/utils/components/floating-menu/Menu.js +2 -2
  142. package/esm/utils/components/floating-menu/Menu.js.map +1 -1
  143. package/esm/utils/helpers/create-strict-context.js +1 -1
  144. package/esm/utils/helpers/create-strict-context.js.map +1 -1
  145. package/esm/utils/hooks/useControllableState.d.ts +5 -5
  146. package/esm/utils/hooks/useControllableState.js.map +1 -1
  147. package/esm/utils/hooks/useValueAsRef.js +1 -1
  148. package/esm/utils/hooks/useValueAsRef.js.map +1 -1
  149. package/esm/utils-external/hooks/useId.js +1 -1
  150. package/esm/utils-external/hooks/useId.js.map +1 -1
  151. package/package.json +3 -3
  152. package/src/action-menu/ActionMenu.tsx +1 -1
  153. package/src/data/stories/Data.test-data.tsx +1703 -0
  154. package/src/data/table/column-header/DataTableColumnHeader.tsx +11 -7
  155. package/src/data/table/column-header/useTableColumnResize.ts +95 -54
  156. package/src/data/table/details-panel-row/DataTableDetailsPanelRow.tsx +53 -0
  157. package/src/data/table/helpers/collectTableRowEntries.ts +55 -31
  158. package/src/data/table/helpers/selection/SelectionSubtreeHelper.test.ts +66 -0
  159. package/src/data/table/helpers/selection/SelectionSubtreeHelper.ts +162 -0
  160. package/src/data/table/helpers/selection/getMultipleSelectProps.ts +57 -20
  161. package/src/data/table/helpers/selection/selection.types.ts +1 -0
  162. package/src/data/table/helpers/table-keyboard.ts +1 -2
  163. package/src/data/table/hooks/__tests__/useTableItems.test.ts +27 -6
  164. package/src/data/table/hooks/__tests__/useTableSelection.test.ts +182 -58
  165. package/src/data/table/hooks/useColumnOptions.ts +19 -5
  166. package/src/data/table/hooks/useTableDetailsPanel.tsx +182 -0
  167. package/src/data/table/hooks/useTableItems.ts +74 -60
  168. package/src/data/table/hooks/useTableSelection.ts +27 -12
  169. package/src/data/table/index.tsx +5 -3
  170. package/src/data/table/root/DataTable.types.ts +25 -10
  171. package/src/data/table/root/DataTableRoot.context.ts +5 -1
  172. package/src/data/table/root/DataTableRoot.legacy.tsx +297 -0
  173. package/src/data/table/root/DataTableRoot.tsx +483 -219
  174. package/src/data/table/sub-row-toggle/DataTableSubRowToggle.tsx +39 -0
  175. package/src/data/table/tr/DataTableTr.tsx +14 -13
  176. package/src/form/checkbox/Checkbox.tsx +1 -0
  177. package/src/form/radio/Radio.tsx +7 -1
  178. package/src/modal/types.ts +8 -4
  179. package/src/utils/components/dismissablelayer/DismissableLayer.tsx +1 -1
  180. package/src/utils/components/floating/Floating.tsx +56 -13
  181. package/src/utils/components/floating-menu/Menu.tsx +4 -1
  182. package/src/utils/helpers/create-strict-context.tsx +1 -1
  183. package/src/utils/hooks/useControllableState.ts +11 -8
  184. package/src/utils/hooks/useValueAsRef.ts +1 -1
  185. package/src/utils-external/hooks/useId.ts +1 -1
  186. package/cjs/data/table/hooks/useTableExpansion.d.ts +0 -29
  187. package/cjs/data/table/hooks/useTableExpansion.js.map +0 -1
  188. package/cjs/data/table/root/DataTableAuto.d.ts +0 -174
  189. package/cjs/data/table/root/DataTableAuto.js +0 -206
  190. package/cjs/data/table/root/DataTableAuto.js.map +0 -1
  191. package/esm/data/table/hooks/useTableExpansion.d.ts +0 -29
  192. package/esm/data/table/hooks/useTableExpansion.js +0 -51
  193. package/esm/data/table/hooks/useTableExpansion.js.map +0 -1
  194. package/esm/data/table/root/DataTableAuto.d.ts +0 -174
  195. package/esm/data/table/root/DataTableAuto.js +0 -170
  196. package/esm/data/table/root/DataTableAuto.js.map +0 -1
  197. package/src/data/table/hooks/__tests__/useTableExpansion.test.tsx +0 -115
  198. package/src/data/table/hooks/useTableExpansion.tsx +0 -141
  199. package/src/data/table/root/DataTableAuto.test.tsx +0 -118
  200. package/src/data/table/root/DataTableAuto.tsx +0 -603
@@ -1,170 +0,0 @@
1
- var __rest = (this && this.__rest) || function (s, e) {
2
- var t = {};
3
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
- t[p] = s[p];
5
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
- t[p[i]] = s[p[i]];
9
- }
10
- return t;
11
- };
12
- /** biome-ignore-all lint/correctness/useHookAtTopLevel: False positive because of the way forwardRef() is added */
13
- import React, { forwardRef, useMemo } from "react";
14
- import { ChevronDownIcon, ChevronRightIcon } from "@navikt/aksel-icons";
15
- import { Button } from "../../../button/index.js";
16
- import { Skeleton } from "../../../skeleton/index.js";
17
- import { useId } from "../../../utils-external/index.js";
18
- import { cl } from "../../../utils/helpers/index.js";
19
- import { useMergeRefs } from "../../../utils/hooks/index.js";
20
- import { DataTableBaseCell } from "../base-cell/DataTableBaseCell.js";
21
- import { DataTableColumnHeader } from "../column-header/DataTableColumnHeader.js";
22
- import { DataTableEmptyState } from "../empty-state/DataTableEmptyState.js";
23
- import { useColumnOptions } from "../hooks/useColumnOptions.js";
24
- import { DataTableExpansionProvider, getDataTableExpansionId, useDataTableExpansion, } from "../hooks/useTableExpansion.js";
25
- import { TableItemsProvider, useTableItems, useTableItemsContext, } from "../hooks/useTableItems.js";
26
- import { useTableKeyboardNav } from "../hooks/useTableKeyboardNav.js";
27
- import { useTableSelection, } from "../hooks/useTableSelection.js";
28
- import { useTableSort } from "../hooks/useTableSort.js";
29
- import { DataTableLoadingState } from "../loading-state/DataTableLoadingState.js";
30
- import { DataTableTbody } from "../tbody/DataTableTbody.js";
31
- import { DataTableThead } from "../thead/DataTableThead.js";
32
- import { DataTableTr } from "../tr/DataTableTr.js";
33
- import { DataTableContextProvider, useDataTableContext, } from "./DataTableRoot.context.js";
34
- function DataTableAutoInner(_a, forwardedRef) {
35
- var { className, id, rowDensity = "normal", withKeyboardNav = false, zebraStripes = false, truncateContent = true, shouldBlockNavigation, layout = "fixed", selectionMode: selectionModeProp = "none", selectedKeys, defaultSelectedKeys, onSelectionChange, disabledSelectionKeys = [], data, columnDefinitions, getRowId, stickyColumns, stickyHeader = false, sort: sortProp, defaultSort = [], onSortChange, onRowClick, emptyState, isLoading = false, loadingState, loadingRows, loadingLabel = "Laster innhold", disableRowSelectionOnClick = false, getDetailsPanelContent, isDetailsPanelExpandable, getDetailsPanelHeight, showExpandAll = false, detailsPanelRowIds, defaultDetailsPanelRowIds, onDetailsPanelChange, getSubRows, expandedSubRowIds, defaultExpandedSubRowIds, isSubRowExpandable, onExpandedSubRowIdsChange } = _a, rest = __rest(_a, ["className", "id", "rowDensity", "withKeyboardNav", "zebraStripes", "truncateContent", "shouldBlockNavigation", "layout", "selectionMode", "selectedKeys", "defaultSelectedKeys", "onSelectionChange", "disabledSelectionKeys", "data", "columnDefinitions", "getRowId", "stickyColumns", "stickyHeader", "sort", "defaultSort", "onSortChange", "onRowClick", "emptyState", "isLoading", "loadingState", "loadingRows", "loadingLabel", "disableRowSelectionOnClick", "getDetailsPanelContent", "isDetailsPanelExpandable", "getDetailsPanelHeight", "showExpandAll", "detailsPanelRowIds", "defaultDetailsPanelRowIds", "onDetailsPanelChange", "getSubRows", "expandedSubRowIds", "defaultExpandedSubRowIds", "isSubRowExpandable", "onExpandedSubRowIdsChange"]);
36
- const { tabIndex, setTableRef } = useTableKeyboardNav({
37
- enabled: withKeyboardNav,
38
- shouldBlockNavigation,
39
- });
40
- const { sortState, onSortClick } = useTableSort({
41
- defaultSort,
42
- onSortChange,
43
- sort: sortProp,
44
- });
45
- const mergedRef = useMergeRefs(forwardedRef, setTableRef);
46
- const tableItems = useTableItems({
47
- items: data,
48
- getRowId,
49
- getSubRows,
50
- expandedSubRowIds,
51
- defaultExpandedSubRowIds,
52
- isSubRowExpandable,
53
- onExpandedSubRowIdsChange,
54
- });
55
- const allRowKeys = useMemo(() => {
56
- const rowKeys = [];
57
- for (const details of tableItems.itemDetails.values()) {
58
- rowKeys.push(details.id);
59
- }
60
- return rowKeys;
61
- }, [tableItems.itemDetails]);
62
- const tableSelectionState = useTableSelection({
63
- selectionMode: selectionModeProp,
64
- selectedKeys,
65
- defaultSelectedKeys,
66
- onSelectionChange,
67
- disabledSelectionKeys,
68
- allRowKeys,
69
- });
70
- const { columns, stickySelection } = useColumnOptions(columnDefinitions, {
71
- stickyColumns,
72
- selectionMode: tableSelectionState.selection.selectionMode,
73
- });
74
- const fullWidthColSpan = columns.length +
75
- (layout === "fixed" ? 1 : 0) +
76
- (tableSelectionState.selection.selectionMode !== "none" ? 1 : 0) +
77
- (getDetailsPanelContent ? 1 : 0);
78
- const tableId = useId(id);
79
- return (React.createElement(DataTableContextProvider, { layout: layout, withKeyboardNav: withKeyboardNav, selectionState: tableSelectionState, stickySelection: stickySelection, stickyHeader: stickyHeader, tableId: tableId, showLoadingSkeletons: isLoading && loadingState == null, onRowClick: onRowClick, disableRowSelectionOnClick: disableRowSelectionOnClick, isLoading: isLoading, showLoadingOverlay: isLoading && !loadingState && !loadingRows, columns: columns },
80
- React.createElement(DataTableExpansionProvider, { detailsPanelRowIds: detailsPanelRowIds, defaultDetailsPanelRowIds: defaultDetailsPanelRowIds, onDetailsPanelChange: onDetailsPanelChange, itemDetails: tableItems.itemDetails, getDetailsPanelContent: getDetailsPanelContent, isDetailsPanelExpandable: isDetailsPanelExpandable, getDetailsPanelHeight: getDetailsPanelHeight, showExpandAll: showExpandAll },
81
- React.createElement("div", { className: "aksel-data-table__border-wrapper" },
82
- React.createElement("div", { className: "aksel-data-table__scroll-wrapper" },
83
- React.createElement("table", Object.assign({}, rest, { ref: mergedRef, className: cl("aksel-data-table", className), "data-zebra-stripes": zebraStripes, "data-truncate-content": truncateContent, "data-density": rowDensity, "data-layout": layout, "data-loading": isLoading || undefined, tabIndex: tabIndex, "aria-busy": isLoading || undefined }),
84
- React.createElement(DataTableThead, null,
85
- React.createElement(DataTableTr, null, columns.map(({ isSticky, colDef }) => {
86
- var _a, _b;
87
- const sortEntry = sortState.find((s) => s.columnId === colDef.id);
88
- const sortDirection = (_a = sortEntry === null || sortEntry === void 0 ? void 0 : sortEntry.direction) !== null && _a !== void 0 ? _a : "none";
89
- return (React.createElement(DataTableColumnHeader, { maxWidth: colDef.maxWidth, minWidth: colDef.minWidth, width: colDef.width, defaultWidth: (_b = colDef.defaultWidth) !== null && _b !== void 0 ? _b : "100%", textAlign: colDef.type === "number" ? "right" : "left", key: colDef.id, isSticky: isSticky, sortable: colDef.sortable, sortDirection: sortDirection, onSortClick: (event) => onSortClick(colDef.id, event) }, colDef.header));
90
- }))),
91
- React.createElement(TableItemsProvider, { itemDetails: tableItems.itemDetails, items: tableItems.items, onExpandedSubRowIdsChange: tableItems.onExpandedSubRowIdsChange, isSubRowExpanded: tableItems.isSubRowExpanded },
92
- React.createElement(DataTableTbody, null,
93
- React.createElement(DataTableAutoTBodyContent, { loadingState: loadingState, loadingRows: loadingRows, loadingLabel: loadingLabel, emptyState: emptyState, fullWidthColSpan: fullWidthColSpan })))))))));
94
- }
95
- function DataTableAutoTBodyContent({ loadingState, loadingRows, loadingLabel, emptyState, fullWidthColSpan, }) {
96
- const { items, itemDetails } = useTableItemsContext();
97
- const { columns, isLoading } = useDataTableContext();
98
- if (isLoading && loadingState != null) {
99
- return (React.createElement(DataTableLoadingState, { colSpan: fullWidthColSpan }, loadingState));
100
- }
101
- if (isLoading && loadingRows) {
102
- return (React.createElement(React.Fragment, null,
103
- React.createElement("tr", null,
104
- React.createElement("td", { colSpan: fullWidthColSpan, className: "aksel-sr-only" }, loadingLabel)),
105
- Array.from({ length: loadingRows }, (_, rowIndex) => (React.createElement(DataTableTr, { key: `skeleton-row-${rowIndex}`, "aria-hidden": true }, columns.map(({ isSticky, colDef }, colDefIndex) => (React.createElement(DataTableBaseCell, { textAlign: colDef.type === "number" ? "right" : "left", key: colDef.id || colDefIndex, as: colDef.isRowHeader ? "th" : "td", isSticky: isSticky },
106
- React.createElement(Skeleton, { variant: "text" })))))))));
107
- }
108
- if (items.length === 0 && emptyState !== undefined) {
109
- return (React.createElement(DataTableEmptyState, { colSpan: fullWidthColSpan }, emptyState));
110
- }
111
- const renderLoadingAnnouncement = isLoading && !loadingState && !loadingRows;
112
- return items.map((rowData) => {
113
- const details = itemDetails.get(rowData);
114
- /* Should in theory be impossible. Look about typing this? */
115
- if (!details) {
116
- return null;
117
- }
118
- const hasSubRows = details.children.length > 0;
119
- return (React.createElement(React.Fragment, { key: details.id },
120
- renderLoadingAnnouncement && (React.createElement("tr", null,
121
- React.createElement("td", { colSpan: fullWidthColSpan, className: "aksel-sr-only" }, loadingLabel))),
122
- React.createElement(DataTableTr, { rowId: details.id }, columns.map(({ isSticky, colDef }, colDefIndex) => {
123
- const renderNestedToggle = colDefIndex === 0 && hasSubRows;
124
- const renderNestedIndent = colDefIndex === 0 && (details.level > 0 || hasSubRows);
125
- const style = {
126
- "--__axc-data-table-nested-depth": details.level,
127
- };
128
- return (React.createElement(DataTableBaseCell
129
- /* TODO: Make this configurable */
130
- , {
131
- /* TODO: Make this configurable */
132
- textAlign: colDef.type === "number" ? "right" : "left", key: colDef.id || colDefIndex, as: colDef.isRowHeader ? "th" : "td", isSticky: isSticky, "data-nested": renderNestedIndent || undefined, style: style },
133
- renderNestedToggle && React.createElement(NestedRowToggle, { details: details }),
134
- colDef.cell(rowData)));
135
- })),
136
- React.createElement(DataTableExpandedRow, { rowId: details.id, rowData: rowData, fullWidthColSpan: fullWidthColSpan })));
137
- });
138
- }
139
- function NestedRowToggle({ details }) {
140
- const { isSubRowExpanded, onExpandedSubRowIdsChange } = useTableItemsContext();
141
- const subRows = details.children;
142
- const hasSubRows = subRows && subRows.length > 0;
143
- const isRowExpanded = isSubRowExpanded(details.id);
144
- return (React.createElement("div", { className: "aksel-data-table__nested-toggle" }, hasSubRows && (React.createElement(Button, { variant: "tertiary", "data-color": "neutral", size: "small", onClick: (e) => {
145
- e.stopPropagation();
146
- onExpandedSubRowIdsChange(details.id);
147
- }, "aria-expanded": isRowExpanded, "aria-label": isRowExpanded ? "Skjul under-rader" : "Vis under-rader", icon: isRowExpanded ? (React.createElement(ChevronDownIcon, { "aria-hidden": true })) : (React.createElement(ChevronRightIcon, { "aria-hidden": true })) }))));
148
- }
149
- function DataTableExpandedRow({ rowId, rowData, fullWidthColSpan, }) {
150
- const { tableId } = useDataTableContext();
151
- const { enableDetailsPanel, isExpanded, getDetailsPanelContent, getDetailsPanelHeight, } = useDataTableExpansion();
152
- if (!enableDetailsPanel) {
153
- return null;
154
- }
155
- if (!isExpanded(rowId)) {
156
- return null;
157
- }
158
- const content = getDetailsPanelContent === null || getDetailsPanelContent === void 0 ? void 0 : getDetailsPanelContent(rowData);
159
- const expansionId = getDataTableExpansionId(tableId, rowId);
160
- if (!content) {
161
- return null;
162
- }
163
- return (React.createElement("tr", null,
164
- React.createElement("td", { id: expansionId, colSpan: fullWidthColSpan },
165
- React.createElement("div", { style: { height: getDetailsPanelHeight === null || getDetailsPanelHeight === void 0 ? void 0 : getDetailsPanelHeight(rowData) } }, content))));
166
- }
167
- const DataTableAuto = forwardRef(DataTableAutoInner);
168
- export { DataTableAuto };
169
- export default DataTableAuto;
170
- //# sourceMappingURL=DataTableAuto.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DataTableAuto.js","sourceRoot":"","sources":["../../../../src/data/table/root/DataTableAuto.tsx"],"names":[],"mappings":"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"}
@@ -1,115 +0,0 @@
1
- import { act, renderHook } from "@testing-library/react";
2
- import React from "react";
3
- import { describe, expect, test, vi } from "vitest";
4
- import {
5
- DataTableExpansionProvider,
6
- useDataTableExpansion,
7
- } from "../useTableExpansion";
8
- import { useTableItems } from "../useTableItems";
9
-
10
- type TestRow = {
11
- id: number;
12
- subRows?: TestRow[];
13
- };
14
-
15
- function createWrapper(
16
- options: {
17
- onDetailsPanelChange?: (ids: (string | number)[]) => void;
18
- isDetailsPanelExpandable?: (row: TestRow) => boolean;
19
- } = {},
20
- ) {
21
- const rows: TestRow[] = [{ id: 1, subRows: [{ id: 10 }] }, { id: 2 }];
22
-
23
- return function Wrapper({ children }: { children: React.ReactNode }) {
24
- const tableItems = useTableItems({
25
- items: rows,
26
- getRowId: (row) => row.id,
27
- getSubRows: (row) => row.subRows ?? [],
28
- });
29
-
30
- return (
31
- <DataTableExpansionProvider<TestRow>
32
- itemDetails={tableItems.itemDetails}
33
- getDetailsPanelContent={(row) => row.id}
34
- isDetailsPanelExpandable={options.isDetailsPanelExpandable}
35
- onDetailsPanelChange={options.onDetailsPanelChange}
36
- >
37
- {children}
38
- </DataTableExpansionProvider>
39
- );
40
- };
41
- }
42
-
43
- describe("useTableExpansion", () => {
44
- test("does not allow toggling rows that are not expandable", () => {
45
- const onDetailsPanelChange = vi.fn();
46
-
47
- const { result } = renderHook(() => useDataTableExpansion(), {
48
- wrapper: createWrapper({
49
- onDetailsPanelChange,
50
- isDetailsPanelExpandable: (row) => row.id === 1,
51
- }),
52
- });
53
-
54
- expect(result.current.isDetailsPanelExpandable(1)).toBe(true);
55
- expect(result.current.isDetailsPanelExpandable(2)).toBe(false);
56
- expect(result.current.isDetailsPanelExpandable(10)).toBe(false);
57
-
58
- act(() => {
59
- result.current.toggleExpansion(2);
60
- });
61
-
62
- expect(result.current.isExpanded(2)).toBe(false);
63
- expect(onDetailsPanelChange).not.toHaveBeenCalled();
64
-
65
- act(() => {
66
- result.current.toggleExpansion(1);
67
- });
68
-
69
- expect(result.current.isExpanded(1)).toBe(true);
70
- expect(onDetailsPanelChange).toHaveBeenCalledWith([1]);
71
- });
72
-
73
- test("expand all only expands expandable rows", () => {
74
- const onDetailsPanelChange = vi.fn();
75
-
76
- const { result } = renderHook(() => useDataTableExpansion(), {
77
- wrapper: createWrapper({
78
- onDetailsPanelChange,
79
- isDetailsPanelExpandable: (row) => row.id === 1,
80
- }),
81
- });
82
-
83
- act(() => {
84
- result.current.toggleAll();
85
- });
86
-
87
- expect(result.current.isExpanded(1)).toBe(true);
88
- expect(result.current.isExpanded(2)).toBe(false);
89
- expect(result.current.isAllExpanded).toBe(true);
90
- expect(onDetailsPanelChange).toHaveBeenCalledWith([1]);
91
- });
92
-
93
- test("expand all only targets top-level table items", () => {
94
- const onDetailsPanelChange = vi.fn();
95
-
96
- const { result } = renderHook(() => useDataTableExpansion(), {
97
- wrapper: createWrapper({
98
- onDetailsPanelChange,
99
- }),
100
- });
101
-
102
- expect(result.current.isDetailsPanelExpandable(1)).toBe(true);
103
- expect(result.current.isDetailsPanelExpandable(2)).toBe(true);
104
- expect(result.current.isDetailsPanelExpandable(10)).toBe(false);
105
-
106
- act(() => {
107
- result.current.toggleAll();
108
- });
109
-
110
- expect(result.current.isExpanded(1)).toBe(true);
111
- expect(result.current.isExpanded(2)).toBe(true);
112
- expect(result.current.isExpanded(10)).toBe(false);
113
- expect(onDetailsPanelChange).toHaveBeenCalledWith([1, 2]);
114
- });
115
- });
@@ -1,141 +0,0 @@
1
- import React, { useCallback } from "react";
2
- import { createStrictContext } from "../../../utils/helpers";
3
- import { useControllableState } from "../../../utils/hooks";
4
- import type { ItemDetail } from "./useTableItems";
5
-
6
- type DataTableExpansionContextT = {
7
- isExpanded: (id: string | number) => boolean;
8
- isDetailsPanelExpandable: (id: string | number) => boolean;
9
- toggleExpansion: (id: string | number) => void;
10
- toggleAll: () => void;
11
- isAllExpanded: boolean;
12
- getDetailsPanelContent?: (row: unknown) => React.ReactNode;
13
- getDetailsPanelHeight?: (row: unknown) => number | "auto";
14
- showExpandAll: boolean;
15
- enableDetailsPanel: boolean;
16
- };
17
-
18
- const {
19
- Provider: DataTableExpansionContextProvider,
20
- useContext: useDataTableExpansion,
21
- } = createStrictContext<DataTableExpansionContextT>({
22
- name: "DataTableExpansionContext",
23
- errorMessage:
24
- "useDataTableExpansion must be used within a DataTableExpansionProvider.",
25
- });
26
-
27
- type TableExpansionOptions<T> = {
28
- detailsPanelRowIds?: (string | number)[];
29
- defaultDetailsPanelRowIds?: (string | number)[];
30
- onDetailsPanelChange?: (ids: (string | number)[]) => void;
31
- itemDetails: Map<T, ItemDetail<T>>;
32
- getDetailsPanelContent?: (row: T) => React.ReactNode;
33
- isDetailsPanelExpandable?: (rowData: T) => boolean;
34
- getDetailsPanelHeight?: (row: T) => number | "auto";
35
- showExpandAll?: boolean;
36
- };
37
-
38
- function getDataTableExpansionId(tableId: string, rowId: string | number) {
39
- return `${tableId}-expansion-${rowId}`;
40
- }
41
-
42
- function DataTableExpansionProvider<T>({
43
- children,
44
- detailsPanelRowIds,
45
- defaultDetailsPanelRowIds = [],
46
- onDetailsPanelChange,
47
- itemDetails,
48
- getDetailsPanelContent,
49
- isDetailsPanelExpandable,
50
- getDetailsPanelHeight,
51
- showExpandAll = false,
52
- }: TableExpansionOptions<T> & { children: React.ReactNode }) {
53
- const [expandedIds, setExpandedIds] = useControllableState({
54
- value: detailsPanelRowIds,
55
- defaultValue: defaultDetailsPanelRowIds,
56
- onChange: onDetailsPanelChange,
57
- });
58
-
59
- const expandableIds = React.useMemo(() => {
60
- if (!getDetailsPanelContent) {
61
- return new Set<string | number>();
62
- }
63
-
64
- const ids = new Set<string | number>();
65
-
66
- for (const [rowData, { id, level }] of itemDetails.entries()) {
67
- /* We only allow Master - Details pattern on top level rows */
68
- if (level > 0) {
69
- continue;
70
- }
71
-
72
- if (!isDetailsPanelExpandable || isDetailsPanelExpandable(rowData)) {
73
- ids.add(id);
74
- }
75
- }
76
-
77
- return ids;
78
- }, [getDetailsPanelContent, isDetailsPanelExpandable, itemDetails]);
79
-
80
- const isDetailsPanelExpandableById = useCallback(
81
- (id: string | number) => expandableIds.has(id),
82
- [expandableIds],
83
- );
84
-
85
- const isExpanded = useCallback(
86
- (id: string | number) =>
87
- isDetailsPanelExpandableById(id) && expandedIds.includes(id),
88
- [expandedIds, isDetailsPanelExpandableById],
89
- );
90
-
91
- const toggleExpansion = useCallback(
92
- (id: string | number) => {
93
- if (!isDetailsPanelExpandableById(id)) {
94
- return;
95
- }
96
-
97
- setExpandedIds((currentExpandedIds) =>
98
- currentExpandedIds.includes(id)
99
- ? currentExpandedIds.filter((expandedId) => expandedId !== id)
100
- : [...currentExpandedIds, id],
101
- );
102
- },
103
- [isDetailsPanelExpandableById, setExpandedIds],
104
- );
105
-
106
- const isAllExpanded =
107
- expandableIds.size > 0 &&
108
- Array.from(expandableIds).every((key) => expandedIds.includes(key));
109
-
110
- const toggleAll = useCallback(() => {
111
- setExpandedIds(isAllExpanded ? [] : Array.from(expandableIds));
112
- }, [expandableIds, isAllExpanded, setExpandedIds]);
113
-
114
- return (
115
- <DataTableExpansionContextProvider
116
- isExpanded={isExpanded}
117
- isDetailsPanelExpandable={isDetailsPanelExpandableById}
118
- toggleExpansion={toggleExpansion}
119
- toggleAll={toggleAll}
120
- isAllExpanded={isAllExpanded}
121
- getDetailsPanelContent={
122
- getDetailsPanelContent as
123
- | ((row: unknown) => React.ReactNode)
124
- | undefined
125
- }
126
- getDetailsPanelHeight={
127
- getDetailsPanelHeight as ((row: unknown) => number | "auto") | undefined
128
- }
129
- showExpandAll={showExpandAll}
130
- enableDetailsPanel={!!getDetailsPanelContent}
131
- >
132
- {children}
133
- </DataTableExpansionContextProvider>
134
- );
135
- }
136
-
137
- export {
138
- DataTableExpansionProvider,
139
- getDataTableExpansionId,
140
- useDataTableExpansion,
141
- };
@@ -1,118 +0,0 @@
1
- import { fireEvent, render, screen } from "@testing-library/react";
2
- import React from "react";
3
- import { describe, expect, test } from "vitest";
4
- import { DataTableColumnHeader } from "../column-header/DataTableColumnHeader";
5
- import type { ColumnDefinitions } from "./DataTable.types";
6
- import { DataTableAuto } from "./DataTableAuto";
7
- import { DataTable } from "./DataTableRoot";
8
-
9
- type TestRow = {
10
- id: string;
11
- name: string;
12
- subRows?: TestRow[];
13
- };
14
-
15
- const data: TestRow[] = [
16
- {
17
- id: "root",
18
- name: "Root",
19
- subRows: [{ id: "child", name: "Child" }],
20
- },
21
- ];
22
-
23
- const fallbackIdData: TestRow[] = [
24
- {
25
- id: "unused-root-1",
26
- name: "Root",
27
- subRows: [{ id: "unused-child", name: "Child" }],
28
- },
29
- {
30
- id: "unused-root-2",
31
- name: "Sibling",
32
- },
33
- ];
34
-
35
- const columns: ColumnDefinitions<TestRow> = [
36
- {
37
- id: "name",
38
- label: "Name",
39
- header: "Name",
40
- cell: (row) => row.name,
41
- },
42
- ];
43
-
44
- describe("DataTableAuto", () => {
45
- test("renders expanded child rows and includes them in select-all", () => {
46
- render(
47
- <DataTableAuto
48
- columnDefinitions={columns}
49
- data={data}
50
- getRowId={(row) => row.id}
51
- getSubRows={(row) => row.subRows ?? []}
52
- selectionMode="multiple"
53
- />,
54
- );
55
-
56
- expect(screen.queryByText("Child")).not.toBeInTheDocument();
57
-
58
- fireEvent.click(screen.getByRole("button", { name: "Vis under-rader" }));
59
-
60
- expect(screen.getByText("Child")).toBeInTheDocument();
61
- expect(screen.getAllByRole("checkbox")).toHaveLength(3);
62
-
63
- fireEvent.click(
64
- screen.getByRole("checkbox", { name: "Velg alle synlige rader" }),
65
- );
66
-
67
- expect(
68
- screen
69
- .getAllByRole("checkbox")
70
- .every((checkbox) => (checkbox as HTMLInputElement).checked),
71
- ).toBe(true);
72
- });
73
-
74
- test("select-all checks all visible rows when fallback ids are used", () => {
75
- render(
76
- <DataTableAuto
77
- columnDefinitions={columns}
78
- data={fallbackIdData}
79
- getSubRows={(row) => row.subRows ?? []}
80
- defaultExpandedSubRowIds={[0]}
81
- selectionMode="multiple"
82
- />,
83
- );
84
-
85
- fireEvent.click(
86
- screen.getByRole("checkbox", { name: "Velg alle synlige rader" }),
87
- );
88
-
89
- const rowCheckboxes = screen
90
- .getAllByRole("checkbox")
91
- .slice(1) as HTMLInputElement[];
92
-
93
- expect(rowCheckboxes).toHaveLength(3);
94
- expect(rowCheckboxes.every((checkbox) => checkbox.checked)).toBe(true);
95
- });
96
-
97
- test("does not render expansion controls in the manual table variant", () => {
98
- render(
99
- <DataTable>
100
- <DataTable.Thead>
101
- <DataTable.Tr>
102
- <DataTableColumnHeader>Name</DataTableColumnHeader>
103
- </DataTable.Tr>
104
- </DataTable.Thead>
105
- <DataTable.Tbody>
106
- <DataTable.Tr>
107
- <DataTable.Td>Root</DataTable.Td>
108
- </DataTable.Tr>
109
- </DataTable.Tbody>
110
- </DataTable>,
111
- );
112
-
113
- expect(screen.getByText("Root")).toBeInTheDocument();
114
- expect(
115
- screen.queryByRole("button", { name: /vis detaljer|skjul detaljer/i }),
116
- ).not.toBeInTheDocument();
117
- });
118
- });