@navikt/ds-react 8.10.2 → 8.10.3

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 (98) hide show
  1. package/cjs/data/table/column-header/DataTableColumnHeader.js +3 -1
  2. package/cjs/data/table/column-header/DataTableColumnHeader.js.map +1 -1
  3. package/cjs/data/table/column-header/useTableColumnResize.d.ts +24 -2
  4. package/cjs/data/table/column-header/useTableColumnResize.js +31 -15
  5. package/cjs/data/table/column-header/useTableColumnResize.js.map +1 -1
  6. package/cjs/data/table/helpers/collectTableRowEntries.d.ts +10 -2
  7. package/cjs/data/table/helpers/collectTableRowEntries.js +25 -17
  8. package/cjs/data/table/helpers/collectTableRowEntries.js.map +1 -1
  9. package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.d.ts +46 -0
  10. package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.js +112 -0
  11. package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.js.map +1 -0
  12. package/cjs/data/table/helpers/selection/getMultipleSelectProps.d.ts +3 -2
  13. package/cjs/data/table/helpers/selection/getMultipleSelectProps.js +43 -19
  14. package/cjs/data/table/helpers/selection/getMultipleSelectProps.js.map +1 -1
  15. package/cjs/data/table/helpers/selection/selection.types.d.ts +1 -0
  16. package/cjs/data/table/helpers/table-keyboard.d.ts +1 -2
  17. package/cjs/data/table/helpers/table-keyboard.js +1 -2
  18. package/cjs/data/table/helpers/table-keyboard.js.map +1 -1
  19. package/cjs/data/table/hooks/useTableExpansion.d.ts +1 -3
  20. package/cjs/data/table/hooks/useTableExpansion.js +7 -1
  21. package/cjs/data/table/hooks/useTableExpansion.js.map +1 -1
  22. package/cjs/data/table/hooks/useTableItems.d.ts +7 -3
  23. package/cjs/data/table/hooks/useTableItems.js +18 -7
  24. package/cjs/data/table/hooks/useTableItems.js.map +1 -1
  25. package/cjs/data/table/hooks/useTableSelection.d.ts +3 -2
  26. package/cjs/data/table/hooks/useTableSelection.js +5 -4
  27. package/cjs/data/table/hooks/useTableSelection.js.map +1 -1
  28. package/cjs/data/table/root/DataTable.types.d.ts +5 -4
  29. package/cjs/data/table/root/DataTableAuto.d.ts +9 -1
  30. package/cjs/data/table/root/DataTableAuto.js +50 -50
  31. package/cjs/data/table/root/DataTableAuto.js.map +1 -1
  32. package/cjs/data/table/root/DataTableRoot.js +2 -3
  33. package/cjs/data/table/root/DataTableRoot.js.map +1 -1
  34. package/cjs/form/checkbox/Checkbox.js +1 -0
  35. package/cjs/form/checkbox/Checkbox.js.map +1 -1
  36. package/cjs/form/radio/Radio.js +7 -1
  37. package/cjs/form/radio/Radio.js.map +1 -1
  38. package/cjs/modal/types.d.ts +8 -4
  39. package/esm/data/table/column-header/DataTableColumnHeader.js +3 -1
  40. package/esm/data/table/column-header/DataTableColumnHeader.js.map +1 -1
  41. package/esm/data/table/column-header/useTableColumnResize.d.ts +24 -2
  42. package/esm/data/table/column-header/useTableColumnResize.js +32 -16
  43. package/esm/data/table/column-header/useTableColumnResize.js.map +1 -1
  44. package/esm/data/table/helpers/collectTableRowEntries.d.ts +10 -2
  45. package/esm/data/table/helpers/collectTableRowEntries.js +25 -17
  46. package/esm/data/table/helpers/collectTableRowEntries.js.map +1 -1
  47. package/esm/data/table/helpers/selection/SelectionSubtreeHelper.d.ts +46 -0
  48. package/esm/data/table/helpers/selection/SelectionSubtreeHelper.js +109 -0
  49. package/esm/data/table/helpers/selection/SelectionSubtreeHelper.js.map +1 -0
  50. package/esm/data/table/helpers/selection/getMultipleSelectProps.d.ts +3 -2
  51. package/esm/data/table/helpers/selection/getMultipleSelectProps.js +43 -19
  52. package/esm/data/table/helpers/selection/getMultipleSelectProps.js.map +1 -1
  53. package/esm/data/table/helpers/selection/selection.types.d.ts +1 -0
  54. package/esm/data/table/helpers/table-keyboard.d.ts +1 -2
  55. package/esm/data/table/helpers/table-keyboard.js +1 -2
  56. package/esm/data/table/helpers/table-keyboard.js.map +1 -1
  57. package/esm/data/table/hooks/useTableExpansion.d.ts +1 -3
  58. package/esm/data/table/hooks/useTableExpansion.js +7 -1
  59. package/esm/data/table/hooks/useTableExpansion.js.map +1 -1
  60. package/esm/data/table/hooks/useTableItems.d.ts +7 -3
  61. package/esm/data/table/hooks/useTableItems.js +18 -7
  62. package/esm/data/table/hooks/useTableItems.js.map +1 -1
  63. package/esm/data/table/hooks/useTableSelection.d.ts +3 -2
  64. package/esm/data/table/hooks/useTableSelection.js +5 -4
  65. package/esm/data/table/hooks/useTableSelection.js.map +1 -1
  66. package/esm/data/table/root/DataTable.types.d.ts +5 -4
  67. package/esm/data/table/root/DataTableAuto.d.ts +9 -1
  68. package/esm/data/table/root/DataTableAuto.js +51 -51
  69. package/esm/data/table/root/DataTableAuto.js.map +1 -1
  70. package/esm/data/table/root/DataTableRoot.js +3 -4
  71. package/esm/data/table/root/DataTableRoot.js.map +1 -1
  72. package/esm/form/checkbox/Checkbox.js +1 -0
  73. package/esm/form/checkbox/Checkbox.js.map +1 -1
  74. package/esm/form/radio/Radio.js +7 -1
  75. package/esm/form/radio/Radio.js.map +1 -1
  76. package/esm/modal/types.d.ts +8 -4
  77. package/package.json +3 -3
  78. package/src/data/table/column-header/DataTableColumnHeader.tsx +5 -1
  79. package/src/data/table/column-header/useTableColumnResize.ts +73 -17
  80. package/src/data/table/helpers/collectTableRowEntries.ts +57 -25
  81. package/src/data/table/helpers/selection/SelectionSubtreeHelper.test.ts +66 -0
  82. package/src/data/table/helpers/selection/SelectionSubtreeHelper.ts +162 -0
  83. package/src/data/table/helpers/selection/getMultipleSelectProps.ts +57 -20
  84. package/src/data/table/helpers/selection/selection.types.ts +1 -0
  85. package/src/data/table/helpers/table-keyboard.ts +1 -2
  86. package/src/data/table/hooks/__tests__/useTableItems.test.ts +14 -0
  87. package/src/data/table/hooks/__tests__/useTableSelection.test.ts +132 -21
  88. package/src/data/table/hooks/useTableExpansion.tsx +8 -3
  89. package/src/data/table/hooks/useTableItems.ts +50 -27
  90. package/src/data/table/hooks/useTableSelection.ts +10 -6
  91. package/src/data/table/root/DataTable.types.ts +5 -4
  92. package/src/data/table/root/DataTableAuto.test.tsx +128 -2
  93. package/src/data/table/root/DataTableAuto.tsx +144 -135
  94. package/src/data/table/root/DataTableRoot.tsx +6 -7
  95. package/src/form/checkbox/Checkbox.tsx +1 -0
  96. package/src/form/radio/Radio.tsx +7 -1
  97. package/src/modal/types.ts +8 -4
  98. package/src/data/table/hooks/__tests__/useTableExpansion.test.tsx +0 -115
@@ -39,7 +39,8 @@ interface ModalPropsBase extends React.DialogHTMLAttributes<HTMLDialogElement> {
39
39
  /**
40
40
  * Called when the user tries to close the modal by one of the built-in methods.
41
41
  * Used if you want to ask the user for confirmation before closing.
42
- * @warning Will not always be called when pressing Esc. See `onCancel` for more info.
42
+ *
43
+ * **NB:** Will not always be called when pressing Esc. See `onCancel` for more info.
43
44
  * @returns Whether to close the modal or not
44
45
  */
45
46
  onBeforeClose?: () => boolean;
@@ -52,7 +53,8 @@ interface ModalPropsBase extends React.DialogHTMLAttributes<HTMLDialogElement> {
52
53
  onCancel?: React.ReactEventHandler<HTMLDialogElement>;
53
54
  /**
54
55
  * Whether to close when clicking on the backdrop.
55
- * @warning Users may click outside by accident. Don't use if closing can cause data loss, or the modal contains important info.
56
+ *
57
+ * **NB:** Users may click outside by accident. Don't use if closing can cause data loss, or the modal contains important info.
56
58
  * @default false
57
59
  */
58
60
  closeOnBackdropClick?: boolean;
@@ -77,13 +79,15 @@ interface ModalPropsBase extends React.DialogHTMLAttributes<HTMLDialogElement> {
77
79
  /**
78
80
  * ID of the element that labels the modal.
79
81
  * No need to set this manually if the `header` prop is used. A reference to `header.heading` will be created automatically.
80
- * @warning If not using `header`, you should set either `aria-labelledby` or `aria-label`.
82
+ *
83
+ * **NB:** If not using `header`, you should set either `aria-labelledby` or `aria-label`.
81
84
  */
82
85
  "aria-labelledby"?: string;
83
86
  /**
84
87
  * String value that labels the modal.
85
88
  * No need to set this if the `header` prop is used.
86
- * @warning If not using `header`, you should set either `aria-labelledby` or `aria-label`.
89
+ *
90
+ * **NB:** If not using `header`, you should set either `aria-labelledby` or `aria-label`.
87
91
  */
88
92
  "aria-label"?: string;
89
93
  }
@@ -26,14 +26,16 @@ const SORT_ICON = {
26
26
  * Toggling `data-block-keyboard-nav` does not work since the created "grid" does not update when toggling this attribute.
27
27
  */
28
28
  const DataTableColumnHeader = forwardRef((_a, forwardedRef) => {
29
- var { className, children, sortable = false, sortDirection = "none", onSortClick, style, width, minWidth, maxWidth, onWidthChange, defaultWidth, colSpan, rowSpan, UNSAFE_isSelection } = _a, rest = __rest(_a, ["className", "children", "sortable", "sortDirection", "onSortClick", "style", "width", "minWidth", "maxWidth", "onWidthChange", "defaultWidth", "colSpan", "rowSpan", "UNSAFE_isSelection"]);
29
+ var { className, children, sortable = false, sortDirection = "none", onSortClick, resizable = true, style, width, defaultWidth, autoWidth, minWidth, maxWidth, onWidthChange, colSpan, rowSpan, UNSAFE_isSelection } = _a, rest = __rest(_a, ["className", "children", "sortable", "sortDirection", "onSortClick", "resizable", "style", "width", "defaultWidth", "autoWidth", "minWidth", "maxWidth", "onWidthChange", "colSpan", "rowSpan", "UNSAFE_isSelection"]);
30
30
  const contentRef = React.useRef(null);
31
31
  const thRef = useRef(null);
32
32
  const mergedRef = useMergeRefs(forwardedRef, thRef);
33
33
  const resizeResult = useTableColumnResize({
34
+ resizable,
34
35
  thRef,
35
36
  width,
36
37
  defaultWidth,
38
+ autoWidth,
37
39
  minWidth,
38
40
  maxWidth,
39
41
  onWidthChange,
@@ -1 +1 @@
1
- {"version":3,"file":"DataTableColumnHeader.js","sourceRoot":"","sources":["../../../../src/data/table/column-header/DataTableColumnHeader.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DataTableColumnHeader.js","sourceRoot":"","sources":["../../../../src/data/table/column-header/DataTableColumnHeader.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,13 @@
1
1
  import { type DOMAttributes } from "react";
2
2
  type ColumnWidth = number | string;
3
3
  type ResizeProps = {
4
+ /**
5
+ * Whether the column should be resizable by the user.
6
+ *
7
+ * **NB:** This is always disabled when `layout="auto"` on the root component.
8
+ * @default true
9
+ */
10
+ resizable?: boolean;
4
11
  /**
5
12
  * Controlled width of the column.
6
13
  *
@@ -8,9 +15,20 @@ type ResizeProps = {
8
15
  */
9
16
  width?: ColumnWidth;
10
17
  /**
11
- * Initial width of the column. Only used when `width` is not set.
18
+ * Initial width of the column. Only used when `width` is not set and `resizable` is true.
12
19
  */
13
20
  defaultWidth?: ColumnWidth;
21
+ /**
22
+ * Whether the column should automatically resize to fit its content. **Runs only once.**
23
+ *
24
+ * `onWidthChange` will be called with the new size. `minWidth` and `maxWidth` will be respected.
25
+ *
26
+ * If you don't need manual resizing support and want most of the columns to resize automatically,
27
+ * consider using `layout="auto"` on the root instead for better performance.
28
+ *
29
+ * **NB:** This can cause a layout shift. Set a good initial width with `width` or `defaultWidth` to mitigate this.
30
+ */
31
+ autoWidth?: boolean;
14
32
  /**
15
33
  * Minimum width of the column.
16
34
  *
@@ -36,7 +54,11 @@ type ResizeProps = {
36
54
  */
37
55
  colSpan?: number;
38
56
  };
39
- type TableColumnResizeArgs = ResizeProps & {
57
+ type WithUndefined<T> = {
58
+ [K in keyof T]: T[K] | undefined;
59
+ };
60
+ type Unomittable<T> = WithUndefined<Required<T>>;
61
+ type TableColumnResizeArgs = Unomittable<ResizeProps> & {
40
62
  thRef: React.RefObject<HTMLTableCellElement | null>;
41
63
  };
42
64
  type TableColumnResizeResult = {
@@ -1,4 +1,4 @@
1
- import { useCallback, useRef, useState } from "react";
1
+ import { useCallback, useEffect, useRef, useState, } from "react";
2
2
  import { useControllableState } from "../../../utils/hooks/index.js";
3
3
  import { useDataTableContext } from "../root/DataTableRoot.context.js";
4
4
  /**
@@ -8,11 +8,11 @@ import { useDataTableContext } from "../root/DataTableRoot.context.js";
8
8
  * be able to set "1fr" or similar and have it fill remaining space.
9
9
  */
10
10
  function useTableColumnResize(args) {
11
- const { thRef, width: userWidth, defaultWidth, onWidthChange, maxWidth = Infinity, minWidth = 40, style, colSpan, } = args;
11
+ const { resizable, thRef, width: userWidth, defaultWidth, autoWidth, onWidthChange, maxWidth = Infinity, minWidth = 40, style, colSpan, } = args;
12
12
  const tableContext = useDataTableContext();
13
13
  const [isResizingWithKeyboard, setIsResizingWithKeyboard] = useState(false);
14
14
  const ignoreNextOnClick = useRef(false);
15
- const [width, _setWidth] = useControllableState({
15
+ const [width, setWidth] = useControllableState({
16
16
  value: userWidth,
17
17
  defaultValue: defaultWidth !== null && defaultWidth !== void 0 ? defaultWidth : (colSpan !== null && colSpan !== void 0 ? colSpan : 1) * 140,
18
18
  /**
@@ -22,13 +22,23 @@ function useTableColumnResize(args) {
22
22
  */
23
23
  onChange: onWidthChange,
24
24
  });
25
- const setWidth = useCallback((newWidth) => {
25
+ const setClampedWidth = useCallback((newWidth) => {
26
26
  var _a, _b;
27
27
  const min = (_a = parseWidth(minWidth)) !== null && _a !== void 0 ? _a : 0;
28
28
  const max = (_b = parseWidth(maxWidth)) !== null && _b !== void 0 ? _b : Infinity;
29
29
  const clamped = Math.min(Math.max(newWidth, min), max);
30
- _setWidth(clamped);
31
- }, [minWidth, maxWidth, _setWidth]);
30
+ setWidth(clamped);
31
+ }, [minWidth, maxWidth, setWidth]);
32
+ // biome-ignore lint/correctness/useExhaustiveDependencies: We only want to run this on mount and when autoWidth changes
33
+ useEffect(function autoResizeColumn() {
34
+ if (!autoWidth) {
35
+ return;
36
+ }
37
+ const newColumnWidth = getAutoColumnWidth(thRef);
38
+ if (newColumnWidth) {
39
+ setClampedWidth(newColumnWidth);
40
+ }
41
+ }, [autoWidth]);
32
42
  const handleOnClick = useCallback(() => {
33
43
  // We need to use the onClick event in order to support screen readers properly,
34
44
  // since some of them only send a mouse click when pressing enter/space.
@@ -48,26 +58,26 @@ function useTableColumnResize(args) {
48
58
  if (event.key === "ArrowLeft" || event.key === "ArrowRight") {
49
59
  event.preventDefault();
50
60
  const delta = event.key === "ArrowRight" ? 20 : -20;
51
- setWidth(currentWidth + delta);
61
+ setClampedWidth(currentWidth + delta);
52
62
  return;
53
63
  }
54
64
  if (event.key === "Home") {
55
65
  event.preventDefault();
56
- setWidth(0); // will fall back to minWidth
66
+ setClampedWidth(0); // will fall back to minWidth
57
67
  return;
58
68
  }
59
69
  if (event.key === "End") {
60
70
  event.preventDefault();
61
- const autoWidth = getAutoColumnWidth(thRef);
62
- if (autoWidth && autoWidth > currentWidth) {
63
- setWidth(autoWidth);
71
+ const newWidth = getAutoColumnWidth(thRef);
72
+ if (newWidth && newWidth > currentWidth) {
73
+ setClampedWidth(newWidth);
64
74
  }
65
75
  return;
66
76
  }
67
77
  if (event.key === "Escape") {
68
78
  setIsResizingWithKeyboard(false);
69
79
  }
70
- }, [isResizingWithKeyboard, setWidth, thRef]);
80
+ }, [isResizingWithKeyboard, setClampedWidth, thRef]);
71
81
  const startResize = useCallback((startX) => {
72
82
  var _a, _b;
73
83
  const startWidth = (_b = (_a = thRef.current) === null || _a === void 0 ? void 0 : _a.offsetWidth) !== null && _b !== void 0 ? _b : 0;
@@ -85,7 +95,7 @@ function useTableColumnResize(args) {
85
95
  setWidth(newWidth > currentWidth ? newWidth : currentWidth);
86
96
  return;
87
97
  }
88
- setWidth(newWidth);
98
+ setClampedWidth(newWidth);
89
99
  }
90
100
  function onMouseMove(e) {
91
101
  onPointerMove(e.clientX);
@@ -107,7 +117,7 @@ function useTableColumnResize(args) {
107
117
  document.addEventListener("mouseup", cleanup, { once: true });
108
118
  document.addEventListener("touchend", cleanup, { once: true });
109
119
  document.addEventListener("touchcancel", cleanup, { once: true });
110
- }, [maxWidth, minWidth, setWidth, thRef]);
120
+ }, [maxWidth, minWidth, setWidth, setClampedWidth, thRef]);
111
121
  const handleMouseDown = useCallback((event) => {
112
122
  startResize(event.clientX);
113
123
  }, [startResize]);
@@ -118,15 +128,21 @@ function useTableColumnResize(args) {
118
128
  const handleDoubleClick = useCallback(() => {
119
129
  const newColumnWidth = getAutoColumnWidth(thRef);
120
130
  if (newColumnWidth) {
121
- setWidth(newColumnWidth);
131
+ setClampedWidth(newColumnWidth);
122
132
  }
123
- }, [setWidth, thRef]);
133
+ }, [setClampedWidth, thRef]);
124
134
  if (tableContext.layout !== "fixed") {
125
135
  return {
126
136
  style,
127
137
  enabled: false,
128
138
  };
129
139
  }
140
+ if (!resizable) {
141
+ return {
142
+ style: Object.assign(Object.assign({}, style), { width }),
143
+ enabled: false,
144
+ };
145
+ }
130
146
  return {
131
147
  style: Object.assign(Object.assign({}, style), { width }),
132
148
  resizeHandlerProps: {
@@ -1 +1 @@
1
- {"version":3,"file":"useTableColumnResize.js","sourceRoot":"","sources":["../../../../src/data/table/column-header/useTableColumnResize.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useTableColumnResize.js","sourceRoot":"","sources":["../../../../src/data/table/column-header/useTableColumnResize.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,14 @@ interface ItemDetail<T> {
11
11
  parent: null | T;
12
12
  children: readonly T[];
13
13
  }
14
- declare function collectTableRowEntries<T>({ items, getRowId, getSubRows, isSubRowExpandable, }: CollectTableRowEntriesArgs<T>): Map<T, ItemDetail<T>>;
14
+ type CollectTableRowEntriesReturn<T> = {
15
+ itemDetails: Map<T, ItemDetail<T>>;
16
+ /**
17
+ * Direct child ids for each row, used to traverse nested selection groups
18
+ * without storing every descendant list on each ancestor.
19
+ */
20
+ childRowIdsById: Map<TableRowEntryId, TableRowEntryId[]>;
21
+ };
22
+ declare function collectTableRowEntries<T>({ items, getRowId, getSubRows, isSubRowExpandable, }: CollectTableRowEntriesArgs<T>): CollectTableRowEntriesReturn<T>;
15
23
  export { collectTableRowEntries };
16
- export type { CollectTableRowEntriesArgs, TableRowEntryId, ItemDetail };
24
+ export type { CollectTableRowEntriesArgs, CollectTableRowEntriesReturn, TableRowEntryId, ItemDetail, };
@@ -1,25 +1,33 @@
1
1
  function collectTableRowEntries({ items, getRowId, getSubRows, isSubRowExpandable, }) {
2
2
  const itemDetailsMap = new Map();
3
- const traverseRows = (rows, level, parent, parentId) => {
3
+ const childRowIdsById = new Map();
4
+ const traverseRow = (rowData, rowIndex, level, parent, parentId) => {
4
5
  var _a, _b, _c;
5
- for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {
6
- const rowData = rows[rowIndex];
7
- const rowId = (_a = getRowId === null || getRowId === void 0 ? void 0 : getRowId(rowData, rowIndex)) !== null && _a !== void 0 ? _a : (parentId == null ? rowIndex : `${parentId}-${rowIndex}`);
8
- const isRowExpandable = (_b = isSubRowExpandable === null || isSubRowExpandable === void 0 ? void 0 : isSubRowExpandable(rowData)) !== null && _b !== void 0 ? _b : true;
9
- const children = (_c = (isRowExpandable ? getSubRows === null || getSubRows === void 0 ? void 0 : getSubRows(rowData) : [])) !== null && _c !== void 0 ? _c : [];
10
- itemDetailsMap.set(rowData, {
11
- id: rowId,
12
- level,
13
- parent,
14
- children,
15
- });
16
- if (children.length > 0) {
17
- traverseRows(children, level + 1, rowData, rowId);
18
- }
6
+ const rowId = (_a = getRowId === null || getRowId === void 0 ? void 0 : getRowId(rowData, rowIndex)) !== null && _a !== void 0 ? _a : (parentId == null ? rowIndex : `${parentId}-${rowIndex}`);
7
+ const isRowExpandable = (_b = isSubRowExpandable === null || isSubRowExpandable === void 0 ? void 0 : isSubRowExpandable(rowData)) !== null && _b !== void 0 ? _b : true;
8
+ const children = (_c = (isRowExpandable ? getSubRows === null || getSubRows === void 0 ? void 0 : getSubRows(rowData) : [])) !== null && _c !== void 0 ? _c : [];
9
+ itemDetailsMap.set(rowData, {
10
+ id: rowId,
11
+ level,
12
+ parent,
13
+ children,
14
+ });
15
+ const childRowIds = [];
16
+ for (let childIndex = 0; childIndex < children.length; childIndex++) {
17
+ const childRow = children[childIndex];
18
+ const childRowId = traverseRow(childRow, childIndex, level + 1, rowData, rowId);
19
+ childRowIds.push(childRowId);
19
20
  }
21
+ childRowIdsById.set(rowId, childRowIds);
22
+ return rowId;
23
+ };
24
+ for (let rowIndex = 0; rowIndex < items.length; rowIndex++) {
25
+ traverseRow(items[rowIndex], rowIndex, 0, null);
26
+ }
27
+ return {
28
+ itemDetails: itemDetailsMap,
29
+ childRowIdsById,
20
30
  };
21
- traverseRows(items, 0, null);
22
- return itemDetailsMap;
23
31
  }
24
32
  export { collectTableRowEntries };
25
33
  //# sourceMappingURL=collectTableRowEntries.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"collectTableRowEntries.js","sourceRoot":"","sources":["../../../../src/data/table/helpers/collectTableRowEntries.ts"],"names":[],"mappings":"AAgBA,SAAS,sBAAsB,CAAI,EACjC,KAAK,EACL,QAAQ,EACR,UAAU,EACV,kBAAkB,GACY;IAC9B,MAAM,cAAc,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEnD,MAAM,YAAY,GAAG,CACnB,IAAS,EACT,KAAa,EACb,MAAgB,EAChB,QAA0B,EAC1B,EAAE;;QACF,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;YAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM,KAAK,GACT,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,OAAO,EAAE,QAAQ,CAAC,mCAC7B,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC,CAAC;YAC5D,MAAM,eAAe,GAAG,MAAA,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAG,OAAO,CAAC,mCAAI,IAAI,CAAC;YAC9D,MAAM,QAAQ,GAAG,MAAA,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,mCAAI,EAAE,CAAC;YAEtE,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE;gBAC1B,EAAE,EAAE,KAAK;gBACT,KAAK;gBACL,MAAM;gBACN,QAAQ;aACT,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,YAAY,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,YAAY,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAE7B,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"collectTableRowEntries.js","sourceRoot":"","sources":["../../../../src/data/table/helpers/collectTableRowEntries.ts"],"names":[],"mappings":"AAyBA,SAAS,sBAAsB,CAAI,EACjC,KAAK,EACL,QAAQ,EACR,UAAU,EACV,kBAAkB,GACY;IAC9B,MAAM,cAAc,GAAG,IAAI,GAAG,EAAoB,CAAC;IACnD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAsC,CAAC;IAEtE,MAAM,WAAW,GAAG,CAClB,OAAU,EACV,QAAgB,EAChB,KAAa,EACb,MAAgB,EAChB,QAA0B,EACT,EAAE;;QACnB,MAAM,KAAK,GACT,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,OAAO,EAAE,QAAQ,CAAC,mCAC7B,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC,CAAC;QAC5D,MAAM,eAAe,GAAG,MAAA,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAG,OAAO,CAAC,mCAAI,IAAI,CAAC;QAC9D,MAAM,QAAQ,GAAG,MAAA,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,mCAAI,EAAE,CAAC;QAEtE,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE;YAC1B,EAAE,EAAE,KAAK;YACT,KAAK;YACL,MAAM;YACN,QAAQ;SACT,CAAC,CAAC;QAEH,MAAM,WAAW,GAAsB,EAAE,CAAC;QAE1C,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC;YACpE,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;YACtC,MAAM,UAAU,GAAG,WAAW,CAC5B,QAAQ,EACR,UAAU,EACV,KAAK,GAAG,CAAC,EACT,OAAO,EACP,KAAK,CACN,CAAC;YACF,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC;QAED,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAExC,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;QAC3D,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,OAAO;QACL,WAAW,EAAE,cAAc;QAC3B,eAAe;KAChB,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,46 @@
1
+ type SelectionKey = string | number;
2
+ type SelectionStats = {
3
+ selectableCount: number;
4
+ selectedCount: number;
5
+ };
6
+ type SelectionSubtreeHelperArgs = {
7
+ childRowIdsById?: Map<SelectionKey, SelectionKey[]>;
8
+ disabledKeysSet: Set<SelectionKey>;
9
+ selectedKeysSet: Set<SelectionKey>;
10
+ };
11
+ /**
12
+ * Helper class for managing selection state in a tree structure.
13
+ * - It provides methods to get selectable keys in a subtree
14
+ * - Compute selection statistics for a subtree
15
+ * - Determine if a subtree is fully selected.
16
+ *
17
+ * Results of selection statistics are cached to optimize performance for repeated calls on the same subtree.
18
+ */
19
+ declare class SelectionSubtreeHelper {
20
+ private childRowIdsById;
21
+ private disabledKeysSet;
22
+ private selectedKeysSet;
23
+ private selectionStatsCache;
24
+ constructor({ childRowIdsById, disabledKeysSet, selectedKeysSet, }: SelectionSubtreeHelperArgs);
25
+ getSelectableKeys(rootIds: SelectionKey[]): SelectionKey[];
26
+ /**
27
+ * Returns the number of selectable and selected rows in the subtree of the given root ID.
28
+ * Results are cached after the first computation to optimize repeated calls for the same root ID.
29
+ *
30
+ * The selectable count excludes disabled rows, and the selected count excludes disabled rows that are selected.
31
+ * The method is implemented iteratively to handle deep trees without hitting call stack limits.
32
+ *
33
+ * How it works:
34
+ * - Manually add root ID to stack to get processing going. Note that the ready-flag is `false`.
35
+ * - Pop stack until empty. For each entry:
36
+ * - - If entry is already cached, skip it.
37
+ * - - If entry is not ready, push it back as ready and push all its children as not ready.
38
+ * - - If entry is ready, compute its stats based on its own state and the stats of its children, then cache the result.
39
+ * - Since we add all the children to the stack after pushing element with ready: true, while "popping" the stack we will always encounter the children before their parent is ready, ensuring that the stats for all children are computed and cached before computing the stats for their parent.
40
+ * - Finally, return the cached stats for the root ID.
41
+ */
42
+ getSelectionStats(rootId: SelectionKey): SelectionStats;
43
+ isFullySelected(rootId: SelectionKey): boolean;
44
+ }
45
+ export { SelectionSubtreeHelper };
46
+ export type { SelectionKey, SelectionStats, SelectionSubtreeHelperArgs };
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Helper class for managing selection state in a tree structure.
3
+ * - It provides methods to get selectable keys in a subtree
4
+ * - Compute selection statistics for a subtree
5
+ * - Determine if a subtree is fully selected.
6
+ *
7
+ * Results of selection statistics are cached to optimize performance for repeated calls on the same subtree.
8
+ */
9
+ class SelectionSubtreeHelper {
10
+ constructor({ childRowIdsById, disabledKeysSet, selectedKeysSet, }) {
11
+ this.selectionStatsCache = new Map();
12
+ this.childRowIdsById = childRowIdsById !== null && childRowIdsById !== void 0 ? childRowIdsById : new Map();
13
+ this.disabledKeysSet = disabledKeysSet;
14
+ this.selectedKeysSet = selectedKeysSet;
15
+ }
16
+ getSelectableKeys(rootIds) {
17
+ var _a;
18
+ const visitedKeys = new Set();
19
+ const selectableKeys = [];
20
+ const stack = [...rootIds].reverse();
21
+ while (stack.length > 0) {
22
+ const key = stack.pop();
23
+ if (key == null || visitedKeys.has(key)) {
24
+ continue;
25
+ }
26
+ visitedKeys.add(key);
27
+ if (!this.disabledKeysSet.has(key)) {
28
+ selectableKeys.push(key);
29
+ }
30
+ const childRowIds = (_a = this.childRowIdsById.get(key)) !== null && _a !== void 0 ? _a : [];
31
+ for (let childIndex = childRowIds.length - 1; childIndex >= 0; childIndex--) {
32
+ stack.push(childRowIds[childIndex]);
33
+ }
34
+ }
35
+ return selectableKeys;
36
+ }
37
+ /**
38
+ * Returns the number of selectable and selected rows in the subtree of the given root ID.
39
+ * Results are cached after the first computation to optimize repeated calls for the same root ID.
40
+ *
41
+ * The selectable count excludes disabled rows, and the selected count excludes disabled rows that are selected.
42
+ * The method is implemented iteratively to handle deep trees without hitting call stack limits.
43
+ *
44
+ * How it works:
45
+ * - Manually add root ID to stack to get processing going. Note that the ready-flag is `false`.
46
+ * - Pop stack until empty. For each entry:
47
+ * - - If entry is already cached, skip it.
48
+ * - - If entry is not ready, push it back as ready and push all its children as not ready.
49
+ * - - If entry is ready, compute its stats based on its own state and the stats of its children, then cache the result.
50
+ * - Since we add all the children to the stack after pushing element with ready: true, while "popping" the stack we will always encounter the children before their parent is ready, ensuring that the stats for all children are computed and cached before computing the stats for their parent.
51
+ * - Finally, return the cached stats for the root ID.
52
+ */
53
+ getSelectionStats(rootId) {
54
+ var _a, _b, _c;
55
+ const cachedStats = this.selectionStatsCache.get(rootId);
56
+ if (cachedStats) {
57
+ return cachedStats;
58
+ }
59
+ /* Compute subtree totals iteratively so deep trees do not depend on call stack depth. */
60
+ const stack = [
61
+ { key: rootId, ready: false },
62
+ ];
63
+ while (stack.length > 0) {
64
+ const entry = stack.pop();
65
+ if (!entry) {
66
+ continue;
67
+ }
68
+ if (this.selectionStatsCache.has(entry.key)) {
69
+ continue;
70
+ }
71
+ if (entry.ready) {
72
+ let selectableCount = this.disabledKeysSet.has(entry.key) ? 0 : 1;
73
+ let selectedCount = !this.disabledKeysSet.has(entry.key) &&
74
+ this.selectedKeysSet.has(entry.key)
75
+ ? 1
76
+ : 0;
77
+ for (const childKey of (_a = this.childRowIdsById.get(entry.key)) !== null && _a !== void 0 ? _a : []) {
78
+ const childStats = this.selectionStatsCache.get(childKey);
79
+ if (!childStats) {
80
+ continue;
81
+ }
82
+ selectableCount += childStats.selectableCount;
83
+ selectedCount += childStats.selectedCount;
84
+ }
85
+ this.selectionStatsCache.set(entry.key, {
86
+ selectableCount,
87
+ selectedCount,
88
+ });
89
+ continue;
90
+ }
91
+ stack.push({ key: entry.key, ready: true });
92
+ for (const childKey of (_b = this.childRowIdsById.get(entry.key)) !== null && _b !== void 0 ? _b : []) {
93
+ if (!this.selectionStatsCache.has(childKey)) {
94
+ stack.push({ key: childKey, ready: false });
95
+ }
96
+ }
97
+ }
98
+ return ((_c = this.selectionStatsCache.get(rootId)) !== null && _c !== void 0 ? _c : {
99
+ selectableCount: 0,
100
+ selectedCount: 0,
101
+ });
102
+ }
103
+ isFullySelected(rootId) {
104
+ const stats = this.getSelectionStats(rootId);
105
+ return (stats.selectableCount > 0 && stats.selectedCount === stats.selectableCount);
106
+ }
107
+ }
108
+ export { SelectionSubtreeHelper };
109
+ //# sourceMappingURL=SelectionSubtreeHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectionSubtreeHelper.js","sourceRoot":"","sources":["../../../../../src/data/table/helpers/selection/SelectionSubtreeHelper.ts"],"names":[],"mappings":"AAaA;;;;;;;GAOG;AACH,MAAM,sBAAsB;IAM1B,YAAY,EACV,eAAe,EACf,eAAe,EACf,eAAe,GACY;QANrB,wBAAmB,GAAG,IAAI,GAAG,EAAgC,CAAC;QAOpE,IAAI,CAAC,eAAe,GAAG,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,IAAI,GAAG,EAAE,CAAC;QACpD,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IAED,iBAAiB,CAAC,OAAuB;;QACvC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAgB,CAAC;QAC5C,MAAM,cAAc,GAAmB,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QAErC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;YAExB,IAAI,GAAG,IAAI,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxC,SAAS;YACX,CAAC;YAED,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAErB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;YAED,MAAM,WAAW,GAAG,MAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,mCAAI,EAAE,CAAC;YAExD,KACE,IAAI,UAAU,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EACvC,UAAU,IAAI,CAAC,EACf,UAAU,EAAE,EACZ,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,iBAAiB,CAAC,MAAoB;;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEzD,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,yFAAyF;QACzF,MAAM,KAAK,GAA4C;YACrD,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;SAC9B,CAAC;QAEF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;YAE1B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,SAAS;YACX,CAAC;YAED,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5C,SAAS;YACX,CAAC;YAED,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,IAAI,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClE,IAAI,aAAa,GACf,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;oBACpC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;oBACjC,CAAC,CAAC,CAAC;oBACH,CAAC,CAAC,CAAC,CAAC;gBAER,KAAK,MAAM,QAAQ,IAAI,MAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAI,EAAE,EAAE,CAAC;oBACjE,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAE1D,IAAI,CAAC,UAAU,EAAE,CAAC;wBAChB,SAAS;oBACX,CAAC;oBAED,eAAe,IAAI,UAAU,CAAC,eAAe,CAAC;oBAC9C,aAAa,IAAI,UAAU,CAAC,aAAa,CAAC;gBAC5C,CAAC;gBAED,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;oBACtC,eAAe;oBACf,aAAa;iBACd,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAE5C,KAAK,MAAM,QAAQ,IAAI,MAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAI,EAAE,EAAE,CAAC;gBACjE,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,CACL,MAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,mCAAI;YACtC,eAAe,EAAE,CAAC;YAClB,aAAa,EAAE,CAAC;SACjB,CACF,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,MAAoB;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE7C,OAAO,CACL,KAAK,CAAC,eAAe,GAAG,CAAC,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,eAAe,CAC3E,CAAC;IACJ,CAAC;CACF;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
@@ -4,9 +4,10 @@ type GetMultipleSelectPropsArgs = {
4
4
  selectedKeys: (string | number)[];
5
5
  setSelectedKeys: (keys: (string | number)[]) => void;
6
6
  disabledKeysSet: Set<string | number>;
7
- allRowKeys: (string | number)[];
7
+ visibleRowIds: (string | number)[];
8
+ childRowIdsById?: Map<string | number, (string | number)[]>;
8
9
  };
9
- declare function getMultipleSelectProps({ selectedKeysSet, selectedKeys, setSelectedKeys, disabledKeysSet, allRowKeys, }: GetMultipleSelectPropsArgs): {
10
+ declare function getMultipleSelectProps({ selectedKeysSet, selectedKeys, setSelectedKeys, disabledKeysSet, visibleRowIds, childRowIdsById, }: GetMultipleSelectPropsArgs): {
10
11
  getTheadCheckboxProps: () => CheckboxInputProps;
11
12
  getRowCheckboxProps: (key: string | number) => CheckboxInputProps;
12
13
  toggleSelection: (key: string | number) => void;
@@ -1,31 +1,50 @@
1
- function getMultipleSelectProps({ selectedKeysSet, selectedKeys, setSelectedKeys, disabledKeysSet, allRowKeys, }) {
2
- const allRowKeysSet = new Set(allRowKeys);
3
- const selectableKeys = allRowKeys.filter((k) => !disabledKeysSet.has(k));
4
- const selectedSelectableCount = selectableKeys.filter((k) => selectedKeysSet.has(k)).length;
5
- const allSelectableSelected = selectableKeys.length > 0 &&
6
- selectedSelectableCount === selectableKeys.length;
1
+ import { SelectionSubtreeHelper } from "./SelectionSubtreeHelper.js";
2
+ function getMultipleSelectProps({ selectedKeysSet, selectedKeys, setSelectedKeys, disabledKeysSet, visibleRowIds, childRowIdsById, }) {
3
+ const subtreeHelper = new SelectionSubtreeHelper({
4
+ childRowIdsById,
5
+ disabledKeysSet,
6
+ selectedKeysSet,
7
+ });
8
+ // Header selection traverses the visible roots and skips already visited
9
+ // descendants, so expanded trees stay linear in the number of rows.
10
+ const headerSelectableKeys = subtreeHelper.getSelectableKeys(visibleRowIds);
11
+ const headerSelectableKeysSet = new Set(headerSelectableKeys);
12
+ const selectedSelectableCount = headerSelectableKeys.filter((k) => selectedKeysSet.has(k)).length;
13
+ const allSelectableSelected = headerSelectableKeys.length > 0 &&
14
+ selectedSelectableCount === headerSelectableKeys.length;
7
15
  const indeterminate = selectedSelectableCount > 0 &&
8
- selectedSelectableCount < selectableKeys.length;
9
- const selectedKeysNotInView = selectedKeys.filter((k) => !allRowKeysSet.has(k));
16
+ selectedSelectableCount < headerSelectableKeys.length;
17
+ const selectedKeysNotInView = selectedKeys.filter((k) => !headerSelectableKeysSet.has(k));
10
18
  const disabledSelected = selectedKeys.filter((k) => disabledKeysSet.has(k));
11
- const preservedKeys = [...selectedKeysNotInView, ...disabledSelected];
19
+ const preservedKeys = [
20
+ ...new Set([...selectedKeysNotInView, ...disabledSelected]),
21
+ ];
22
+ const isGroupFullySelected = (key) => {
23
+ const groupStats = subtreeHelper.getSelectionStats(key);
24
+ return (groupStats.selectableCount > 0 &&
25
+ groupStats.selectedCount === groupStats.selectableCount);
26
+ };
12
27
  const handleToggleAll = () => {
13
28
  if (allSelectableSelected) {
14
29
  setSelectedKeys(preservedKeys);
15
30
  }
16
31
  else {
17
- setSelectedKeys([...new Set([...preservedKeys, ...selectableKeys])]);
32
+ setSelectedKeys([
33
+ ...new Set([...preservedKeys, ...headerSelectableKeys]),
34
+ ]);
18
35
  }
19
36
  };
20
37
  const handleToggleRow = (key) => {
21
38
  if (disabledKeysSet.has(key)) {
22
39
  return;
23
40
  }
24
- if (selectedKeysSet.has(key)) {
25
- setSelectedKeys(selectedKeys.filter((k) => k !== key));
41
+ const groupKeys = subtreeHelper.getSelectableKeys([key]);
42
+ if (isGroupFullySelected(key)) {
43
+ const groupKeysSet = new Set(groupKeys);
44
+ setSelectedKeys(selectedKeys.filter((selectedKey) => !groupKeysSet.has(selectedKey)));
26
45
  }
27
46
  else {
28
- setSelectedKeys([...selectedKeys, key]);
47
+ setSelectedKeys([...new Set([...selectedKeys, ...groupKeys])]);
29
48
  }
30
49
  };
31
50
  return {
@@ -33,13 +52,18 @@ function getMultipleSelectProps({ selectedKeysSet, selectedKeys, setSelectedKeys
33
52
  onChange: handleToggleAll,
34
53
  checked: allSelectableSelected,
35
54
  indeterminate,
36
- disabled: selectableKeys.length === 0,
37
- }),
38
- getRowCheckboxProps: (key) => ({
39
- onChange: () => handleToggleRow(key),
40
- checked: selectedKeysSet.has(key),
41
- disabled: disabledKeysSet.has(key),
55
+ disabled: headerSelectableKeys.length === 0,
42
56
  }),
57
+ getRowCheckboxProps: (key) => {
58
+ const groupStats = subtreeHelper.getSelectionStats(key);
59
+ return {
60
+ onChange: () => handleToggleRow(key),
61
+ checked: isGroupFullySelected(key),
62
+ indeterminate: groupStats.selectedCount > 0 &&
63
+ groupStats.selectedCount < groupStats.selectableCount,
64
+ disabled: disabledKeysSet.has(key),
65
+ };
66
+ },
43
67
  toggleSelection: handleToggleRow,
44
68
  };
45
69
  }