@navikt/ds-react 8.10.5 → 8.10.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/cjs/data/data-grid/index.d.ts +2 -0
  2. package/cjs/data/data-grid/index.js +7 -0
  3. package/cjs/data/data-grid/index.js.map +1 -0
  4. package/cjs/data/data-grid/root/DataGridRoot.context.d.ts +11 -0
  5. package/cjs/data/data-grid/root/DataGridRoot.context.js +11 -0
  6. package/cjs/data/data-grid/root/DataGridRoot.context.js.map +1 -0
  7. package/cjs/data/data-grid/root/DataGridRoot.d.ts +38 -0
  8. package/cjs/data/data-grid/root/DataGridRoot.js +68 -0
  9. package/cjs/data/data-grid/root/DataGridRoot.js.map +1 -0
  10. package/cjs/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js +0 -1
  11. package/cjs/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js.map +1 -1
  12. package/cjs/data/drag-and-drop/root/DragAndDropRoot.d.ts +5 -5
  13. package/cjs/data/drag-and-drop/root/DragAndDropRoot.js +4 -27
  14. package/cjs/data/drag-and-drop/root/DragAndDropRoot.js.map +1 -1
  15. package/cjs/data/stories/Data.test-data.d.ts +2 -5
  16. package/cjs/data/stories/Data.test-data.js +30 -38
  17. package/cjs/data/stories/Data.test-data.js.map +1 -1
  18. package/cjs/data/table/base-cell/DataTableBaseCell.d.ts +15 -15
  19. package/cjs/data/table/base-cell/DataTableBaseCell.js +4 -8
  20. package/cjs/data/table/base-cell/DataTableBaseCell.js.map +1 -1
  21. package/cjs/data/table/column-header/DataTableColumnHeader.d.ts +24 -6
  22. package/cjs/data/table/column-header/DataTableColumnHeader.js +22 -27
  23. package/cjs/data/table/column-header/DataTableColumnHeader.js.map +1 -1
  24. package/cjs/data/table/column-header/useTableColumnResize.d.ts +19 -29
  25. package/cjs/data/table/column-header/useTableColumnResize.js +24 -22
  26. package/cjs/data/table/column-header/useTableColumnResize.js.map +1 -1
  27. package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.d.ts +1 -1
  28. package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.js +2 -2
  29. package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.js.map +1 -1
  30. package/cjs/data/table/helpers/collectTableRowEntries.d.ts +2 -2
  31. package/cjs/data/table/helpers/selection/getMultipleSelectProps.d.ts +13 -11
  32. package/cjs/data/table/helpers/selection/getMultipleSelectProps.js +43 -53
  33. package/cjs/data/table/helpers/selection/getMultipleSelectProps.js.map +1 -1
  34. package/cjs/data/table/helpers/selection/getSingleSelectProps.d.ts +9 -8
  35. package/cjs/data/table/helpers/selection/getSingleSelectProps.js +23 -10
  36. package/cjs/data/table/helpers/selection/getSingleSelectProps.js.map +1 -1
  37. package/cjs/data/table/helpers/selection/selection.types.d.ts +19 -19
  38. package/cjs/data/table/helpers/selection/selection.utils.d.ts +21 -0
  39. package/cjs/data/table/helpers/selection/selection.utils.js +46 -0
  40. package/cjs/data/table/helpers/selection/selection.utils.js.map +1 -0
  41. package/cjs/data/table/hooks/useColumnOptions.d.ts +16 -5
  42. package/cjs/data/table/hooks/useColumnOptions.js +26 -8
  43. package/cjs/data/table/hooks/useColumnOptions.js.map +1 -1
  44. package/cjs/data/table/hooks/useTableDetailsPanel.d.ts +10 -13
  45. package/cjs/data/table/hooks/useTableDetailsPanel.js +6 -5
  46. package/cjs/data/table/hooks/useTableDetailsPanel.js.map +1 -1
  47. package/cjs/data/table/hooks/useTableItems.d.ts +29 -15
  48. package/cjs/data/table/hooks/useTableItems.js +2 -12
  49. package/cjs/data/table/hooks/useTableItems.js.map +1 -1
  50. package/cjs/data/table/hooks/useTableKeyboardNav.d.ts +1 -6
  51. package/cjs/data/table/hooks/useTableKeyboardNav.js +1 -4
  52. package/cjs/data/table/hooks/useTableKeyboardNav.js.map +1 -1
  53. package/cjs/data/table/hooks/useTableSelection.d.ts +6 -6
  54. package/cjs/data/table/hooks/useTableSelection.js +13 -13
  55. package/cjs/data/table/hooks/useTableSelection.js.map +1 -1
  56. package/cjs/data/table/hooks/useTableSort.d.ts +2 -2
  57. package/cjs/data/table/hooks/useTableSort.js +4 -5
  58. package/cjs/data/table/hooks/useTableSort.js.map +1 -1
  59. package/cjs/data/table/root/DataTable.types.d.ts +22 -10
  60. package/cjs/data/table/root/DataTableRoot.context.d.ts +13 -7
  61. package/cjs/data/table/root/DataTableRoot.context.js.map +1 -1
  62. package/cjs/data/table/root/DataTableRoot.d.ts +49 -72
  63. package/cjs/data/table/root/DataTableRoot.js +54 -66
  64. package/cjs/data/table/root/DataTableRoot.js.map +1 -1
  65. package/cjs/data/table/root/DataTableRoot.legacy.d.ts +2 -7
  66. package/cjs/data/table/root/DataTableRoot.legacy.js +17 -3
  67. package/cjs/data/table/root/DataTableRoot.legacy.js.map +1 -1
  68. package/cjs/data/table/sub-row-toggle/DataTableSubRowToggle.js +4 -4
  69. package/cjs/data/table/sub-row-toggle/DataTableSubRowToggle.js.map +1 -1
  70. package/cjs/data/table/tbody/DataTableTbody.js +4 -2
  71. package/cjs/data/table/tbody/DataTableTbody.js.map +1 -1
  72. package/cjs/data/table/tr/DataTableTr.d.ts +5 -3
  73. package/cjs/data/table/tr/DataTableTr.js +36 -23
  74. package/cjs/data/table/tr/DataTableTr.js.map +1 -1
  75. package/cjs/table/ColumnHeader.js +2 -1
  76. package/cjs/table/ColumnHeader.js.map +1 -1
  77. package/esm/data/data-grid/index.d.ts +2 -0
  78. package/esm/data/data-grid/index.js +3 -0
  79. package/esm/data/data-grid/index.js.map +1 -0
  80. package/esm/data/data-grid/root/DataGridRoot.context.d.ts +11 -0
  81. package/esm/data/data-grid/root/DataGridRoot.context.js +7 -0
  82. package/esm/data/data-grid/root/DataGridRoot.context.js.map +1 -0
  83. package/esm/data/data-grid/root/DataGridRoot.d.ts +38 -0
  84. package/esm/data/data-grid/root/DataGridRoot.js +32 -0
  85. package/esm/data/data-grid/root/DataGridRoot.js.map +1 -0
  86. package/esm/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js +0 -1
  87. package/esm/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js.map +1 -1
  88. package/esm/data/drag-and-drop/root/DragAndDropRoot.d.ts +5 -5
  89. package/esm/data/drag-and-drop/root/DragAndDropRoot.js +4 -27
  90. package/esm/data/drag-and-drop/root/DragAndDropRoot.js.map +1 -1
  91. package/esm/data/stories/Data.test-data.d.ts +2 -5
  92. package/esm/data/stories/Data.test-data.js +30 -38
  93. package/esm/data/stories/Data.test-data.js.map +1 -1
  94. package/esm/data/table/base-cell/DataTableBaseCell.d.ts +15 -15
  95. package/esm/data/table/base-cell/DataTableBaseCell.js +4 -8
  96. package/esm/data/table/base-cell/DataTableBaseCell.js.map +1 -1
  97. package/esm/data/table/column-header/DataTableColumnHeader.d.ts +24 -6
  98. package/esm/data/table/column-header/DataTableColumnHeader.js +23 -28
  99. package/esm/data/table/column-header/DataTableColumnHeader.js.map +1 -1
  100. package/esm/data/table/column-header/useTableColumnResize.d.ts +19 -29
  101. package/esm/data/table/column-header/useTableColumnResize.js +24 -22
  102. package/esm/data/table/column-header/useTableColumnResize.js.map +1 -1
  103. package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.d.ts +1 -1
  104. package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.js +2 -2
  105. package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.js.map +1 -1
  106. package/esm/data/table/helpers/collectTableRowEntries.d.ts +2 -2
  107. package/esm/data/table/helpers/selection/getMultipleSelectProps.d.ts +13 -11
  108. package/esm/data/table/helpers/selection/getMultipleSelectProps.js +43 -53
  109. package/esm/data/table/helpers/selection/getMultipleSelectProps.js.map +1 -1
  110. package/esm/data/table/helpers/selection/getSingleSelectProps.d.ts +9 -8
  111. package/esm/data/table/helpers/selection/getSingleSelectProps.js +23 -10
  112. package/esm/data/table/helpers/selection/getSingleSelectProps.js.map +1 -1
  113. package/esm/data/table/helpers/selection/selection.types.d.ts +19 -19
  114. package/esm/data/table/helpers/selection/selection.utils.d.ts +21 -0
  115. package/esm/data/table/helpers/selection/selection.utils.js +43 -0
  116. package/esm/data/table/helpers/selection/selection.utils.js.map +1 -0
  117. package/esm/data/table/hooks/useColumnOptions.d.ts +16 -5
  118. package/esm/data/table/hooks/useColumnOptions.js +26 -8
  119. package/esm/data/table/hooks/useColumnOptions.js.map +1 -1
  120. package/esm/data/table/hooks/useTableDetailsPanel.d.ts +10 -13
  121. package/esm/data/table/hooks/useTableDetailsPanel.js +6 -5
  122. package/esm/data/table/hooks/useTableDetailsPanel.js.map +1 -1
  123. package/esm/data/table/hooks/useTableItems.d.ts +29 -15
  124. package/esm/data/table/hooks/useTableItems.js +3 -10
  125. package/esm/data/table/hooks/useTableItems.js.map +1 -1
  126. package/esm/data/table/hooks/useTableKeyboardNav.d.ts +1 -6
  127. package/esm/data/table/hooks/useTableKeyboardNav.js +1 -4
  128. package/esm/data/table/hooks/useTableKeyboardNav.js.map +1 -1
  129. package/esm/data/table/hooks/useTableSelection.d.ts +6 -6
  130. package/esm/data/table/hooks/useTableSelection.js +13 -13
  131. package/esm/data/table/hooks/useTableSelection.js.map +1 -1
  132. package/esm/data/table/hooks/useTableSort.d.ts +2 -2
  133. package/esm/data/table/hooks/useTableSort.js +4 -5
  134. package/esm/data/table/hooks/useTableSort.js.map +1 -1
  135. package/esm/data/table/root/DataTable.types.d.ts +22 -10
  136. package/esm/data/table/root/DataTableRoot.context.d.ts +13 -7
  137. package/esm/data/table/root/DataTableRoot.context.js.map +1 -1
  138. package/esm/data/table/root/DataTableRoot.d.ts +49 -72
  139. package/esm/data/table/root/DataTableRoot.js +56 -68
  140. package/esm/data/table/root/DataTableRoot.js.map +1 -1
  141. package/esm/data/table/root/DataTableRoot.legacy.d.ts +2 -7
  142. package/esm/data/table/root/DataTableRoot.legacy.js +17 -3
  143. package/esm/data/table/root/DataTableRoot.legacy.js.map +1 -1
  144. package/esm/data/table/sub-row-toggle/DataTableSubRowToggle.js +4 -4
  145. package/esm/data/table/sub-row-toggle/DataTableSubRowToggle.js.map +1 -1
  146. package/esm/data/table/tbody/DataTableTbody.js +4 -2
  147. package/esm/data/table/tbody/DataTableTbody.js.map +1 -1
  148. package/esm/data/table/tr/DataTableTr.d.ts +5 -3
  149. package/esm/data/table/tr/DataTableTr.js +35 -23
  150. package/esm/data/table/tr/DataTableTr.js.map +1 -1
  151. package/esm/table/ColumnHeader.js +2 -1
  152. package/esm/table/ColumnHeader.js.map +1 -1
  153. package/package.json +3 -3
  154. package/src/data/data-grid/index.ts +3 -0
  155. package/src/data/data-grid/root/DataGridRoot.context.ts +16 -0
  156. package/src/data/data-grid/root/DataGridRoot.tsx +71 -0
  157. package/src/data/drag-and-drop/drag-handler/DragAndDropDragHandler.tsx +0 -1
  158. package/src/data/drag-and-drop/root/DragAndDropRoot.tsx +15 -49
  159. package/src/data/stories/Data.test-data.tsx +52 -43
  160. package/src/data/table/agent-component-review.md +175 -0
  161. package/src/data/table/base-cell/DataTableBaseCell.tsx +31 -21
  162. package/src/data/table/column-header/DataTableColumnHeader.tsx +61 -58
  163. package/src/data/table/column-header/useTableColumnResize.ts +55 -71
  164. package/src/data/table/details-panel-row/DataTableDetailsPanelRow.tsx +3 -3
  165. package/src/data/table/helpers/collectTableRowEntries.ts +1 -2
  166. package/src/data/table/helpers/selection/getMultipleSelectProps.ts +65 -85
  167. package/src/data/table/helpers/selection/getSingleSelectProps.ts +35 -17
  168. package/src/data/table/helpers/selection/selection.types.ts +19 -19
  169. package/src/data/table/helpers/selection/selection.utils.test.ts +161 -0
  170. package/src/data/table/helpers/selection/selection.utils.ts +73 -0
  171. package/src/data/table/hooks/__tests__/useTableItems.test.ts +2 -1
  172. package/src/data/table/hooks/useColumnOptions.ts +48 -14
  173. package/src/data/table/hooks/useTableDetailsPanel.tsx +22 -25
  174. package/src/data/table/hooks/useTableItems.ts +32 -24
  175. package/src/data/table/hooks/useTableKeyboardNav.ts +1 -13
  176. package/src/data/table/hooks/useTableSelection.ts +26 -31
  177. package/src/data/table/hooks/useTableSort.ts +10 -9
  178. package/src/data/table/root/DataTable.types.ts +30 -22
  179. package/src/data/table/root/DataTableRoot.context.ts +19 -7
  180. package/src/data/table/root/DataTableRoot.legacy.tsx +22 -14
  181. package/src/data/table/root/DataTableRoot.tsx +244 -293
  182. package/src/data/table/sub-row-toggle/DataTableSubRowToggle.tsx +5 -4
  183. package/src/data/table/tbody/DataTableTbody.tsx +6 -2
  184. package/src/data/table/tr/DataTableTr.tsx +98 -35
  185. package/src/table/ColumnHeader.tsx +2 -1
  186. package/cjs/data/drag-and-drop-legacy/drag-handler/DragAndDropDragHandlerLegacy.d.ts +0 -22
  187. package/cjs/data/drag-and-drop-legacy/drag-handler/DragAndDropDragHandlerLegacy.js +0 -35
  188. package/cjs/data/drag-and-drop-legacy/drag-handler/DragAndDropDragHandlerLegacy.js.map +0 -1
  189. package/cjs/data/drag-and-drop-legacy/item/DragAndDropItemLegacy.d.ts +0 -27
  190. package/cjs/data/drag-and-drop-legacy/item/DragAndDropItemLegacy.js +0 -86
  191. package/cjs/data/drag-and-drop-legacy/item/DragAndDropItemLegacy.js.map +0 -1
  192. package/cjs/data/drag-and-drop-legacy/root/DragAndDropLegacy.context.d.ts +0 -5
  193. package/cjs/data/drag-and-drop-legacy/root/DragAndDropLegacy.context.js +0 -6
  194. package/cjs/data/drag-and-drop-legacy/root/DragAndDropLegacy.context.js.map +0 -1
  195. package/cjs/data/drag-and-drop-legacy/root/DragAndDropLegacyRoot.d.ts +0 -24
  196. package/cjs/data/drag-and-drop-legacy/root/DragAndDropLegacyRoot.js +0 -108
  197. package/cjs/data/drag-and-drop-legacy/root/DragAndDropLegacyRoot.js.map +0 -1
  198. package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.d.ts +0 -46
  199. package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.js +0 -112
  200. package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.js.map +0 -1
  201. package/esm/data/drag-and-drop-legacy/drag-handler/DragAndDropDragHandlerLegacy.d.ts +0 -22
  202. package/esm/data/drag-and-drop-legacy/drag-handler/DragAndDropDragHandlerLegacy.js +0 -29
  203. package/esm/data/drag-and-drop-legacy/drag-handler/DragAndDropDragHandlerLegacy.js.map +0 -1
  204. package/esm/data/drag-and-drop-legacy/item/DragAndDropItemLegacy.d.ts +0 -27
  205. package/esm/data/drag-and-drop-legacy/item/DragAndDropItemLegacy.js +0 -50
  206. package/esm/data/drag-and-drop-legacy/item/DragAndDropItemLegacy.js.map +0 -1
  207. package/esm/data/drag-and-drop-legacy/root/DragAndDropLegacy.context.d.ts +0 -5
  208. package/esm/data/drag-and-drop-legacy/root/DragAndDropLegacy.context.js +0 -3
  209. package/esm/data/drag-and-drop-legacy/root/DragAndDropLegacy.context.js.map +0 -1
  210. package/esm/data/drag-and-drop-legacy/root/DragAndDropLegacyRoot.d.ts +0 -24
  211. package/esm/data/drag-and-drop-legacy/root/DragAndDropLegacyRoot.js +0 -68
  212. package/esm/data/drag-and-drop-legacy/root/DragAndDropLegacyRoot.js.map +0 -1
  213. package/esm/data/table/helpers/selection/SelectionSubtreeHelper.d.ts +0 -46
  214. package/esm/data/table/helpers/selection/SelectionSubtreeHelper.js +0 -109
  215. package/esm/data/table/helpers/selection/SelectionSubtreeHelper.js.map +0 -1
  216. package/src/data/drag-and-drop-legacy/drag-handler/DragAndDropDragHandlerLegacy.tsx +0 -104
  217. package/src/data/drag-and-drop-legacy/item/DragAndDropItemLegacy.tsx +0 -74
  218. package/src/data/drag-and-drop-legacy/root/DragAndDropLegacy.context.tsx +0 -11
  219. package/src/data/drag-and-drop-legacy/root/DragAndDropLegacyRoot.tsx +0 -94
  220. package/src/data/table/helpers/selection/SelectionSubtreeHelper.test.ts +0 -66
  221. package/src/data/table/helpers/selection/SelectionSubtreeHelper.ts +0 -162
  222. package/src/data/table/hooks/__tests__/useTableSelection.test.ts +0 -488
  223. package/src/data/table/root/agent-feature-gap.md +0 -96
@@ -1,67 +1,57 @@
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;
15
- const indeterminate = selectedSelectableCount > 0 &&
16
- selectedSelectableCount < headerSelectableKeys.length;
17
- const selectedKeysNotInView = selectedKeys.filter((k) => !headerSelectableKeysSet.has(k));
18
- const disabledSelected = selectedKeys.filter((k) => disabledKeysSet.has(k));
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
- };
27
- const handleToggleAll = () => {
28
- if (allSelectableSelected) {
29
- setSelectedKeys(preservedKeys);
1
+ import { consoleWarning } from "../../../../utils/helpers/consoleWarning.js";
2
+ import { canSelectTableRow, mutateRowSelection } from "./selection.utils.js";
3
+ function getMultipleSelectProps({ selectedKeysSet, selectedKeys, setSelectedKeys, enableRowSelection, tableItems, }) {
4
+ const selectableIdsSet = new Set();
5
+ for (const [id, { rowData }] of tableItems.itemDetails) {
6
+ if (canSelectTableRow(enableRowSelection, { row: rowData, id })) {
7
+ selectableIdsSet.add(id);
30
8
  }
31
- else {
32
- setSelectedKeys([
33
- ...new Set([...preservedKeys, ...headerSelectableKeys]),
34
- ]);
9
+ }
10
+ let selectedOnPageCount = 0;
11
+ for (const id of selectableIdsSet) {
12
+ selectedKeysSet.has(id) && selectedOnPageCount++;
13
+ }
14
+ const isAllSelected = selectableIdsSet.size > 0 && selectedOnPageCount === selectableIdsSet.size;
15
+ const someSelected = selectedOnPageCount > 0;
16
+ const handleToggleRow = (key, row) => {
17
+ if (!row) {
18
+ consoleWarning(`Row data is undefined for key ${key}. This may cause issues with selection if enableRowSelection is used.`);
35
19
  }
36
- };
37
- const handleToggleRow = (key) => {
38
- if (disabledKeysSet.has(key)) {
39
- return;
20
+ const checked = !selectedKeysSet.has(key);
21
+ const nextSet = new Set(selectedKeysSet);
22
+ const changed = mutateRowSelection({
23
+ selectedRowIds: nextSet,
24
+ rowId: key,
25
+ checked,
26
+ childRowIdsById: tableItems.childRowIdsById,
27
+ itemDetails: tableItems.itemDetails,
28
+ enableRowSelection,
29
+ });
30
+ if (changed) {
31
+ setSelectedKeys([...nextSet]);
40
32
  }
41
- const groupKeys = subtreeHelper.getSelectableKeys([key]);
42
- if (isGroupFullySelected(key)) {
43
- const groupKeysSet = new Set(groupKeys);
44
- setSelectedKeys(selectedKeys.filter((selectedKey) => !groupKeysSet.has(selectedKey)));
33
+ };
34
+ const toggleAllRowSelected = (event) => {
35
+ if (event.target.checked) {
36
+ const preserved = selectedKeys.filter((k) => !selectableIdsSet.has(k));
37
+ setSelectedKeys([...preserved, ...selectableIdsSet]);
45
38
  }
46
39
  else {
47
- setSelectedKeys([...new Set([...selectedKeys, ...groupKeys])]);
40
+ setSelectedKeys(selectedKeys.filter((k) => !selectableIdsSet.has(k)));
48
41
  }
49
42
  };
50
43
  return {
51
44
  getTheadCheckboxProps: () => ({
52
- onChange: handleToggleAll,
53
- checked: allSelectableSelected,
54
- indeterminate,
55
- disabled: headerSelectableKeys.length === 0,
45
+ checked: isAllSelected,
46
+ indeterminate: !isAllSelected && someSelected,
47
+ onChange: toggleAllRowSelected,
56
48
  }),
57
- getRowCheckboxProps: (key) => {
58
- const groupStats = subtreeHelper.getSelectionStats(key);
49
+ getRowCheckboxProps: (key, row) => {
59
50
  return {
60
- onChange: () => handleToggleRow(key),
61
- checked: isGroupFullySelected(key),
62
- indeterminate: groupStats.selectedCount > 0 &&
63
- groupStats.selectedCount < groupStats.selectableCount,
64
- disabled: disabledKeysSet.has(key),
51
+ onChange: () => handleToggleRow(key, row),
52
+ checked: selectedKeysSet.has(key),
53
+ indeterminate: false,
54
+ disabled: !canSelectTableRow(enableRowSelection, { row, id: key }),
65
55
  };
66
56
  },
67
57
  toggleSelection: handleToggleRow,
@@ -1 +1 @@
1
- {"version":3,"file":"getMultipleSelectProps.js","sourceRoot":"","sources":["../../../../../src/data/table/helpers/selection/getMultipleSelectProps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getMultipleSelectProps.js","sourceRoot":"","sources":["../../../../../src/data/table/helpers/selection/getMultipleSelectProps.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,13 @@
1
1
  import type { RadioInputProps } from "../../../../form/radio/radio-input/RadioInput.js";
2
- type GetSingleSelectPropsArgs = {
3
- selectedKeysSet: Set<string | number>;
4
- setSelectedKeys: (keys: (string | number)[]) => void;
5
- disabledKeysSet: Set<string | number>;
2
+ import type { TableRowEntryId } from "../../root/DataTable.types.js";
3
+ import type { SelectedKeysT, SelectionProps } from "./selection.types.js";
4
+ type GetSingleSelectPropsArgs<T> = {
5
+ selectedKeysSet: Set<TableRowEntryId>;
6
+ setSelectedKeys: (keys: SelectedKeysT) => void;
6
7
  name: string;
7
- };
8
- declare function getSingleSelectProps({ selectedKeysSet, setSelectedKeys, disabledKeysSet, name, }: GetSingleSelectPropsArgs): {
9
- getRowRadioProps: (key: string | number) => RadioInputProps;
10
- toggleSelection: (key: string | number) => void;
8
+ } & Pick<SelectionProps<T>, "enableRowSelection">;
9
+ declare function getSingleSelectProps<T>({ selectedKeysSet, setSelectedKeys, name, enableRowSelection, }: GetSingleSelectPropsArgs<T>): {
10
+ getRowRadioProps: (key: TableRowEntryId, row: T) => RadioInputProps;
11
+ toggleSelection: (key: TableRowEntryId, row: T) => void;
11
12
  };
12
13
  export { getSingleSelectProps };
@@ -1,18 +1,31 @@
1
- function getSingleSelectProps({ selectedKeysSet, setSelectedKeys, disabledKeysSet, name, }) {
2
- const handleSelectionChange = (key) => {
3
- if (disabledKeysSet.has(key)) {
1
+ import { consoleWarning } from "../../../../utils/helpers/consoleWarning.js";
2
+ import { canSelectTableRow } from "./selection.utils.js";
3
+ function getSingleSelectProps({ selectedKeysSet, setSelectedKeys, name, enableRowSelection, }) {
4
+ const handleSelectionChange = (key, row) => {
5
+ if (!row) {
6
+ consoleWarning(`Row data is undefined for key ${key}. This may cause issues with selection if enableRowSelection is used.`);
7
+ }
8
+ if (!canSelectTableRow(enableRowSelection, { row, id: key })) {
4
9
  return;
5
10
  }
6
11
  setSelectedKeys([key]);
7
12
  };
8
13
  return {
9
- getRowRadioProps: (key) => ({
10
- checked: selectedKeysSet.has(key),
11
- onChange: () => handleSelectionChange(key),
12
- disabled: disabledKeysSet.has(key),
13
- value: key,
14
- name,
15
- }),
14
+ getRowRadioProps: (key, row) => {
15
+ const isSelectionDisabled = !canSelectTableRow(enableRowSelection, {
16
+ row,
17
+ id: key,
18
+ });
19
+ return {
20
+ checked: selectedKeysSet.has(key),
21
+ onChange: isSelectionDisabled
22
+ ? () => null
23
+ : () => handleSelectionChange(key, row),
24
+ disabled: isSelectionDisabled,
25
+ value: key,
26
+ name,
27
+ };
28
+ },
16
29
  toggleSelection: handleSelectionChange,
17
30
  };
18
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"getSingleSelectProps.js","sourceRoot":"","sources":["../../../../../src/data/table/helpers/selection/getSingleSelectProps.ts"],"names":[],"mappings":"AASA,SAAS,oBAAoB,CAAC,EAC5B,eAAe,EACf,eAAe,EACf,eAAe,EACf,IAAI,GACqB;IACzB,MAAM,qBAAqB,GAAG,CAAC,GAAoB,EAAE,EAAE;QACrD,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,OAAO;QACL,gBAAgB,EAAE,CAAC,GAAoB,EAAmB,EAAE,CAAC,CAAC;YAC5D,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;YACjC,QAAQ,EAAE,GAAG,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC;YAC1C,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;YAClC,KAAK,EAAE,GAAG;YACV,IAAI;SACL,CAAC;QACF,eAAe,EAAE,qBAAqB;KACvC,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"getSingleSelectProps.js","sourceRoot":"","sources":["../../../../../src/data/table/helpers/selection/getSingleSelectProps.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAG1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAQtD,SAAS,oBAAoB,CAAI,EAC/B,eAAe,EACf,eAAe,EACf,IAAI,EACJ,kBAAkB,GACU;IAC5B,MAAM,qBAAqB,GAAG,CAAC,GAAoB,EAAE,GAAM,EAAE,EAAE;QAC7D,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,cAAc,CACZ,iCAAiC,GAAG,uEAAuE,CAC5G,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,OAAO;QACL,gBAAgB,EAAE,CAAC,GAAoB,EAAE,GAAM,EAAmB,EAAE;YAClE,MAAM,mBAAmB,GAAG,CAAC,iBAAiB,CAAC,kBAAkB,EAAE;gBACjE,GAAG;gBACH,EAAE,EAAE,GAAG;aACR,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;gBACjC,QAAQ,EAAE,mBAAmB;oBAC3B,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI;oBACZ,CAAC,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC;gBACzC,QAAQ,EAAE,mBAAmB;gBAC7B,KAAK,EAAE,GAAG;gBACV,IAAI;aACL,CAAC;QACJ,CAAC;QACD,eAAe,EAAE,qBAAqB;KACvC,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import type { CheckboxInputProps } from "../../../../form/checkbox/checkbox-input/CheckboxInput.js";
2
2
  import type { RadioInputProps } from "../../../../form/radio/radio-input/RadioInput.js";
3
- type SelectedKeysT = (string | number)[];
4
- type SelectionProps = {
3
+ import type { TableRowEntryId } from "../../root/DataTable.types.js";
4
+ type SelectedKeysT = TableRowEntryId[];
5
+ type SelectionProps<T = any> = {
5
6
  /**
6
7
  * Enables selection of rows.
7
8
  *
@@ -12,7 +13,7 @@ type SelectionProps = {
12
13
  *
13
14
  * @default "none"
14
15
  */
15
- selectionMode?: "none" | "single" | "multiple";
16
+ selectionMode: "none" | "single" | "multiple";
16
17
  /**
17
18
  * Controlled selected keys. Should be used in conjunction with `onSelectionChange`.
18
19
  */
@@ -26,41 +27,40 @@ type SelectionProps = {
26
27
  */
27
28
  onSelectionChange?: (keys: SelectedKeysT) => void;
28
29
  /**
29
- * Keys that should be disabled for selection. These keys will not be selectable and will be styled as disabled.
30
+ * Callback to determine if a row should be enabled for selection.
30
31
  *
31
32
  *
32
- * TODO: Consider making this optionally a callback with (rowData:T) => boolean, to allow for more dynamic disabling of selection based on row data.
33
+ * If set to a boolean, it will enable selection for all rows when true, and disable selection for all rows when false.
33
34
  */
34
- disabledSelectionKeys?: SelectedKeysT;
35
+ enableRowSelection?: (({ row, id }: {
36
+ row: T;
37
+ id: TableRowEntryId;
38
+ }) => boolean) | boolean;
35
39
  /**
36
- * If true, stops clicking a row from toggling its selection state. This can be used if you want to only allow selection through the checkboxes/radios, and not have the entire row be clickable for selection.
37
- *
38
- * @default false
40
+ * Determines if selection is triggered by clicking the row or the selection control (checkbox/radio).
41
+ * @default "row"
39
42
  */
40
- disableRowSelectionOnClick?: boolean;
43
+ selectionTrigger?: "row" | "control";
41
44
  };
42
45
  type NoneSelection = {
43
46
  selectionMode: "none";
44
47
  selectedKeys: SelectedKeysT;
45
- disabledSelectionKeys: SelectedKeysT;
46
48
  };
47
49
  type SingleSelection = {
48
50
  selectionMode: "single";
49
51
  selectedKeys: SelectedKeysT;
50
- disabledSelectionKeys: SelectedKeysT;
51
- getRowRadioProps: (key: string | number) => RadioInputProps;
52
- toggleSelection: (key: string | number) => void;
52
+ getRowRadioProps: (key: TableRowEntryId, row: any) => RadioInputProps;
53
+ toggleSelection: (key: TableRowEntryId, row: any) => void;
53
54
  };
54
55
  type MultipleSelection = {
55
56
  selectionMode: "multiple";
56
57
  selectedKeys: SelectedKeysT;
57
- disabledSelectionKeys: SelectedKeysT;
58
58
  getTheadCheckboxProps: () => CheckboxInputProps;
59
- getRowCheckboxProps: (key: string | number) => CheckboxInputProps;
60
- toggleSelection: (key: string | number) => void;
59
+ getRowCheckboxProps: (key: TableRowEntryId, row: any) => CheckboxInputProps;
60
+ toggleSelection: (key: TableRowEntryId, row: any) => void;
61
61
  };
62
62
  type TableSelectionBase = {
63
- isRowSelected: (rowId: string | number) => boolean;
63
+ isRowSelected: (rowId: TableRowEntryId) => boolean;
64
64
  };
65
65
  type TableSelection = TableSelectionBase & (NoneSelection | SingleSelection | MultipleSelection);
66
- export type { MultipleSelection, NoneSelection, SelectionProps, SingleSelection, TableSelection, SelectedKeysT, };
66
+ export type { MultipleSelection, NoneSelection, SelectedKeysT, SelectionProps, SingleSelection, TableSelection, };
@@ -0,0 +1,21 @@
1
+ import type { TableRowEntryId } from "../../root/DataTable.types.js";
2
+ import type { ItemDetail } from "../collectTableRowEntries.js";
3
+ import type { SelectionProps } from "./selection.types.js";
4
+ declare function canSelectTableRow<T>(enableRowSelection: SelectionProps<T>["enableRowSelection"], args: {
5
+ row: T;
6
+ id: TableRowEntryId;
7
+ }): boolean;
8
+ type MutateRowSelectionArgs<T> = {
9
+ selectedRowIds: Set<TableRowEntryId>;
10
+ rowId: TableRowEntryId;
11
+ checked: boolean;
12
+ childRowIdsById: Map<TableRowEntryId, TableRowEntryId[]>;
13
+ itemDetails: Map<TableRowEntryId, ItemDetail<T>>;
14
+ enableRowSelection?: SelectionProps<T>["enableRowSelection"];
15
+ };
16
+ /**
17
+ * Traverses the row and its children and updates selected-state directly on given selectedRowIds set.
18
+ * Returns true if any changes were made to the set, false otherwise.
19
+ */
20
+ declare function mutateRowSelection<T>({ selectedRowIds, rowId, checked, childRowIdsById, itemDetails, enableRowSelection, }: MutateRowSelectionArgs<T>): boolean;
21
+ export { canSelectTableRow, mutateRowSelection };
@@ -0,0 +1,43 @@
1
+ function canSelectTableRow(enableRowSelection, args) {
2
+ if (typeof enableRowSelection === "function") {
3
+ return enableRowSelection(args);
4
+ }
5
+ return enableRowSelection !== null && enableRowSelection !== void 0 ? enableRowSelection : true;
6
+ }
7
+ /**
8
+ * Traverses the row and its children and updates selected-state directly on given selectedRowIds set.
9
+ * Returns true if any changes were made to the set, false otherwise.
10
+ */
11
+ function mutateRowSelection({ selectedRowIds, rowId, checked, childRowIdsById, itemDetails, enableRowSelection, }) {
12
+ let changed = false;
13
+ const item = itemDetails.get(rowId);
14
+ if (item &&
15
+ canSelectTableRow(enableRowSelection, { row: item.rowData, id: rowId })) {
16
+ if (checked && !selectedRowIds.has(rowId)) {
17
+ selectedRowIds.add(rowId);
18
+ changed = true;
19
+ }
20
+ else if (!checked && selectedRowIds.has(rowId)) {
21
+ selectedRowIds.delete(rowId);
22
+ changed = true;
23
+ }
24
+ }
25
+ const children = childRowIdsById.get(rowId);
26
+ if (children) {
27
+ for (const childId of children) {
28
+ if (mutateRowSelection({
29
+ selectedRowIds,
30
+ rowId: childId,
31
+ checked,
32
+ childRowIdsById,
33
+ itemDetails,
34
+ enableRowSelection,
35
+ })) {
36
+ changed = true;
37
+ }
38
+ }
39
+ }
40
+ return changed;
41
+ }
42
+ export { canSelectTableRow, mutateRowSelection };
43
+ //# sourceMappingURL=selection.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.utils.js","sourceRoot":"","sources":["../../../../../src/data/table/helpers/selection/selection.utils.ts"],"names":[],"mappings":"AAIA,SAAS,iBAAiB,CACxB,kBAA2D,EAC3D,IAAqC;IAErC,IAAI,OAAO,kBAAkB,KAAK,UAAU,EAAE,CAAC;QAC7C,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,kBAAkB,aAAlB,kBAAkB,cAAlB,kBAAkB,GAAI,IAAI,CAAC;AACpC,CAAC;AAWD;;;GAGG;AACH,SAAS,kBAAkB,CAAI,EAC7B,cAAc,EACd,KAAK,EACL,OAAO,EACP,eAAe,EACf,WAAW,EACX,kBAAkB,GACQ;IAC1B,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAEpC,IACE,IAAI;QACJ,iBAAiB,CAAC,kBAAkB,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EACvE,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1C,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC1B,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;aAAM,IAAI,CAAC,OAAO,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7B,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IACE,kBAAkB,CAAC;gBACjB,cAAc;gBACd,KAAK,EAAE,OAAO;gBACd,OAAO;gBACP,eAAe;gBACf,WAAW;gBACX,kBAAkB;aACnB,CAAC,EACF,CAAC;gBACD,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1,19 +1,30 @@
1
1
  import type { ColumnDefinition, ColumnDefinitions } from "../root/DataTable.types.js";
2
- import type { SelectionProps } from "./useTableSelection.js";
3
2
  type UseColumnOptions = {
4
3
  stickyColumns?: {
5
- first?: "1";
6
- last?: "1";
4
+ start?: "1";
5
+ end?: "1";
7
6
  };
8
- selectionMode: SelectionProps["selectionMode"];
7
+ hasSelection: boolean;
8
+ hasDetailsPanel: boolean;
9
+ layout: "fixed" | "auto";
10
+ };
11
+ type StickyStartState = {
12
+ selection: boolean;
13
+ expansion: boolean;
14
+ selectionOffset: number;
15
+ firstColumnOffset: number;
9
16
  };
10
17
  type UseColumnOptionsResult<T> = {
11
18
  columns: {
12
19
  isSticky: "start" | "end" | false;
20
+ isStickyLast?: boolean;
21
+ stickyLeftOffset?: number;
13
22
  colDef: ColumnDefinition<T>;
14
23
  }[];
15
- stickySelection: boolean;
24
+ stickyStart: StickyStartState;
25
+ totalColSpan: number;
16
26
  };
17
27
  declare function useColumnOptions<T>(columnDefinitions: ColumnDefinitions<T>, options: UseColumnOptions): UseColumnOptionsResult<T>;
18
28
  export { useColumnOptions };
29
+ export type { StickyStartState };
19
30
  export type { UseColumnOptionsResult };
@@ -1,29 +1,47 @@
1
1
  import { useMemo } from "react";
2
+ import { ACTION_CELL_WIDTH } from "../tr/DataTableTr.js";
2
3
  function useColumnOptions(columnDefinitions, options) {
3
- const { stickyColumns, selectionMode } = options;
4
- const hasSelection = selectionMode !== "none";
4
+ const { stickyColumns, hasSelection, hasDetailsPanel, layout } = options;
5
+ const hasStickyStart = (stickyColumns === null || stickyColumns === void 0 ? void 0 : stickyColumns.start) === "1";
6
+ const stickyExpansion = hasStickyStart && hasDetailsPanel;
7
+ const stickySelection = hasStickyStart && hasSelection;
8
+ const stickySelectionOffset = stickyExpansion ? ACTION_CELL_WIDTH : 0;
9
+ const stickyFirstColumnOffset = (stickyExpansion ? ACTION_CELL_WIDTH : 0) +
10
+ (stickySelection ? ACTION_CELL_WIDTH : 0);
5
11
  const columns = useMemo(() => {
6
12
  return columnDefinitions.map((colDef, index) => {
7
- const isFirstSticky = (stickyColumns === null || stickyColumns === void 0 ? void 0 : stickyColumns.first) === "1" && index === 0 && !hasSelection;
8
- const isLastSticky = (stickyColumns === null || stickyColumns === void 0 ? void 0 : stickyColumns.last) === "1" && index === columnDefinitions.length - 1;
13
+ const isFirstSticky = hasStickyStart && index === 0;
14
+ const isLastSticky = (stickyColumns === null || stickyColumns === void 0 ? void 0 : stickyColumns.end) === "1" && index === columnDefinitions.length - 1;
9
15
  return {
10
16
  isSticky: isFirstSticky
11
17
  ? "start"
12
18
  : isLastSticky
13
19
  ? "end"
14
20
  : false,
21
+ isStickyLast: isFirstSticky && !isLastSticky,
22
+ stickyLeftOffset: isFirstSticky ? stickyFirstColumnOffset : undefined,
15
23
  colDef,
16
24
  };
17
25
  });
18
26
  }, [
19
27
  columnDefinitions,
20
- hasSelection,
21
- stickyColumns === null || stickyColumns === void 0 ? void 0 : stickyColumns.first,
22
- stickyColumns === null || stickyColumns === void 0 ? void 0 : stickyColumns.last,
28
+ hasStickyStart,
29
+ stickyColumns,
30
+ stickyFirstColumnOffset,
23
31
  ]);
32
+ const totalColSpan = columns.length +
33
+ (layout === "fixed" ? 1 : 0) +
34
+ (hasSelection ? 1 : 0) +
35
+ (hasDetailsPanel ? 1 : 0);
24
36
  return {
25
- stickySelection: selectionMode !== "none" && (stickyColumns === null || stickyColumns === void 0 ? void 0 : stickyColumns.first) === "1",
37
+ stickyStart: {
38
+ selection: stickySelection,
39
+ expansion: stickyExpansion,
40
+ selectionOffset: stickySelectionOffset,
41
+ firstColumnOffset: stickyFirstColumnOffset,
42
+ },
26
43
  columns,
44
+ totalColSpan,
27
45
  };
28
46
  }
29
47
  export { useColumnOptions };
@@ -1 +1 @@
1
- {"version":3,"file":"useColumnOptions.js","sourceRoot":"","sources":["../../../../src/data/table/hooks/useColumnOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAuBhC,SAAS,gBAAgB,CACvB,iBAAuC,EACvC,OAAyB;IAEzB,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAEjD,MAAM,YAAY,GAAG,aAAa,KAAK,MAAM,CAAC;IAE9C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC7C,MAAM,aAAa,GACjB,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,MAAK,GAAG,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;YAC/D,MAAM,YAAY,GAChB,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,MAAK,GAAG,IAAI,KAAK,KAAK,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;YAExE,OAAO;gBACL,QAAQ,EAAE,aAAa;oBACrB,CAAC,CAAE,OAAiB;oBACpB,CAAC,CAAC,YAAY;wBACZ,CAAC,CAAE,KAAe;wBAClB,CAAC,CAAE,KAAe;gBACtB,MAAM;aACP,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,EAAE;QACD,iBAAiB;QACjB,YAAY;QACZ,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK;QACpB,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI;KACpB,CAAC,CAAC;IAEH,OAAO;QACL,eAAe,EAAE,aAAa,KAAK,MAAM,IAAI,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,MAAK,GAAG;QACzE,OAAO;KACR,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"useColumnOptions.js","sourceRoot":"","sources":["../../../../src/data/table/hooks/useColumnOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAKhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AA8BtD,SAAS,gBAAgB,CACvB,iBAAuC,EACvC,OAAyB;IAEzB,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEzE,MAAM,cAAc,GAAG,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,MAAK,GAAG,CAAC;IAEpD,MAAM,eAAe,GAAG,cAAc,IAAI,eAAe,CAAC;IAC1D,MAAM,eAAe,GAAG,cAAc,IAAI,YAAY,CAAC;IAEvD,MAAM,qBAAqB,GAAG,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,uBAAuB,GAC3B,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC7C,MAAM,aAAa,GAAG,cAAc,IAAI,KAAK,KAAK,CAAC,CAAC;YACpD,MAAM,YAAY,GAChB,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,GAAG,MAAK,GAAG,IAAI,KAAK,KAAK,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;YAEvE,OAAO;gBACL,QAAQ,EAAE,aAAa;oBACrB,CAAC,CAAE,OAAiB;oBACpB,CAAC,CAAC,YAAY;wBACZ,CAAC,CAAE,KAAe;wBAClB,CAAC,CAAE,KAAe;gBACtB,YAAY,EAAE,aAAa,IAAI,CAAC,YAAY;gBAC5C,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS;gBACrE,MAAM;aACP,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,EAAE;QACD,iBAAiB;QACjB,cAAc;QACd,aAAa;QACb,uBAAuB;KACxB,CAAC,CAAC;IAEH,MAAM,YAAY,GAChB,OAAO,CAAC,MAAM;QACd,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5B,OAAO;QACL,WAAW,EAAE;YACX,SAAS,EAAE,eAAe;YAC1B,SAAS,EAAE,eAAe;YAC1B,eAAe,EAAE,qBAAqB;YACtC,iBAAiB,EAAE,uBAAuB;SAC3C;QACD,OAAO;QACP,YAAY;KACb,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -1,10 +1,11 @@
1
1
  import React from "react";
2
+ import type { TableRowEntryId } from "../root/DataTable.types.js";
2
3
  type DetailsPanelProps<T> = {
3
4
  /**
4
- * Renders a details panel below the row when expanded.
5
+ * Function to get the content to show in the details panel for a given row.
5
6
  * When provided, an expand toggle column is added automatically.
6
7
  */
7
- getContent?: (rowData: T) => React.ReactNode;
8
+ getContent: (rowData: T) => React.ReactNode;
8
9
  /**
9
10
  * Determines whether a row can be expanded to show details panel content.
10
11
  * @default () => true
@@ -14,20 +15,16 @@ type DetailsPanelProps<T> = {
14
15
  * Controlled list of expanded row IDs.
15
16
  * Use with `onDetailsPanelChange` for controlled usage, or `defaultDetailsPanelRowIds` for uncontrolled.
16
17
  */
17
- expandedRowIds?: (string | number)[];
18
+ expandedRowIds?: TableRowEntryId[];
18
19
  /**
19
20
  * Initial list of expanded row IDs for uncontrolled usage.
20
21
  * @default []
21
22
  */
22
- defaultExpandedRowIds?: (string | number)[];
23
+ defaultExpandedRowIds?: TableRowEntryId[];
23
24
  /**
24
25
  * Called when the list of expanded row IDs changes.
25
- *
26
- *
27
- * TODO:
28
- * - Docs: This pattern is called "Master / Detail" in general terms
29
26
  */
30
- onExpandedRowIdsChange?: (ids: (string | number)[]) => void;
27
+ onExpandedRowIdsChange?: (ids: TableRowEntryId[]) => void;
31
28
  /**
32
29
  * Returns the height (in px) or `"auto"` for a row's details panel.
33
30
  * When a number is returned, the panel scrolls within that fixed height.
@@ -41,9 +38,9 @@ type DetailsPanelProps<T> = {
41
38
  showExpandAll?: boolean;
42
39
  };
43
40
  type DataTableDetailsPanelContextT = {
44
- isExpanded: (id: string | number) => boolean;
45
- isDetailsPanelExpandable: (id: string | number) => boolean;
46
- toggleExpansion: (id: string | number) => void;
41
+ isExpanded: (id: TableRowEntryId) => boolean;
42
+ isDetailsPanelExpandable: (id: TableRowEntryId) => boolean;
43
+ toggleExpansion: (id: TableRowEntryId) => void;
47
44
  toggleAll: () => void;
48
45
  isAllExpanded: boolean;
49
46
  getDetailsPanelContent?: (row: unknown) => React.ReactNode;
@@ -57,6 +54,6 @@ declare function DataTableDetailsPanelProvider<T>({ children, detailsPanel, }: {
57
54
  } & {
58
55
  children: React.ReactNode;
59
56
  }): React.JSX.Element;
60
- declare function getDataTableDetailsPanelId(tableId: string, rowId: string | number): string;
57
+ declare function getDataTableDetailsPanelId(tableId: string, rowId: TableRowEntryId): string;
61
58
  export { DataTableDetailsPanelProvider, getDataTableDetailsPanelId, useDataTableDetailsPanel, };
62
59
  export type { DetailsPanelProps };
@@ -1,21 +1,22 @@
1
1
  import React, { useCallback } from "react";
2
2
  import { createStrictContext } from "../../../utils/helpers/index.js";
3
3
  import { useControllableState } from "../../../utils/hooks/index.js";
4
- import { useTableItemsContext } from "./useTableItems.js";
4
+ import { useDataTableContext } from "../root/DataTableRoot.context.js";
5
5
  const { Provider: DataTableDetailsPanelContextProvider, useContext: useDataTableDetailsPanel, } = createStrictContext({
6
6
  name: "DataTableDetailsPanelContext",
7
7
  errorMessage: "useDataTableDetailsPanel must be used within a DataTableDetailsPanelProvider.",
8
8
  });
9
- function DataTableDetailsPanelProvider({ children, detailsPanel = {}, }) {
10
- const { expandedRowIds, defaultExpandedRowIds = [], onExpandedRowIdsChange, getContent, isRowExpandable, getHeight, showExpandAll = false, } = detailsPanel;
9
+ function DataTableDetailsPanelProvider({ children, detailsPanel, }) {
10
+ var _a;
11
+ const { expandedRowIds, defaultExpandedRowIds = [], onExpandedRowIdsChange, getContent, isRowExpandable, getHeight, showExpandAll = false, } = detailsPanel || {};
11
12
  const [expandedIds, setExpandedIds] = useControllableState({
12
13
  value: expandedRowIds,
13
14
  defaultValue: defaultExpandedRowIds,
14
15
  onChange: onExpandedRowIdsChange,
15
16
  });
16
17
  /* TODO: False is just fallback until auto and root is merged */
17
- const tableItemsContext = useTableItemsContext(false);
18
- const { itemDetails } = tableItemsContext !== null && tableItemsContext !== void 0 ? tableItemsContext : {
18
+ const tableContext = useDataTableContext(false);
19
+ const { itemDetails } = (_a = tableContext === null || tableContext === void 0 ? void 0 : tableContext.tableItems) !== null && _a !== void 0 ? _a : {
19
20
  itemDetails: new Map(),
20
21
  };
21
22
  const expandableIds = React.useMemo(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"useTableDetailsPanel.js","sourceRoot":"","sources":["../../../../src/data/table/hooks/useTableDetailsPanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useTableDetailsPanel.js","sourceRoot":"","sources":["../../../../src/data/table/hooks/useTableDetailsPanel.tsx"],"names":[],"mappings":"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"}
@@ -1,30 +1,44 @@
1
- import { type ItemDetail, type TableRowEntryId } from "../helpers/collectTableRowEntries.js";
1
+ import { type ItemDetail } from "../helpers/collectTableRowEntries.js";
2
+ import type { TableRowEntryId } from "../root/DataTable.types.js";
2
3
  type SubRowsProps<T> = {
3
- getRows?: (rowData: T) => T[];
4
- expandedRowIds?: (string | number)[];
5
- defaultExpandedRowIds?: (string | number)[];
4
+ /**
5
+ * Function to get sub-rows for a given row.
6
+ */
7
+ getRows: (rowData: T) => T[];
8
+ /**
9
+ * Controlled list of IDs of rows that should be expanded.
10
+ */
11
+ expandedRowIds?: TableRowEntryId[];
12
+ /**
13
+ * IDs of rows that should be initially expanded.
14
+ * Only used when `expandedRowIds` is not provided, i.e. when the expanded state is uncontrolled.
15
+ */
16
+ defaultExpandedRowIds?: TableRowEntryId[];
17
+ /**
18
+ * Called when the list of expanded row IDs changes.
19
+ */
20
+ onExpandedRowIdsChange?: (ids: TableRowEntryId[]) => void;
21
+ /**
22
+ * Function to get whether a row should be expandable.
23
+ * By default, all rows are expandable when `getRows` is provided.
24
+ */
6
25
  isRowExpandable?: (rowData: T) => boolean;
7
- onExpandedRowIdsChange?: (ids: (string | number)[]) => void;
8
26
  };
9
27
  type UseTableItemsArgs<T> = {
10
28
  items: T[];
11
29
  getRowId?: (rowData: T) => TableRowEntryId;
12
30
  subRows?: SubRowsProps<T>;
13
31
  };
14
- type useTableItemsReturn<T> = {
32
+ type UseTableItemsReturn<T> = {
15
33
  items: T[];
16
34
  itemDetails: Map<TableRowEntryId, ItemDetail<T>>;
17
35
  /** Row ids for the rows currently rendered in the table body. */
18
36
  visibleRowIds: TableRowEntryId[];
19
37
  /** Direct child ids for each row, used to traverse selection groups lazily. */
20
38
  childRowIdsById: Map<TableRowEntryId, TableRowEntryId[]>;
21
- onExpandedRowIdsChange: (id: string | number) => void;
22
- isSubRowExpanded: (id: string | number) => boolean;
39
+ onExpandedRowIdsChange: (id: TableRowEntryId) => void;
40
+ isSubRowExpanded: (id: TableRowEntryId) => boolean;
23
41
  };
24
- declare function useTableItems<T>(args: UseTableItemsArgs<T>): useTableItemsReturn<T>;
25
- declare const TableItemsProvider: import("react").FC<Omit<useTableItemsReturn<any>, "childRowIdsById"> & {
26
- children: React.ReactNode;
27
- ref?: never;
28
- }>, useTableItemsContext: <S extends boolean = true>(strict?: S | undefined) => S extends true ? Omit<useTableItemsReturn<any>, "childRowIdsById"> : Omit<useTableItemsReturn<any>, "childRowIdsById"> | undefined;
29
- export { useTableItems, TableItemsProvider, useTableItemsContext };
30
- export type { ItemDetail, SubRowsProps };
42
+ declare function useTableItems<T>(args: UseTableItemsArgs<T>): UseTableItemsReturn<T>;
43
+ export { useTableItems };
44
+ export type { ItemDetail, SubRowsProps, UseTableItemsReturn };