@vuu-ui/vuu-table 2.1.18 → 2.1.19-beta.1

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