@vuu-ui/vuu-table 0.13.7 → 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 (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/cjs/useTable.js DELETED
@@ -1,727 +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
- (columnName, columns2) => {
582
- const newTableConfig = {
583
- ...tableConfig$1,
584
- columns: columns2
585
- };
586
- tableConfigRef.current = newTableConfig;
587
- dispatchTableModelAction({
588
- availableWidth,
589
- type: "init",
590
- tableConfig: newTableConfig,
591
- dataSource
592
- });
593
- onConfigChange?.(stripInternalProperties(newTableConfig));
594
- setTimeout(() => {
595
- const headerCell = tableDomUtils.getHeaderCell(containerRef, columnName);
596
- if (headerCell) {
597
- const { ariaColIndex } = headerCell;
598
- const { ariaRowIndex } = headerCell.parentElement;
599
- const col = parseInt(ariaColIndex ?? "-1");
600
- const row = parseInt(ariaRowIndex ?? "-1");
601
- if (!isNaN(col) && col !== -1 && !isNaN(row) && row !== -1) {
602
- focusCell([row, col]);
603
- }
604
- }
605
- }, 300);
606
- },
607
- [
608
- availableWidth,
609
- containerRef,
610
- dataSource,
611
- dispatchTableModelAction,
612
- focusCell,
613
- onConfigChange,
614
- tableConfig$1
615
- ]
616
- );
617
- const handleDropRow = react.useCallback(
618
- // TODO - this should be GlobalDropHandler
619
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
620
- (dragDropState) => {
621
- onDrop?.(dragDropState);
622
- },
623
- [onDrop]
624
- );
625
- const handleDataEdited = react.useCallback(
626
- async (editState) => {
627
- const {
628
- editType = "commit",
629
- isValid = true,
630
- row,
631
- columnName,
632
- value
633
- } = editState;
634
- let result = void 0;
635
- if (editType === "commit" && isValid) {
636
- result = await dataSource.applyEdit(
637
- row[KEY],
638
- columnName,
639
- value
640
- );
641
- onDataEditedProp?.({ ...editState, isValid: result === true });
642
- return result;
643
- } else {
644
- onDataEditedProp?.(editState);
645
- }
646
- },
647
- [dataSource, onDataEditedProp]
648
- );
649
- const handleDragStartRow = react.useCallback(
650
- (dragDropState) => {
651
- const { initialDragElement } = dragDropState;
652
- const rowIndex = tableDomUtils.getAriaRowIndex(initialDragElement) - headerState.count - 1;
653
- const row = dataRef.current.find((row2) => row2[0] === rowIndex);
654
- if (row) {
655
- dragDropState.setPayload(row);
656
- }
657
- onDragStart?.(dragDropState);
658
- },
659
- [dataRef, headerState.count, onDragStart]
660
- );
661
- const onHeaderHeightMeasured = react.useCallback(
662
- (height, count) => {
663
- setHeaderState({ height, count });
664
- },
665
- []
666
- );
667
- const { onMouseDown: rowDragMouseDown, draggable: draggableRow } = useRowDragDrop({
668
- allowDragDrop,
669
- containerRef,
670
- draggableClassName: `vuuTable`,
671
- id,
672
- onDragStart: handleDragStartRow,
673
- onDrop: handleDropRow,
674
- orientation: "vertical",
675
- itemQuery: ".vuuTableRow"
676
- });
677
- const handleMouseDown = react.useCallback(
678
- (evt) => {
679
- rowDragMouseDown?.(evt);
680
- if (!evt.isPropagationStopped()) {
681
- cellBlockHookMouseDown?.(evt);
682
- }
683
- },
684
- [rowDragMouseDown, cellBlockHookMouseDown]
685
- );
686
- return {
687
- ...containerProps,
688
- "aria-rowcount": dataSource.size,
689
- cellBlock,
690
- columnMap,
691
- columns,
692
- data,
693
- draggableRow,
694
- focusCellPlaceholderKeyDown,
695
- focusCellPlaceholderRef,
696
- getRowOffset,
697
- handleColumnAction,
698
- headerState,
699
- headings,
700
- highlightedIndex: highlightedIndexRef.current,
701
- onBlur: editingBlur,
702
- onDoubleClick: editingDoubleClick,
703
- onFocus: handleFocus,
704
- onKeyDown: handleKeyDown,
705
- onMouseDown: handleMouseDown,
706
- onContextMenu,
707
- onDataEdited: handleDataEdited,
708
- onHeaderHeightMeasured,
709
- onMoveColumn,
710
- onMoveGroupColumn,
711
- onRemoveGroupColumn,
712
- onRowClick: handleRowClick,
713
- onSortColumn: handleSort,
714
- onResizeColumn,
715
- onToggleGroup,
716
- rowClassNameGenerator,
717
- scrollProps,
718
- // TODO don't think we need these ...
719
- tableAttributes,
720
- tableBodyRef,
721
- tableConfig: tableConfig$1,
722
- viewportMeasurements
723
- };
724
- };
725
-
726
- exports.useTable = useTable;
727
- //# sourceMappingURL=useTable.js.map