@vuu-ui/vuu-table 0.13.7 → 0.13.9

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 (269) hide show
  1. package/cjs/index.js +5236 -61
  2. package/cjs/index.js.map +1 -1
  3. package/esm/index.js +5205 -26
  4. package/esm/index.js.map +1 -1
  5. package/package.json +10 -10
  6. package/cjs/CellFocusState.js +0 -45
  7. package/cjs/CellFocusState.js.map +0 -1
  8. package/cjs/Row.css.js +0 -6
  9. package/cjs/Row.css.js.map +0 -1
  10. package/cjs/Row.js +0 -151
  11. package/cjs/Row.js.map +0 -1
  12. package/cjs/Table.css.js +0 -6
  13. package/cjs/Table.css.js.map +0 -1
  14. package/cjs/Table.js +0 -433
  15. package/cjs/Table.js.map +0 -1
  16. package/cjs/VirtualColSpan.js +0 -19
  17. package/cjs/VirtualColSpan.js.map +0 -1
  18. package/cjs/bulk-edit/BulkEditDialog.js +0 -57
  19. package/cjs/bulk-edit/BulkEditDialog.js.map +0 -1
  20. package/cjs/bulk-edit/BulkEditPanel.css.js +0 -6
  21. package/cjs/bulk-edit/BulkEditPanel.css.js.map +0 -1
  22. package/cjs/bulk-edit/BulkEditPanel.js +0 -72
  23. package/cjs/bulk-edit/BulkEditPanel.js.map +0 -1
  24. package/cjs/bulk-edit/BulkEditRow.css.js +0 -6
  25. package/cjs/bulk-edit/BulkEditRow.css.js.map +0 -1
  26. package/cjs/bulk-edit/BulkEditRow.js +0 -81
  27. package/cjs/bulk-edit/BulkEditRow.js.map +0 -1
  28. package/cjs/bulk-edit/useBulkEditPanel.js +0 -101
  29. package/cjs/bulk-edit/useBulkEditPanel.js.map +0 -1
  30. package/cjs/bulk-edit/useBulkEditRow.js +0 -144
  31. package/cjs/bulk-edit/useBulkEditRow.js.map +0 -1
  32. package/cjs/cell-block/CellBlock.css.js +0 -6
  33. package/cjs/cell-block/CellBlock.css.js.map +0 -1
  34. package/cjs/cell-block/CellBlock.js +0 -45
  35. package/cjs/cell-block/CellBlock.js.map +0 -1
  36. package/cjs/cell-block/cellblock-utils.js +0 -125
  37. package/cjs/cell-block/cellblock-utils.js.map +0 -1
  38. package/cjs/cell-block/useCellBlockSelection.js +0 -254
  39. package/cjs/cell-block/useCellBlockSelection.js.map +0 -1
  40. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.css.js +0 -6
  41. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.css.js.map +0 -1
  42. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js +0 -68
  43. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js.map +0 -1
  44. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js +0 -6
  45. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js.map +0 -1
  46. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js +0 -33
  47. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js.map +0 -1
  48. package/cjs/cell-renderers/input-cell/InputCell.css.js +0 -6
  49. package/cjs/cell-renderers/input-cell/InputCell.css.js.map +0 -1
  50. package/cjs/cell-renderers/input-cell/InputCell.js +0 -52
  51. package/cjs/cell-renderers/input-cell/InputCell.js.map +0 -1
  52. package/cjs/cell-renderers/toggle-cell/ToggleCell.css.js +0 -6
  53. package/cjs/cell-renderers/toggle-cell/ToggleCell.css.js.map +0 -1
  54. package/cjs/cell-renderers/toggle-cell/ToggleCell.js +0 -67
  55. package/cjs/cell-renderers/toggle-cell/ToggleCell.js.map +0 -1
  56. package/cjs/column-header-pill/ColumnHeaderPill.css.js +0 -6
  57. package/cjs/column-header-pill/ColumnHeaderPill.css.js.map +0 -1
  58. package/cjs/column-header-pill/ColumnHeaderPill.js +0 -53
  59. package/cjs/column-header-pill/ColumnHeaderPill.js.map +0 -1
  60. package/cjs/column-header-pill/GroupColumnPill.css.js +0 -6
  61. package/cjs/column-header-pill/GroupColumnPill.css.js.map +0 -1
  62. package/cjs/column-header-pill/GroupColumnPill.js +0 -29
  63. package/cjs/column-header-pill/GroupColumnPill.js.map +0 -1
  64. package/cjs/column-header-pill/SortIndicator.css.js +0 -6
  65. package/cjs/column-header-pill/SortIndicator.css.js.map +0 -1
  66. package/cjs/column-header-pill/SortIndicator.js +0 -27
  67. package/cjs/column-header-pill/SortIndicator.js.map +0 -1
  68. package/cjs/column-resizing/ColumnResizer.css.js +0 -6
  69. package/cjs/column-resizing/ColumnResizer.css.js.map +0 -1
  70. package/cjs/column-resizing/ColumnResizer.js +0 -82
  71. package/cjs/column-resizing/ColumnResizer.js.map +0 -1
  72. package/cjs/column-resizing/useTableColumnResize.js +0 -55
  73. package/cjs/column-resizing/useTableColumnResize.js.map +0 -1
  74. package/cjs/header-cell/GroupHeaderCell.css.js +0 -6
  75. package/cjs/header-cell/GroupHeaderCell.css.js.map +0 -1
  76. package/cjs/header-cell/GroupHeaderCell.js +0 -127
  77. package/cjs/header-cell/GroupHeaderCell.js.map +0 -1
  78. package/cjs/header-cell/HeaderCell.css.js +0 -6
  79. package/cjs/header-cell/HeaderCell.css.js.map +0 -1
  80. package/cjs/header-cell/HeaderCell.js +0 -120
  81. package/cjs/header-cell/HeaderCell.js.map +0 -1
  82. package/cjs/pagination/PaginationControl.css.js +0 -6
  83. package/cjs/pagination/PaginationControl.css.js.map +0 -1
  84. package/cjs/pagination/PaginationControl.js +0 -38
  85. package/cjs/pagination/PaginationControl.js.map +0 -1
  86. package/cjs/pagination/usePagination.js +0 -36
  87. package/cjs/pagination/usePagination.js.map +0 -1
  88. package/cjs/table-cell/TableCell.css.js +0 -6
  89. package/cjs/table-cell/TableCell.css.js.map +0 -1
  90. package/cjs/table-cell/TableCell.js +0 -95
  91. package/cjs/table-cell/TableCell.js.map +0 -1
  92. package/cjs/table-cell/TableGroupCell.css.js +0 -6
  93. package/cjs/table-cell/TableGroupCell.css.js.map +0 -1
  94. package/cjs/table-cell/TableGroupCell.js +0 -66
  95. package/cjs/table-cell/TableGroupCell.js.map +0 -1
  96. package/cjs/table-config.js +0 -35
  97. package/cjs/table-config.js.map +0 -1
  98. package/cjs/table-dom-utils.js +0 -202
  99. package/cjs/table-dom-utils.js.map +0 -1
  100. package/cjs/table-header/HeaderProvider.js +0 -18
  101. package/cjs/table-header/HeaderProvider.js.map +0 -1
  102. package/cjs/table-header/TableHeader.js +0 -166
  103. package/cjs/table-header/TableHeader.js.map +0 -1
  104. package/cjs/table-header/useTableHeader.js +0 -85
  105. package/cjs/table-header/useTableHeader.js.map +0 -1
  106. package/cjs/useCell.js +0 -28
  107. package/cjs/useCell.js.map +0 -1
  108. package/cjs/useCellEditing.js +0 -79
  109. package/cjs/useCellEditing.js.map +0 -1
  110. package/cjs/useCellFocus.js +0 -115
  111. package/cjs/useCellFocus.js.map +0 -1
  112. package/cjs/useControlledTableNavigation.js +0 -46
  113. package/cjs/useControlledTableNavigation.js.map +0 -1
  114. package/cjs/useDataSource.js +0 -146
  115. package/cjs/useDataSource.js.map +0 -1
  116. package/cjs/useEditableCell.js +0 -32
  117. package/cjs/useEditableCell.js.map +0 -1
  118. package/cjs/useHighlighting.js +0 -33
  119. package/cjs/useHighlighting.js.map +0 -1
  120. package/cjs/useKeyboardNavigation.js +0 -318
  121. package/cjs/useKeyboardNavigation.js.map +0 -1
  122. package/cjs/useMeasuredHeight.js +0 -41
  123. package/cjs/useMeasuredHeight.js.map +0 -1
  124. package/cjs/useRowClassNameGenerators.js +0 -34
  125. package/cjs/useRowClassNameGenerators.js.map +0 -1
  126. package/cjs/useSelection.js +0 -74
  127. package/cjs/useSelection.js.map +0 -1
  128. package/cjs/useTable.js +0 -727
  129. package/cjs/useTable.js.map +0 -1
  130. package/cjs/useTableContextMenu.js +0 -59
  131. package/cjs/useTableContextMenu.js.map +0 -1
  132. package/cjs/useTableModel.js +0 -383
  133. package/cjs/useTableModel.js.map +0 -1
  134. package/cjs/useTableScroll.js +0 -446
  135. package/cjs/useTableScroll.js.map +0 -1
  136. package/cjs/useTableViewport.js +0 -137
  137. package/cjs/useTableViewport.js.map +0 -1
  138. package/esm/CellFocusState.js +0 -43
  139. package/esm/CellFocusState.js.map +0 -1
  140. package/esm/Row.css.js +0 -4
  141. package/esm/Row.css.js.map +0 -1
  142. package/esm/Row.js +0 -148
  143. package/esm/Row.js.map +0 -1
  144. package/esm/Table.css.js +0 -4
  145. package/esm/Table.css.js.map +0 -1
  146. package/esm/Table.js +0 -431
  147. package/esm/Table.js.map +0 -1
  148. package/esm/VirtualColSpan.js +0 -17
  149. package/esm/VirtualColSpan.js.map +0 -1
  150. package/esm/bulk-edit/BulkEditDialog.js +0 -55
  151. package/esm/bulk-edit/BulkEditDialog.js.map +0 -1
  152. package/esm/bulk-edit/BulkEditPanel.css.js +0 -4
  153. package/esm/bulk-edit/BulkEditPanel.css.js.map +0 -1
  154. package/esm/bulk-edit/BulkEditPanel.js +0 -70
  155. package/esm/bulk-edit/BulkEditPanel.js.map +0 -1
  156. package/esm/bulk-edit/BulkEditRow.css.js +0 -4
  157. package/esm/bulk-edit/BulkEditRow.css.js.map +0 -1
  158. package/esm/bulk-edit/BulkEditRow.js +0 -79
  159. package/esm/bulk-edit/BulkEditRow.js.map +0 -1
  160. package/esm/bulk-edit/useBulkEditPanel.js +0 -99
  161. package/esm/bulk-edit/useBulkEditPanel.js.map +0 -1
  162. package/esm/bulk-edit/useBulkEditRow.js +0 -142
  163. package/esm/bulk-edit/useBulkEditRow.js.map +0 -1
  164. package/esm/cell-block/CellBlock.css.js +0 -4
  165. package/esm/cell-block/CellBlock.css.js.map +0 -1
  166. package/esm/cell-block/CellBlock.js +0 -43
  167. package/esm/cell-block/CellBlock.js.map +0 -1
  168. package/esm/cell-block/cellblock-utils.js +0 -116
  169. package/esm/cell-block/cellblock-utils.js.map +0 -1
  170. package/esm/cell-block/useCellBlockSelection.js +0 -252
  171. package/esm/cell-block/useCellBlockSelection.js.map +0 -1
  172. package/esm/cell-renderers/checkbox-cell/CheckboxCell.css.js +0 -4
  173. package/esm/cell-renderers/checkbox-cell/CheckboxCell.css.js.map +0 -1
  174. package/esm/cell-renderers/checkbox-cell/CheckboxCell.js +0 -66
  175. package/esm/cell-renderers/checkbox-cell/CheckboxCell.js.map +0 -1
  176. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js +0 -4
  177. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js.map +0 -1
  178. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js +0 -31
  179. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js.map +0 -1
  180. package/esm/cell-renderers/input-cell/InputCell.css.js +0 -4
  181. package/esm/cell-renderers/input-cell/InputCell.css.js.map +0 -1
  182. package/esm/cell-renderers/input-cell/InputCell.js +0 -50
  183. package/esm/cell-renderers/input-cell/InputCell.js.map +0 -1
  184. package/esm/cell-renderers/toggle-cell/ToggleCell.css.js +0 -4
  185. package/esm/cell-renderers/toggle-cell/ToggleCell.css.js.map +0 -1
  186. package/esm/cell-renderers/toggle-cell/ToggleCell.js +0 -65
  187. package/esm/cell-renderers/toggle-cell/ToggleCell.js.map +0 -1
  188. package/esm/column-header-pill/ColumnHeaderPill.css.js +0 -4
  189. package/esm/column-header-pill/ColumnHeaderPill.css.js.map +0 -1
  190. package/esm/column-header-pill/ColumnHeaderPill.js +0 -51
  191. package/esm/column-header-pill/ColumnHeaderPill.js.map +0 -1
  192. package/esm/column-header-pill/GroupColumnPill.css.js +0 -4
  193. package/esm/column-header-pill/GroupColumnPill.css.js.map +0 -1
  194. package/esm/column-header-pill/GroupColumnPill.js +0 -27
  195. package/esm/column-header-pill/GroupColumnPill.js.map +0 -1
  196. package/esm/column-header-pill/SortIndicator.css.js +0 -4
  197. package/esm/column-header-pill/SortIndicator.css.js.map +0 -1
  198. package/esm/column-header-pill/SortIndicator.js +0 -25
  199. package/esm/column-header-pill/SortIndicator.js.map +0 -1
  200. package/esm/column-resizing/ColumnResizer.css.js +0 -4
  201. package/esm/column-resizing/ColumnResizer.css.js.map +0 -1
  202. package/esm/column-resizing/ColumnResizer.js +0 -80
  203. package/esm/column-resizing/ColumnResizer.js.map +0 -1
  204. package/esm/column-resizing/useTableColumnResize.js +0 -53
  205. package/esm/column-resizing/useTableColumnResize.js.map +0 -1
  206. package/esm/header-cell/GroupHeaderCell.css.js +0 -4
  207. package/esm/header-cell/GroupHeaderCell.css.js.map +0 -1
  208. package/esm/header-cell/GroupHeaderCell.js +0 -125
  209. package/esm/header-cell/GroupHeaderCell.js.map +0 -1
  210. package/esm/header-cell/HeaderCell.css.js +0 -4
  211. package/esm/header-cell/HeaderCell.css.js.map +0 -1
  212. package/esm/header-cell/HeaderCell.js +0 -118
  213. package/esm/header-cell/HeaderCell.js.map +0 -1
  214. package/esm/pagination/PaginationControl.css.js +0 -4
  215. package/esm/pagination/PaginationControl.css.js.map +0 -1
  216. package/esm/pagination/PaginationControl.js +0 -36
  217. package/esm/pagination/PaginationControl.js.map +0 -1
  218. package/esm/pagination/usePagination.js +0 -34
  219. package/esm/pagination/usePagination.js.map +0 -1
  220. package/esm/table-cell/TableCell.css.js +0 -4
  221. package/esm/table-cell/TableCell.css.js.map +0 -1
  222. package/esm/table-cell/TableCell.js +0 -93
  223. package/esm/table-cell/TableCell.js.map +0 -1
  224. package/esm/table-cell/TableGroupCell.css.js +0 -4
  225. package/esm/table-cell/TableGroupCell.css.js.map +0 -1
  226. package/esm/table-cell/TableGroupCell.js +0 -64
  227. package/esm/table-cell/TableGroupCell.js.map +0 -1
  228. package/esm/table-config.js +0 -33
  229. package/esm/table-config.js.map +0 -1
  230. package/esm/table-dom-utils.js +0 -184
  231. package/esm/table-dom-utils.js.map +0 -1
  232. package/esm/table-header/HeaderProvider.js +0 -15
  233. package/esm/table-header/HeaderProvider.js.map +0 -1
  234. package/esm/table-header/TableHeader.js +0 -164
  235. package/esm/table-header/TableHeader.js.map +0 -1
  236. package/esm/table-header/useTableHeader.js +0 -83
  237. package/esm/table-header/useTableHeader.js.map +0 -1
  238. package/esm/useCell.js +0 -26
  239. package/esm/useCell.js.map +0 -1
  240. package/esm/useCellEditing.js +0 -77
  241. package/esm/useCellEditing.js.map +0 -1
  242. package/esm/useCellFocus.js +0 -113
  243. package/esm/useCellFocus.js.map +0 -1
  244. package/esm/useControlledTableNavigation.js +0 -43
  245. package/esm/useControlledTableNavigation.js.map +0 -1
  246. package/esm/useDataSource.js +0 -144
  247. package/esm/useDataSource.js.map +0 -1
  248. package/esm/useEditableCell.js +0 -30
  249. package/esm/useEditableCell.js.map +0 -1
  250. package/esm/useHighlighting.js +0 -31
  251. package/esm/useHighlighting.js.map +0 -1
  252. package/esm/useKeyboardNavigation.js +0 -314
  253. package/esm/useKeyboardNavigation.js.map +0 -1
  254. package/esm/useMeasuredHeight.js +0 -39
  255. package/esm/useMeasuredHeight.js.map +0 -1
  256. package/esm/useRowClassNameGenerators.js +0 -32
  257. package/esm/useRowClassNameGenerators.js.map +0 -1
  258. package/esm/useSelection.js +0 -72
  259. package/esm/useSelection.js.map +0 -1
  260. package/esm/useTable.js +0 -725
  261. package/esm/useTable.js.map +0 -1
  262. package/esm/useTableContextMenu.js +0 -56
  263. package/esm/useTableContextMenu.js.map +0 -1
  264. package/esm/useTableModel.js +0 -381
  265. package/esm/useTableModel.js.map +0 -1
  266. package/esm/useTableScroll.js +0 -443
  267. package/esm/useTableScroll.js.map +0 -1
  268. package/esm/useTableViewport.js +0 -135
  269. package/esm/useTableViewport.js.map +0 -1
package/esm/useTable.js DELETED
@@ -1,725 +0,0 @@
1
- import { useTableAndColumnSettings, columnSettingsFromColumnMenuPermissions, tableSettingsFromColumnMenuPermissions, useColumnActions } from '@vuu-ui/vuu-table-extras';
2
- import { useDragDrop } from '@vuu-ui/vuu-ui-controls';
3
- import { useLayoutEffectSkipFirst, buildColumnMap, updateColumn, logUnhandledMessage, toggleOrApplySort, isValidNumber, isJsonGroup, isGroupColumn, asDataSourceRowObject, metadataKeys } from '@vuu-ui/vuu-utils';
4
- import { useRef, useMemo, useState, useCallback, useEffect } from 'react';
5
- import { useCellBlockSelection } from './cell-block/useCellBlockSelection.js';
6
- import { CellFocusState } from './CellFocusState.js';
7
- import { updateTableConfig } from './table-config.js';
8
- import { getHeaderCell, getAriaRowIndex } from './table-dom-utils.js';
9
- import { useCellEditing } from './useCellEditing.js';
10
- import { useCellFocus } from './useCellFocus.js';
11
- import { useDataSource } from './useDataSource.js';
12
- import { useKeyboardNavigation } from './useKeyboardNavigation.js';
13
- import { useRowClassNameGenerators } from './useRowClassNameGenerators.js';
14
- import { useSelection } from './useSelection.js';
15
- import { useTableContextMenu } from './useTableContextMenu.js';
16
- import { useTableModel } from './useTableModel.js';
17
- import { useTableScroll } from './useTableScroll.js';
18
- import { useTableViewport } from './useTableViewport.js';
19
-
20
- const nullHeaderState = {
21
- height: -1,
22
- count: -1
23
- };
24
- const zeroHeaderState = {
25
- height: 0,
26
- count: 0
27
- };
28
- const stripInternalProperties = (tableConfig) => {
29
- return tableConfig;
30
- };
31
- const { KEY, IS_EXPANDED, IS_LEAF } = metadataKeys;
32
- const NULL_DRAG_DROP = {
33
- draggable: void 0,
34
- onMouseDown: void 0
35
- };
36
- const useNullDragDrop = () => NULL_DRAG_DROP;
37
- const addColumn = (tableConfig, column) => ({
38
- ...tableConfig,
39
- columns: tableConfig.columns.concat(column)
40
- });
41
- const useTable = ({
42
- allowCellBlockSelection,
43
- allowDragDrop = false,
44
- availableColumns,
45
- config,
46
- containerRef,
47
- dataSource,
48
- defaultSelectedIndexValues,
49
- defaultSelectedKeyValues,
50
- disableFocus,
51
- highlightedIndex: highlightedIndexProp,
52
- id,
53
- navigationStyle = "cell",
54
- onAvailableColumnsChange,
55
- onConfigChange,
56
- onDataEdited: onDataEditedProp,
57
- onDragStart,
58
- onDrop,
59
- onHighlight,
60
- onRowClick: onRowClickProp,
61
- onSelect,
62
- onSelectCellBlock,
63
- onSelectionChange,
64
- renderBufferSize = 0,
65
- revealSelected,
66
- rowHeight = 20,
67
- rowToObject = asDataSourceRowObject,
68
- scrollingApiRef,
69
- selectionBookendWidth = 4,
70
- selectionModel,
71
- showColumnHeaderMenus = true,
72
- showColumnHeaders,
73
- showPaginationControls,
74
- size
75
- }) => {
76
- const tableConfigRef = useRef(config);
77
- const requestScrollRef = useRef(void 0);
78
- useMemo(() => {
79
- tableConfigRef.current = config;
80
- }, [config]);
81
- const initialState = useMemo(() => new CellFocusState(), []);
82
- const cellFocusStateRef = useRef(initialState);
83
- const focusCellRef = useRef(void 0);
84
- const [headerState, setHeaderState] = useState(
85
- showColumnHeaders ? nullHeaderState : zeroHeaderState
86
- );
87
- const [rowCount, setRowCount] = useState(dataSource.size);
88
- if (dataSource === void 0) {
89
- throw Error("no data source provided to Vuu Table");
90
- }
91
- const onDataRowcountChange = useCallback((size2) => {
92
- setRowCount(size2);
93
- }, []);
94
- const virtualContentHeight = rowHeight * rowCount;
95
- const viewportBodyHeight = size.height - (headerState.height === -1 ? 0 : headerState.height);
96
- const verticalScrollbarWidth = virtualContentHeight > viewportBodyHeight ? 10 : 0;
97
- const availableWidth = size.width - (verticalScrollbarWidth + 2 * selectionBookendWidth);
98
- const rowClassNameGenerator = useRowClassNameGenerators(config);
99
- const useRowDragDrop = allowDragDrop ? useDragDrop : useNullDragDrop;
100
- const {
101
- columns,
102
- dispatchTableModelAction,
103
- headings,
104
- tableAttributes,
105
- tableConfig
106
- } = useTableModel({ config, dataSource, selectionModel, availableWidth });
107
- useLayoutEffectSkipFirst(() => {
108
- dispatchTableModelAction({
109
- availableWidth,
110
- type: "init",
111
- tableConfig: tableConfigRef.current,
112
- dataSource
113
- });
114
- }, [availableWidth, config, dataSource, dispatchTableModelAction]);
115
- const applyTableConfigChange = useCallback(
116
- (config2) => {
117
- dispatchTableModelAction({
118
- availableWidth,
119
- type: "init",
120
- tableConfig: config2,
121
- dataSource
122
- });
123
- tableConfigRef.current = config2;
124
- onConfigChange?.(stripInternalProperties(config2));
125
- },
126
- [availableWidth, dataSource, dispatchTableModelAction, onConfigChange]
127
- );
128
- const columnMap = useMemo(
129
- () => buildColumnMap(dataSource.columns),
130
- [dataSource.columns]
131
- );
132
- const onSubscribed = useCallback(
133
- ({ tableSchema }) => {
134
- if (tableSchema) {
135
- dispatchTableModelAction({
136
- type: "setTableSchema",
137
- tableSchema
138
- });
139
- } else {
140
- console.log("subscription message with no schema");
141
- }
142
- },
143
- [dispatchTableModelAction]
144
- );
145
- const {
146
- getRowAtPosition,
147
- getRowOffset,
148
- setInSituRowOffset: viewportHookSetInSituRowOffset,
149
- setScrollTop: viewportHookSetScrollTop,
150
- ...viewportMeasurements
151
- } = useTableViewport({
152
- columns,
153
- headerHeight: headerState.height,
154
- rowCount,
155
- rowHeight,
156
- selectionEndSize: selectionBookendWidth,
157
- size,
158
- showPaginationControls
159
- });
160
- const { data, dataRef, getSelectedRows, range, setRange } = useDataSource({
161
- dataSource,
162
- defaultSelectedIndexValues,
163
- defaultSelectedKeyValues,
164
- renderBufferSize,
165
- revealSelected,
166
- onSizeChange: onDataRowcountChange,
167
- onSubscribed
168
- });
169
- const { requestScroll, ...scrollProps } = useTableScroll({
170
- cellFocusStateRef,
171
- columns,
172
- focusCell: focusCellRef.current,
173
- getRowAtPosition,
174
- rowHeight,
175
- scrollingApiRef,
176
- setRange,
177
- showPaginationControls,
178
- onVerticalScroll: viewportHookSetScrollTop,
179
- onVerticalScrollInSitu: viewportHookSetInSituRowOffset,
180
- viewportMeasurements
181
- });
182
- requestScrollRef.current = requestScroll;
183
- const handleConfigEditedInSettingsPanel = useCallback(
184
- (tableConfig2) => {
185
- dispatchTableModelAction({
186
- availableWidth,
187
- dataSource,
188
- tableConfig: tableConfig2,
189
- type: "init"
190
- });
191
- tableConfigRef.current = tableConfig2;
192
- onConfigChange?.(stripInternalProperties(tableConfig2));
193
- },
194
- [availableWidth, dataSource, dispatchTableModelAction, onConfigChange]
195
- );
196
- const handleDataSourceConfigChanged = useCallback(
197
- (dataSourceConfig) => {
198
- dataSource.config = {
199
- ...dataSource.config,
200
- ...dataSourceConfig
201
- };
202
- },
203
- [dataSource]
204
- );
205
- const handleConfigChange = useCallback(
206
- (config2, range2, confirmed, changes) => {
207
- const scrollSensitiveChanges = changes?.filterChanged || changes?.groupByChanged;
208
- if (scrollSensitiveChanges && range2.from > 0) {
209
- requestScrollRef.current?.({
210
- type: "scroll-end",
211
- direction: "home"
212
- });
213
- }
214
- dispatchTableModelAction({
215
- type: "tableConfig",
216
- ...config2,
217
- confirmed
218
- });
219
- },
220
- [dispatchTableModelAction]
221
- );
222
- useEffect(() => {
223
- dataSource.on("config", handleConfigChange);
224
- return () => {
225
- dataSource.removeListener("config", handleConfigChange);
226
- };
227
- }, [dataSource, dispatchTableModelAction, handleConfigChange]);
228
- const handleCreateCalculatedColumn = useCallback(
229
- (column) => {
230
- dataSource.columns = dataSource.columns.concat(column.name);
231
- applyTableConfigChange(addColumn(tableConfig, column));
232
- },
233
- [dataSource, tableConfig, applyTableConfigChange]
234
- );
235
- const hideColumns = useCallback(
236
- (action) => {
237
- const { columns: columns2 } = action;
238
- const hiddenColumns = columns2.map((c) => c.name);
239
- const newTableConfig = {
240
- ...tableConfig,
241
- columns: tableConfig.columns.map(
242
- (col) => hiddenColumns.includes(col.name) ? { ...col, hidden: true } : col
243
- )
244
- };
245
- applyTableConfigChange(newTableConfig);
246
- },
247
- [tableConfig, applyTableConfigChange]
248
- );
249
- const pinColumn = useCallback(
250
- (action) => {
251
- applyTableConfigChange({
252
- ...tableConfig,
253
- columns: updateColumn(tableConfig.columns, {
254
- ...action.column,
255
- pin: action.pin
256
- })
257
- });
258
- },
259
- [tableConfig, applyTableConfigChange]
260
- );
261
- const { showColumnSettingsPanel, showTableSettingsPanel } = useTableAndColumnSettings({
262
- availableColumns: availableColumns ?? tableConfig.columns.map(({ name, serverDataType = "string" }) => ({
263
- name,
264
- serverDataType
265
- })),
266
- onAvailableColumnsChange,
267
- onConfigChange: handleConfigEditedInSettingsPanel,
268
- onCreateCalculatedColumn: handleCreateCalculatedColumn,
269
- onDataSourceConfigChange: handleDataSourceConfigChanged,
270
- settingsPermissions: {
271
- allowColumnSettings: columnSettingsFromColumnMenuPermissions(
272
- showColumnHeaderMenus
273
- ),
274
- allowTableSettings: tableSettingsFromColumnMenuPermissions(
275
- showColumnHeaderMenus
276
- )
277
- },
278
- tableConfig
279
- });
280
- const handleColumnDisplayAction = useCallback(
281
- (action) => {
282
- const { type } = action;
283
- switch (type) {
284
- case "hideColumn":
285
- return hideColumns({
286
- type: "hideColumns",
287
- columns: [action.column]
288
- });
289
- case "pinColumn":
290
- return pinColumn(action);
291
- default:
292
- logUnhandledMessage(type, "[vuu-table] handleColumnDisplayAction");
293
- }
294
- },
295
- [hideColumns, pinColumn]
296
- );
297
- const handleDisplaySettingsAction = useCallback(
298
- (action) => {
299
- if (action.type === "column-settings") {
300
- showColumnSettingsPanel(action);
301
- } else {
302
- showTableSettingsPanel();
303
- }
304
- },
305
- [showColumnSettingsPanel, showTableSettingsPanel]
306
- );
307
- const handleColumnAction = useColumnActions({
308
- dataSource,
309
- onColumnDisplayAction: handleColumnDisplayAction,
310
- onDisplaySettingsAction: handleDisplaySettingsAction
311
- });
312
- const handleSort = useCallback(
313
- (column, extendSort = false, sortType) => {
314
- if (dataSource) {
315
- dataSource.sort = toggleOrApplySort(
316
- dataSource.sort,
317
- column,
318
- extendSort,
319
- sortType
320
- );
321
- }
322
- },
323
- [dataSource]
324
- );
325
- const resizeCells = useRef(void 0);
326
- const onResizeColumn = useCallback(
327
- (phase, columnName, width) => {
328
- const column = columns.find((column2) => column2.name === columnName);
329
- if (column) {
330
- if (phase === "resize") {
331
- resizeCells.current?.forEach((cell) => {
332
- cell.style.width = `${width}px`;
333
- });
334
- } else if (phase === "end") {
335
- resizeCells.current = void 0;
336
- if (isValidNumber(width)) {
337
- dispatchTableModelAction({
338
- type: "resizeColumn",
339
- phase,
340
- column,
341
- width
342
- });
343
- onConfigChange?.(
344
- stripInternalProperties(
345
- updateTableConfig(tableConfig, {
346
- type: "col-size",
347
- column,
348
- columns,
349
- width
350
- })
351
- )
352
- );
353
- }
354
- } else {
355
- const byColIndex = `[aria-colindex='${column.ariaColIndex}']`;
356
- resizeCells.current = Array.from(
357
- containerRef.current?.querySelectorAll(
358
- `.vuuTableCell${byColIndex},.vuuTableHeaderCell${byColIndex}`
359
- ) ?? []
360
- );
361
- dispatchTableModelAction({
362
- type: "resizeColumn",
363
- phase,
364
- column,
365
- width
366
- });
367
- }
368
- } else {
369
- throw Error(
370
- `useDataTable.handleColumnResize, column ${columnName} not found`
371
- );
372
- }
373
- },
374
- [
375
- columns,
376
- dispatchTableModelAction,
377
- onConfigChange,
378
- tableConfig,
379
- containerRef
380
- ]
381
- );
382
- const onToggleGroup = useCallback(
383
- (row, column) => {
384
- const isJson = isJsonGroup(column, row, columnMap);
385
- const key = row[KEY];
386
- if (row[IS_EXPANDED]) {
387
- dataSource.closeTreeNode(key, true);
388
- if (isJson) {
389
- const idx = columns.indexOf(column);
390
- const rows = dataSource.getRowsAtDepth?.(idx + 1);
391
- if (rows && !rows.some((row2) => row2[IS_EXPANDED] || row2[IS_LEAF])) {
392
- dispatchTableModelAction({
393
- type: "hideColumns",
394
- columns: columns.slice(idx + 2)
395
- });
396
- }
397
- }
398
- } else {
399
- dataSource.openTreeNode(key);
400
- if (isJson) {
401
- const childRows = dataSource.getChildRows?.(key);
402
- const idx = columns.indexOf(column) + 1;
403
- const columnsToShow = [columns[idx]];
404
- if (childRows && childRows.some((row2) => row2[IS_LEAF])) {
405
- columnsToShow.push(columns[idx + 1]);
406
- }
407
- if (columnsToShow.some((col) => col.hidden)) {
408
- dispatchTableModelAction({
409
- type: "showColumns",
410
- columns: columnsToShow
411
- });
412
- }
413
- }
414
- }
415
- },
416
- [columnMap, columns, dataSource, dispatchTableModelAction]
417
- );
418
- const handleToggleGroup = useCallback(
419
- (treeNodeOperation, rowIdx) => {
420
- if (treeNodeOperation === "expand") {
421
- dataSource.openTreeNode(rowIdx);
422
- } else {
423
- dataSource.closeTreeNode(rowIdx);
424
- }
425
- },
426
- [dataSource]
427
- );
428
- const {
429
- focusCell,
430
- focusCellPlaceholderKeyDown,
431
- focusCellPlaceholderRef,
432
- setTableBodyRef: tableBodyRef
433
- } = useCellFocus({
434
- cellFocusStateRef,
435
- containerRef,
436
- disableFocus,
437
- requestScroll
438
- });
439
- focusCellRef.current = focusCell;
440
- const columnCount = columns.filter((c) => c.hidden !== true).length;
441
- const {
442
- highlightedIndexRef,
443
- navigateCell: navigate,
444
- onFocus: navigationFocus,
445
- onKeyDown: navigationKeyDown,
446
- ...containerProps
447
- } = useKeyboardNavigation({
448
- cellFocusStateRef,
449
- columnCount,
450
- containerRef,
451
- disableFocus,
452
- focusCell,
453
- headerCount: headerState.count,
454
- highlightedIndex: highlightedIndexProp,
455
- navigationStyle,
456
- requestScroll,
457
- rowCount,
458
- onHighlight,
459
- onToggleGroup: handleToggleGroup,
460
- viewportRange: range,
461
- viewportRowCount: viewportMeasurements.rowCount
462
- });
463
- const {
464
- onBlur: editingBlur,
465
- onDoubleClick: editingDoubleClick,
466
- onKeyDown: editingKeyDown,
467
- onFocus: editingFocus
468
- } = useCellEditing({
469
- navigate
470
- });
471
- const handleFocus = useCallback(
472
- (e) => {
473
- navigationFocus();
474
- if (!e.defaultPrevented) {
475
- editingFocus(e);
476
- }
477
- },
478
- [editingFocus, navigationFocus]
479
- );
480
- const onContextMenu = useTableContextMenu({
481
- columns,
482
- data,
483
- dataSource,
484
- getSelectedRows,
485
- headerCount: headerState.count
486
- });
487
- const onMoveGroupColumn = useCallback(
488
- (columns2) => {
489
- dataSource.groupBy = columns2.map((col) => col.name);
490
- },
491
- [dataSource]
492
- );
493
- const onRemoveGroupColumn = useCallback(
494
- (column) => {
495
- if (isGroupColumn(column)) {
496
- dataSource.groupBy = [];
497
- } else {
498
- if (dataSource && dataSource.groupBy?.includes(column.name)) {
499
- dataSource.groupBy = dataSource.groupBy.filter(
500
- (columnName) => columnName !== column.name
501
- );
502
- }
503
- }
504
- },
505
- [dataSource]
506
- );
507
- const handleSelectionChange = useCallback(
508
- (selected) => {
509
- dataSource.select(selected);
510
- onSelectionChange?.(selected);
511
- },
512
- [dataSource, onSelectionChange]
513
- );
514
- const handleSelect = useCallback(
515
- (row) => {
516
- if (onSelect) {
517
- onSelect(row === null ? null : rowToObject(row, columnMap));
518
- }
519
- },
520
- [columnMap, onSelect, rowToObject]
521
- );
522
- const {
523
- onKeyDown: selectionHookKeyDown,
524
- onRowClick: selectionHookOnRowClick
525
- } = useSelection({
526
- containerRef,
527
- defaultSelectedIndexValues,
528
- highlightedIndexRef,
529
- onSelect: handleSelect,
530
- onSelectionChange: handleSelectionChange,
531
- selectionModel
532
- });
533
- const handleSelectCellBlock = useCallback(
534
- (cellBlock2) => {
535
- handleSelectionChange([]);
536
- onSelectCellBlock?.(cellBlock2);
537
- },
538
- [handleSelectionChange, onSelectCellBlock]
539
- );
540
- const {
541
- onMouseDown: cellBlockHookMouseDown,
542
- cellBlock,
543
- onKeyDown: cellBlockSelectionKeyDown
544
- } = useCellBlockSelection({
545
- allowCellBlockSelection,
546
- columnCount,
547
- containerRef,
548
- onSelectCellBlock: handleSelectCellBlock,
549
- rowCount
550
- });
551
- const handleRowClick = useCallback(
552
- (evt, row, rangeSelect, keepExistingSelection) => {
553
- selectionHookOnRowClick(evt, row, rangeSelect, keepExistingSelection);
554
- onRowClickProp?.(evt, rowToObject(row, columnMap));
555
- },
556
- [columnMap, onRowClickProp, rowToObject, selectionHookOnRowClick]
557
- );
558
- const handleKeyDown = useCallback(
559
- (e) => {
560
- cellBlockSelectionKeyDown?.(e);
561
- if (!e.defaultPrevented) {
562
- navigationKeyDown(e);
563
- }
564
- if (!e.defaultPrevented) {
565
- editingKeyDown(e);
566
- }
567
- if (!e.defaultPrevented) {
568
- selectionHookKeyDown(e);
569
- }
570
- },
571
- [
572
- cellBlockSelectionKeyDown,
573
- navigationKeyDown,
574
- editingKeyDown,
575
- selectionHookKeyDown
576
- ]
577
- );
578
- const onMoveColumn = useCallback(
579
- (columnName, columns2) => {
580
- const newTableConfig = {
581
- ...tableConfig,
582
- columns: columns2
583
- };
584
- tableConfigRef.current = newTableConfig;
585
- dispatchTableModelAction({
586
- availableWidth,
587
- type: "init",
588
- tableConfig: newTableConfig,
589
- dataSource
590
- });
591
- onConfigChange?.(stripInternalProperties(newTableConfig));
592
- setTimeout(() => {
593
- const headerCell = getHeaderCell(containerRef, columnName);
594
- if (headerCell) {
595
- const { ariaColIndex } = headerCell;
596
- const { ariaRowIndex } = headerCell.parentElement;
597
- const col = parseInt(ariaColIndex ?? "-1");
598
- const row = parseInt(ariaRowIndex ?? "-1");
599
- if (!isNaN(col) && col !== -1 && !isNaN(row) && row !== -1) {
600
- focusCell([row, col]);
601
- }
602
- }
603
- }, 300);
604
- },
605
- [
606
- availableWidth,
607
- containerRef,
608
- dataSource,
609
- dispatchTableModelAction,
610
- focusCell,
611
- onConfigChange,
612
- tableConfig
613
- ]
614
- );
615
- const handleDropRow = useCallback(
616
- // TODO - this should be GlobalDropHandler
617
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
618
- (dragDropState) => {
619
- onDrop?.(dragDropState);
620
- },
621
- [onDrop]
622
- );
623
- const handleDataEdited = useCallback(
624
- async (editState) => {
625
- const {
626
- editType = "commit",
627
- isValid = true,
628
- row,
629
- columnName,
630
- value
631
- } = editState;
632
- let result = void 0;
633
- if (editType === "commit" && isValid) {
634
- result = await dataSource.applyEdit(
635
- row[KEY],
636
- columnName,
637
- value
638
- );
639
- onDataEditedProp?.({ ...editState, isValid: result === true });
640
- return result;
641
- } else {
642
- onDataEditedProp?.(editState);
643
- }
644
- },
645
- [dataSource, onDataEditedProp]
646
- );
647
- const handleDragStartRow = useCallback(
648
- (dragDropState) => {
649
- const { initialDragElement } = dragDropState;
650
- const rowIndex = getAriaRowIndex(initialDragElement) - headerState.count - 1;
651
- const row = dataRef.current.find((row2) => row2[0] === rowIndex);
652
- if (row) {
653
- dragDropState.setPayload(row);
654
- }
655
- onDragStart?.(dragDropState);
656
- },
657
- [dataRef, headerState.count, onDragStart]
658
- );
659
- const onHeaderHeightMeasured = useCallback(
660
- (height, count) => {
661
- setHeaderState({ height, count });
662
- },
663
- []
664
- );
665
- const { onMouseDown: rowDragMouseDown, draggable: draggableRow } = useRowDragDrop({
666
- allowDragDrop,
667
- containerRef,
668
- draggableClassName: `vuuTable`,
669
- id,
670
- onDragStart: handleDragStartRow,
671
- onDrop: handleDropRow,
672
- orientation: "vertical",
673
- itemQuery: ".vuuTableRow"
674
- });
675
- const handleMouseDown = useCallback(
676
- (evt) => {
677
- rowDragMouseDown?.(evt);
678
- if (!evt.isPropagationStopped()) {
679
- cellBlockHookMouseDown?.(evt);
680
- }
681
- },
682
- [rowDragMouseDown, cellBlockHookMouseDown]
683
- );
684
- return {
685
- ...containerProps,
686
- "aria-rowcount": dataSource.size,
687
- cellBlock,
688
- columnMap,
689
- columns,
690
- data,
691
- draggableRow,
692
- focusCellPlaceholderKeyDown,
693
- focusCellPlaceholderRef,
694
- getRowOffset,
695
- handleColumnAction,
696
- headerState,
697
- headings,
698
- highlightedIndex: highlightedIndexRef.current,
699
- onBlur: editingBlur,
700
- onDoubleClick: editingDoubleClick,
701
- onFocus: handleFocus,
702
- onKeyDown: handleKeyDown,
703
- onMouseDown: handleMouseDown,
704
- onContextMenu,
705
- onDataEdited: handleDataEdited,
706
- onHeaderHeightMeasured,
707
- onMoveColumn,
708
- onMoveGroupColumn,
709
- onRemoveGroupColumn,
710
- onRowClick: handleRowClick,
711
- onSortColumn: handleSort,
712
- onResizeColumn,
713
- onToggleGroup,
714
- rowClassNameGenerator,
715
- scrollProps,
716
- // TODO don't think we need these ...
717
- tableAttributes,
718
- tableBodyRef,
719
- tableConfig,
720
- viewportMeasurements
721
- };
722
- };
723
-
724
- export { useTable };
725
- //# sourceMappingURL=useTable.js.map