@vuu-ui/vuu-table 0.13.6 → 0.13.8

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