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

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 (372) hide show
  1. package/package.json +13 -16
  2. package/src/CellFocusState.mjs +25 -0
  3. package/src/Row.mjs +83 -0
  4. package/src/Table.css.js +441 -0
  5. package/src/Table.mjs +297 -0
  6. package/src/VirtualColSpan.mjs +12 -0
  7. package/src/applyHighlighting.mjs +28 -0
  8. package/src/bulk-edit/BulkEditPanel.css.js +27 -0
  9. package/src/bulk-edit/BulkEditPanel.mjs +77 -0
  10. package/src/bulk-edit/ColumnCascadingUpdateEditor.css.js +86 -0
  11. package/src/bulk-edit/ColumnCascadingUpdateEditor.mjs +59 -0
  12. package/src/bulk-edit/InsertNewRowEditor.css.js +86 -0
  13. package/src/bulk-edit/InsertNewRowEditor.mjs +59 -0
  14. package/src/bulk-edit/useBulkEditPanel.mjs +61 -0
  15. package/src/bulk-edit/useColumnCascadingEditor.mjs +124 -0
  16. package/src/cell-block/CellBlock.css.js +95 -0
  17. package/src/cell-block/CellBlock.mjs +32 -0
  18. package/src/cell-block/cellblock-utils.mjs +114 -0
  19. package/src/cell-block/useCellBlockSelection.mjs +245 -0
  20. package/src/cell-renderers/checkbox-cell/CheckboxCell.css.js +16 -0
  21. package/src/cell-renderers/checkbox-cell/CheckboxCell.mjs +56 -0
  22. package/src/cell-renderers/checkbox-cell/index.mjs +1 -0
  23. package/src/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js +19 -0
  24. package/src/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.mjs +34 -0
  25. package/src/cell-renderers/checkbox-row-selector/index.mjs +1 -0
  26. package/src/cell-renderers/index.mjs +4 -0
  27. package/src/cell-renderers/input-cell/InputCell.css.js +81 -0
  28. package/src/cell-renderers/input-cell/InputCell.mjs +73 -0
  29. package/src/cell-renderers/input-cell/index.mjs +1 -0
  30. package/src/cell-renderers/input-cell/useInputCell.mjs +199 -0
  31. package/src/cell-renderers/toggle-cell/ToggleCell.css.js +31 -0
  32. package/src/cell-renderers/toggle-cell/ToggleCell.mjs +47 -0
  33. package/src/cell-renderers/toggle-cell/index.mjs +1 -0
  34. package/src/column-header-pill/ColumnHeaderPill.css.js +34 -0
  35. package/src/column-header-pill/ColumnHeaderPill.mjs +39 -0
  36. package/src/column-header-pill/GroupColumnPill.css.js +10 -0
  37. package/src/column-header-pill/GroupColumnPill.mjs +33 -0
  38. package/src/column-header-pill/SortIndicator.css.js +15 -0
  39. package/src/column-header-pill/SortIndicator.mjs +29 -0
  40. package/src/column-header-pill/index.mjs +3 -0
  41. package/src/column-resizing/ColumnResizer.css.js +32 -0
  42. package/src/column-resizing/ColumnResizer.mjs +69 -0
  43. package/src/column-resizing/index.mjs +2 -0
  44. package/src/column-resizing/useTableColumnResize.mjs +57 -0
  45. package/src/data-row/DataRow.mjs +298 -0
  46. package/src/header-cell/GroupHeaderCell.css.js +91 -0
  47. package/src/header-cell/GroupHeaderCell.mjs +98 -0
  48. package/src/header-cell/HeaderCell.css.js +182 -0
  49. package/src/header-cell/HeaderCell.mjs +126 -0
  50. package/src/header-cell/index.mjs +2 -0
  51. package/src/index.mjs +20 -0
  52. package/src/pagination/PaginationControl.css.js +18 -0
  53. package/src/pagination/PaginationControl.mjs +34 -0
  54. package/src/pagination/index.mjs +1 -0
  55. package/src/pagination/usePagination.mjs +29 -0
  56. package/src/table-cell/TableCell.css.js +67 -0
  57. package/src/table-cell/TableCell.mjs +54 -0
  58. package/src/table-cell/TableGroupCell.css.js +91 -0
  59. package/src/table-cell/TableGroupCell.mjs +61 -0
  60. package/src/table-cell/index.mjs +2 -0
  61. package/src/table-config/useTableConfig.mjs +49 -0
  62. package/src/table-config.mjs +38 -0
  63. package/src/table-data-source/DataRowMovingWindow.mjs +66 -0
  64. package/src/table-data-source/useDataSource.mjs +177 -0
  65. package/src/table-dom-utils.mjs +162 -0
  66. package/src/table-header/HeaderProvider.mjs +14 -0
  67. package/src/table-header/TableHeader.mjs +182 -0
  68. package/src/table-header/index.mjs +2 -0
  69. package/src/table-header/useTableHeader.mjs +69 -0
  70. package/src/useCell.mjs +22 -0
  71. package/src/useCellEditing.mjs +58 -0
  72. package/src/useCellFocus.mjs +112 -0
  73. package/src/useControlledTableNavigation.mjs +34 -0
  74. package/src/useEditableCell.mjs +18 -0
  75. package/src/useInitialValue.mjs +6 -0
  76. package/src/useKeyboardNavigation.mjs +275 -0
  77. package/src/useMeasuredHeight.mjs +44 -0
  78. package/src/useResizeObserver.mjs +118 -0
  79. package/src/useRowClassNameGenerators.mjs +21 -0
  80. package/src/useSelection.mjs +101 -0
  81. package/src/useTable.mjs +588 -0
  82. package/src/useTableContextMenu.mjs +54 -0
  83. package/src/useTableModel.mjs +344 -0
  84. package/src/useTableScroll.mjs +382 -0
  85. package/src/useTableViewport.mjs +120 -0
  86. package/types/VirtualColSpan.d.ts +2 -2
  87. package/types/cell-renderers/toggle-cell/ToggleCell.d.ts +1 -1
  88. package/types/useTable.d.ts +3 -3
  89. package/cjs/CellFocusState.js +0 -45
  90. package/cjs/CellFocusState.js.map +0 -1
  91. package/cjs/Row.js +0 -116
  92. package/cjs/Row.js.map +0 -1
  93. package/cjs/Table.css.js +0 -6
  94. package/cjs/Table.css.js.map +0 -1
  95. package/cjs/Table.js +0 -455
  96. package/cjs/Table.js.map +0 -1
  97. package/cjs/VirtualColSpan.js +0 -19
  98. package/cjs/VirtualColSpan.js.map +0 -1
  99. package/cjs/applyHighlighting.js +0 -33
  100. package/cjs/applyHighlighting.js.map +0 -1
  101. package/cjs/bulk-edit/BulkEditPanel.css.js +0 -6
  102. package/cjs/bulk-edit/BulkEditPanel.css.js.map +0 -1
  103. package/cjs/bulk-edit/BulkEditPanel.js +0 -107
  104. package/cjs/bulk-edit/BulkEditPanel.js.map +0 -1
  105. package/cjs/bulk-edit/ColumnCascadingUpdateEditor.css.js +0 -6
  106. package/cjs/bulk-edit/ColumnCascadingUpdateEditor.css.js.map +0 -1
  107. package/cjs/bulk-edit/ColumnCascadingUpdateEditor.js +0 -80
  108. package/cjs/bulk-edit/ColumnCascadingUpdateEditor.js.map +0 -1
  109. package/cjs/bulk-edit/InsertNewRowEditor.css.js +0 -6
  110. package/cjs/bulk-edit/InsertNewRowEditor.css.js.map +0 -1
  111. package/cjs/bulk-edit/InsertNewRowEditor.js +0 -80
  112. package/cjs/bulk-edit/InsertNewRowEditor.js.map +0 -1
  113. package/cjs/bulk-edit/useBulkEditPanel.js +0 -70
  114. package/cjs/bulk-edit/useBulkEditPanel.js.map +0 -1
  115. package/cjs/bulk-edit/useColumnCascadingEditor.js +0 -143
  116. package/cjs/bulk-edit/useColumnCascadingEditor.js.map +0 -1
  117. package/cjs/cell-block/CellBlock.css.js +0 -6
  118. package/cjs/cell-block/CellBlock.css.js.map +0 -1
  119. package/cjs/cell-block/CellBlock.js +0 -45
  120. package/cjs/cell-block/CellBlock.js.map +0 -1
  121. package/cjs/cell-block/cellblock-utils.js +0 -125
  122. package/cjs/cell-block/cellblock-utils.js.map +0 -1
  123. package/cjs/cell-block/useCellBlockSelection.js +0 -257
  124. package/cjs/cell-block/useCellBlockSelection.js.map +0 -1
  125. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.css.js +0 -6
  126. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.css.js.map +0 -1
  127. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js +0 -67
  128. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js.map +0 -1
  129. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js +0 -6
  130. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js.map +0 -1
  131. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js +0 -51
  132. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js.map +0 -1
  133. package/cjs/cell-renderers/input-cell/InputCell.css.js +0 -6
  134. package/cjs/cell-renderers/input-cell/InputCell.css.js.map +0 -1
  135. package/cjs/cell-renderers/input-cell/InputCell.js +0 -63
  136. package/cjs/cell-renderers/input-cell/InputCell.js.map +0 -1
  137. package/cjs/cell-renderers/input-cell/useInputCell.js +0 -211
  138. package/cjs/cell-renderers/input-cell/useInputCell.js.map +0 -1
  139. package/cjs/cell-renderers/toggle-cell/ToggleCell.css.js +0 -6
  140. package/cjs/cell-renderers/toggle-cell/ToggleCell.css.js.map +0 -1
  141. package/cjs/cell-renderers/toggle-cell/ToggleCell.js +0 -66
  142. package/cjs/cell-renderers/toggle-cell/ToggleCell.js.map +0 -1
  143. package/cjs/column-header-pill/ColumnHeaderPill.css.js +0 -6
  144. package/cjs/column-header-pill/ColumnHeaderPill.css.js.map +0 -1
  145. package/cjs/column-header-pill/ColumnHeaderPill.js +0 -53
  146. package/cjs/column-header-pill/ColumnHeaderPill.js.map +0 -1
  147. package/cjs/column-header-pill/GroupColumnPill.css.js +0 -6
  148. package/cjs/column-header-pill/GroupColumnPill.css.js.map +0 -1
  149. package/cjs/column-header-pill/GroupColumnPill.js +0 -29
  150. package/cjs/column-header-pill/GroupColumnPill.js.map +0 -1
  151. package/cjs/column-header-pill/SortIndicator.css.js +0 -6
  152. package/cjs/column-header-pill/SortIndicator.css.js.map +0 -1
  153. package/cjs/column-header-pill/SortIndicator.js +0 -27
  154. package/cjs/column-header-pill/SortIndicator.js.map +0 -1
  155. package/cjs/column-resizing/ColumnResizer.css.js +0 -6
  156. package/cjs/column-resizing/ColumnResizer.css.js.map +0 -1
  157. package/cjs/column-resizing/ColumnResizer.js +0 -82
  158. package/cjs/column-resizing/ColumnResizer.js.map +0 -1
  159. package/cjs/column-resizing/useTableColumnResize.js +0 -55
  160. package/cjs/column-resizing/useTableColumnResize.js.map +0 -1
  161. package/cjs/data-row/DataRow.js +0 -262
  162. package/cjs/data-row/DataRow.js.map +0 -1
  163. package/cjs/header-cell/GroupHeaderCell.css.js +0 -6
  164. package/cjs/header-cell/GroupHeaderCell.css.js.map +0 -1
  165. package/cjs/header-cell/GroupHeaderCell.js +0 -127
  166. package/cjs/header-cell/GroupHeaderCell.js.map +0 -1
  167. package/cjs/header-cell/HeaderCell.css.js +0 -6
  168. package/cjs/header-cell/HeaderCell.css.js.map +0 -1
  169. package/cjs/header-cell/HeaderCell.js +0 -139
  170. package/cjs/header-cell/HeaderCell.js.map +0 -1
  171. package/cjs/index.js +0 -64
  172. package/cjs/index.js.map +0 -1
  173. package/cjs/pagination/PaginationControl.css.js +0 -6
  174. package/cjs/pagination/PaginationControl.css.js.map +0 -1
  175. package/cjs/pagination/PaginationControl.js +0 -38
  176. package/cjs/pagination/PaginationControl.js.map +0 -1
  177. package/cjs/pagination/usePagination.js +0 -36
  178. package/cjs/pagination/usePagination.js.map +0 -1
  179. package/cjs/table-cell/TableCell.css.js +0 -6
  180. package/cjs/table-cell/TableCell.css.js.map +0 -1
  181. package/cjs/table-cell/TableCell.js +0 -75
  182. package/cjs/table-cell/TableCell.js.map +0 -1
  183. package/cjs/table-cell/TableGroupCell.css.js +0 -6
  184. package/cjs/table-cell/TableGroupCell.css.js.map +0 -1
  185. package/cjs/table-cell/TableGroupCell.js +0 -65
  186. package/cjs/table-cell/TableGroupCell.js.map +0 -1
  187. package/cjs/table-config/useTableConfig.js +0 -67
  188. package/cjs/table-config/useTableConfig.js.map +0 -1
  189. package/cjs/table-config.js +0 -35
  190. package/cjs/table-config.js.map +0 -1
  191. package/cjs/table-data-source/DataRowMovingWindow.js +0 -99
  192. package/cjs/table-data-source/DataRowMovingWindow.js.map +0 -1
  193. package/cjs/table-data-source/useDataSource.js +0 -236
  194. package/cjs/table-data-source/useDataSource.js.map +0 -1
  195. package/cjs/table-dom-utils.js +0 -206
  196. package/cjs/table-dom-utils.js.map +0 -1
  197. package/cjs/table-header/HeaderProvider.js +0 -18
  198. package/cjs/table-header/HeaderProvider.js.map +0 -1
  199. package/cjs/table-header/TableHeader.js +0 -180
  200. package/cjs/table-header/TableHeader.js.map +0 -1
  201. package/cjs/table-header/useTableHeader.js +0 -87
  202. package/cjs/table-header/useTableHeader.js.map +0 -1
  203. package/cjs/useCell.js +0 -26
  204. package/cjs/useCell.js.map +0 -1
  205. package/cjs/useCellEditing.js +0 -77
  206. package/cjs/useCellEditing.js.map +0 -1
  207. package/cjs/useCellFocus.js +0 -119
  208. package/cjs/useCellFocus.js.map +0 -1
  209. package/cjs/useControlledTableNavigation.js +0 -46
  210. package/cjs/useControlledTableNavigation.js.map +0 -1
  211. package/cjs/useEditableCell.js +0 -27
  212. package/cjs/useEditableCell.js.map +0 -1
  213. package/cjs/useKeyboardNavigation.js +0 -323
  214. package/cjs/useKeyboardNavigation.js.map +0 -1
  215. package/cjs/useMeasuredHeight.js +0 -51
  216. package/cjs/useMeasuredHeight.js.map +0 -1
  217. package/cjs/useRowClassNameGenerators.js +0 -34
  218. package/cjs/useRowClassNameGenerators.js.map +0 -1
  219. package/cjs/useSelection.js +0 -130
  220. package/cjs/useSelection.js.map +0 -1
  221. package/cjs/useTable.js +0 -742
  222. package/cjs/useTable.js.map +0 -1
  223. package/cjs/useTableContextMenu.js +0 -76
  224. package/cjs/useTableContextMenu.js.map +0 -1
  225. package/cjs/useTableModel.js +0 -421
  226. package/cjs/useTableModel.js.map +0 -1
  227. package/cjs/useTableScroll.js +0 -464
  228. package/cjs/useTableScroll.js.map +0 -1
  229. package/cjs/useTableViewport.js +0 -137
  230. package/cjs/useTableViewport.js.map +0 -1
  231. package/esm/CellFocusState.js +0 -43
  232. package/esm/CellFocusState.js.map +0 -1
  233. package/esm/Row.js +0 -114
  234. package/esm/Row.js.map +0 -1
  235. package/esm/Table.css.js +0 -4
  236. package/esm/Table.css.js.map +0 -1
  237. package/esm/Table.js +0 -453
  238. package/esm/Table.js.map +0 -1
  239. package/esm/VirtualColSpan.js +0 -17
  240. package/esm/VirtualColSpan.js.map +0 -1
  241. package/esm/applyHighlighting.js +0 -31
  242. package/esm/applyHighlighting.js.map +0 -1
  243. package/esm/bulk-edit/BulkEditPanel.css.js +0 -4
  244. package/esm/bulk-edit/BulkEditPanel.css.js.map +0 -1
  245. package/esm/bulk-edit/BulkEditPanel.js +0 -105
  246. package/esm/bulk-edit/BulkEditPanel.js.map +0 -1
  247. package/esm/bulk-edit/ColumnCascadingUpdateEditor.css.js +0 -4
  248. package/esm/bulk-edit/ColumnCascadingUpdateEditor.css.js.map +0 -1
  249. package/esm/bulk-edit/ColumnCascadingUpdateEditor.js +0 -78
  250. package/esm/bulk-edit/ColumnCascadingUpdateEditor.js.map +0 -1
  251. package/esm/bulk-edit/InsertNewRowEditor.css.js +0 -4
  252. package/esm/bulk-edit/InsertNewRowEditor.css.js.map +0 -1
  253. package/esm/bulk-edit/InsertNewRowEditor.js +0 -78
  254. package/esm/bulk-edit/InsertNewRowEditor.js.map +0 -1
  255. package/esm/bulk-edit/useBulkEditPanel.js +0 -68
  256. package/esm/bulk-edit/useBulkEditPanel.js.map +0 -1
  257. package/esm/bulk-edit/useColumnCascadingEditor.js +0 -141
  258. package/esm/bulk-edit/useColumnCascadingEditor.js.map +0 -1
  259. package/esm/cell-block/CellBlock.css.js +0 -4
  260. package/esm/cell-block/CellBlock.css.js.map +0 -1
  261. package/esm/cell-block/CellBlock.js +0 -43
  262. package/esm/cell-block/CellBlock.js.map +0 -1
  263. package/esm/cell-block/cellblock-utils.js +0 -116
  264. package/esm/cell-block/cellblock-utils.js.map +0 -1
  265. package/esm/cell-block/useCellBlockSelection.js +0 -255
  266. package/esm/cell-block/useCellBlockSelection.js.map +0 -1
  267. package/esm/cell-renderers/checkbox-cell/CheckboxCell.css.js +0 -4
  268. package/esm/cell-renderers/checkbox-cell/CheckboxCell.css.js.map +0 -1
  269. package/esm/cell-renderers/checkbox-cell/CheckboxCell.js +0 -65
  270. package/esm/cell-renderers/checkbox-cell/CheckboxCell.js.map +0 -1
  271. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js +0 -4
  272. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.css.js.map +0 -1
  273. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js +0 -49
  274. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js.map +0 -1
  275. package/esm/cell-renderers/input-cell/InputCell.css.js +0 -4
  276. package/esm/cell-renderers/input-cell/InputCell.css.js.map +0 -1
  277. package/esm/cell-renderers/input-cell/InputCell.js +0 -61
  278. package/esm/cell-renderers/input-cell/InputCell.js.map +0 -1
  279. package/esm/cell-renderers/input-cell/useInputCell.js +0 -209
  280. package/esm/cell-renderers/input-cell/useInputCell.js.map +0 -1
  281. package/esm/cell-renderers/toggle-cell/ToggleCell.css.js +0 -4
  282. package/esm/cell-renderers/toggle-cell/ToggleCell.css.js.map +0 -1
  283. package/esm/cell-renderers/toggle-cell/ToggleCell.js +0 -64
  284. package/esm/cell-renderers/toggle-cell/ToggleCell.js.map +0 -1
  285. package/esm/column-header-pill/ColumnHeaderPill.css.js +0 -4
  286. package/esm/column-header-pill/ColumnHeaderPill.css.js.map +0 -1
  287. package/esm/column-header-pill/ColumnHeaderPill.js +0 -51
  288. package/esm/column-header-pill/ColumnHeaderPill.js.map +0 -1
  289. package/esm/column-header-pill/GroupColumnPill.css.js +0 -4
  290. package/esm/column-header-pill/GroupColumnPill.css.js.map +0 -1
  291. package/esm/column-header-pill/GroupColumnPill.js +0 -27
  292. package/esm/column-header-pill/GroupColumnPill.js.map +0 -1
  293. package/esm/column-header-pill/SortIndicator.css.js +0 -4
  294. package/esm/column-header-pill/SortIndicator.css.js.map +0 -1
  295. package/esm/column-header-pill/SortIndicator.js +0 -25
  296. package/esm/column-header-pill/SortIndicator.js.map +0 -1
  297. package/esm/column-resizing/ColumnResizer.css.js +0 -4
  298. package/esm/column-resizing/ColumnResizer.css.js.map +0 -1
  299. package/esm/column-resizing/ColumnResizer.js +0 -80
  300. package/esm/column-resizing/ColumnResizer.js.map +0 -1
  301. package/esm/column-resizing/useTableColumnResize.js +0 -53
  302. package/esm/column-resizing/useTableColumnResize.js.map +0 -1
  303. package/esm/data-row/DataRow.js +0 -260
  304. package/esm/data-row/DataRow.js.map +0 -1
  305. package/esm/header-cell/GroupHeaderCell.css.js +0 -4
  306. package/esm/header-cell/GroupHeaderCell.css.js.map +0 -1
  307. package/esm/header-cell/GroupHeaderCell.js +0 -125
  308. package/esm/header-cell/GroupHeaderCell.js.map +0 -1
  309. package/esm/header-cell/HeaderCell.css.js +0 -4
  310. package/esm/header-cell/HeaderCell.css.js.map +0 -1
  311. package/esm/header-cell/HeaderCell.js +0 -137
  312. package/esm/header-cell/HeaderCell.js.map +0 -1
  313. package/esm/index.js +0 -27
  314. package/esm/index.js.map +0 -1
  315. package/esm/pagination/PaginationControl.css.js +0 -4
  316. package/esm/pagination/PaginationControl.css.js.map +0 -1
  317. package/esm/pagination/PaginationControl.js +0 -36
  318. package/esm/pagination/PaginationControl.js.map +0 -1
  319. package/esm/pagination/usePagination.js +0 -34
  320. package/esm/pagination/usePagination.js.map +0 -1
  321. package/esm/table-cell/TableCell.css.js +0 -4
  322. package/esm/table-cell/TableCell.css.js.map +0 -1
  323. package/esm/table-cell/TableCell.js +0 -73
  324. package/esm/table-cell/TableCell.js.map +0 -1
  325. package/esm/table-cell/TableGroupCell.css.js +0 -4
  326. package/esm/table-cell/TableGroupCell.css.js.map +0 -1
  327. package/esm/table-cell/TableGroupCell.js +0 -63
  328. package/esm/table-cell/TableGroupCell.js.map +0 -1
  329. package/esm/table-config/useTableConfig.js +0 -65
  330. package/esm/table-config/useTableConfig.js.map +0 -1
  331. package/esm/table-config.js +0 -33
  332. package/esm/table-config.js.map +0 -1
  333. package/esm/table-data-source/DataRowMovingWindow.js +0 -97
  334. package/esm/table-data-source/DataRowMovingWindow.js.map +0 -1
  335. package/esm/table-data-source/useDataSource.js +0 -234
  336. package/esm/table-data-source/useDataSource.js.map +0 -1
  337. package/esm/table-dom-utils.js +0 -188
  338. package/esm/table-dom-utils.js.map +0 -1
  339. package/esm/table-header/HeaderProvider.js +0 -15
  340. package/esm/table-header/HeaderProvider.js.map +0 -1
  341. package/esm/table-header/TableHeader.js +0 -178
  342. package/esm/table-header/TableHeader.js.map +0 -1
  343. package/esm/table-header/useTableHeader.js +0 -85
  344. package/esm/table-header/useTableHeader.js.map +0 -1
  345. package/esm/useCell.js +0 -24
  346. package/esm/useCell.js.map +0 -1
  347. package/esm/useCellEditing.js +0 -75
  348. package/esm/useCellEditing.js.map +0 -1
  349. package/esm/useCellFocus.js +0 -117
  350. package/esm/useCellFocus.js.map +0 -1
  351. package/esm/useControlledTableNavigation.js +0 -43
  352. package/esm/useControlledTableNavigation.js.map +0 -1
  353. package/esm/useEditableCell.js +0 -25
  354. package/esm/useEditableCell.js.map +0 -1
  355. package/esm/useKeyboardNavigation.js +0 -319
  356. package/esm/useKeyboardNavigation.js.map +0 -1
  357. package/esm/useMeasuredHeight.js +0 -49
  358. package/esm/useMeasuredHeight.js.map +0 -1
  359. package/esm/useRowClassNameGenerators.js +0 -32
  360. package/esm/useRowClassNameGenerators.js.map +0 -1
  361. package/esm/useSelection.js +0 -128
  362. package/esm/useSelection.js.map +0 -1
  363. package/esm/useTable.js +0 -740
  364. package/esm/useTable.js.map +0 -1
  365. package/esm/useTableContextMenu.js +0 -73
  366. package/esm/useTableContextMenu.js.map +0 -1
  367. package/esm/useTableModel.js +0 -419
  368. package/esm/useTableModel.js.map +0 -1
  369. package/esm/useTableScroll.js +0 -461
  370. package/esm/useTableScroll.js.map +0 -1
  371. package/esm/useTableViewport.js +0 -135
  372. package/esm/useTableViewport.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"useTable.js","sources":["../../../packages/vuu-table/src/useTable.ts"],"sourcesContent":["import type {\n DataSourceConfigChangeHandler,\n DataSourceSubscribedMessage,\n} from \"@vuu-ui/vuu-data-types\";\nimport type { VuuSortType } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n ColumnDisplayActionHandler,\n useColumnActions,\n} from \"@vuu-ui/vuu-table-extras\";\nimport type {\n ColumnPinAction,\n ColumnDescriptor,\n ColumnMoveHandler,\n RuntimeColumnDescriptor,\n SelectionChangeHandler,\n TableColumnResizeHandler,\n TableConfig,\n TableConfigChangeType,\n TableRowClickHandlerInternal,\n TableRowSelectHandlerInternal,\n TableSelectionModel,\n DataRow,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n DragStartHandler,\n MeasuredProps,\n MeasuredSize,\n useDragDrop,\n} from \"@vuu-ui/vuu-ui-controls\";\nimport {\n getAllCellsInColumn,\n getAriaRowIndex,\n getPinStateFromElement,\n isGroupColumn,\n isJsonGroup,\n isValidNumber,\n logUnhandledMessage,\n metadataKeys,\n PinState,\n toggleOrApplySort,\n updateColumn,\n useEditSession,\n useLayoutEffectSkipFirst,\n useStableReference,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n FocusEvent,\n KeyboardEvent,\n MouseEventHandler,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { TableCellBlock } from \"./cell-block/cellblock-utils\";\nimport { useCellBlockSelection } from \"./cell-block/useCellBlockSelection\";\nimport { CellFocusState } from \"./CellFocusState\";\nimport { TableProps } from \"./Table\";\nimport { updateTableConfig } from \"./table-config\";\nimport { getHeaderCell } from \"./table-dom-utils\";\nimport { useCellEditing } from \"./useCellEditing\";\nimport { FocusCell, useCellFocus } from \"./useCellFocus\";\nimport { useDataSource } from \"./table-data-source/useDataSource\";\nimport {\n GroupToggleHandler,\n useKeyboardNavigation,\n} from \"./useKeyboardNavigation\";\nimport { useRowClassNameGenerators } from \"./useRowClassNameGenerators\";\nimport { useSelection } from \"./useSelection\";\nimport { useTableContextMenu } from \"./useTableContextMenu\";\nimport {\n ColumnActionHide,\n ColumnActionRemove,\n useTableModel,\n} from \"./useTableModel\";\nimport { ScrollRequestHandler, useTableScroll } from \"./useTableScroll\";\nimport { useTableViewport } from \"./useTableViewport\";\n\ntype HeaderState = {\n height: number;\n count: number;\n};\n\ntype CellResizeState = {\n cells: HTMLDivElement[];\n startWidth: number;\n pinState?: PinState;\n};\n\nconst nullHeaderState = {\n height: -1,\n count: -1,\n};\nconst zeroHeaderState = {\n height: 0,\n count: 0,\n};\n\nexport interface TableHookProps\n extends MeasuredProps,\n Pick<\n TableProps,\n | \"allowCellBlockSelection\"\n | \"allowDragDrop\"\n | \"allowSelectCheckboxRow\"\n | \"autoSelectFirstRow\"\n | \"autoSelectRowKey\"\n | \"config\"\n | \"dataSource\"\n | \"disableFocus\"\n | \"highlightedIndex\"\n | \"id\"\n | \"navigationStyle\"\n | \"onConfigChange\"\n // | \"onDataEdited\"\n | \"onDragStart\"\n | \"onDrop\"\n | \"onHighlight\"\n | \"onSelect\"\n | \"onSelectCellBlock\"\n | \"onSelectionChange\"\n | \"onRowClick\"\n | \"renderBufferSize\"\n | \"revealSelected\"\n | \"scrollingApiRef\"\n | \"showColumnHeaders\"\n | \"showPaginationControls\"\n > {\n // colHeaderRowHeight: number;\n containerRef: RefObject<HTMLDivElement | null>;\n rowHeight: number;\n selectionModel: TableSelectionModel;\n size: MeasuredSize;\n}\n\nconst { IS_EXPANDED, IS_LEAF } = metadataKeys;\n\nconst NULL_DRAG_DROP = {\n draggable: undefined,\n onMouseDown: undefined,\n};\nconst useNullDragDrop = () => NULL_DRAG_DROP;\n\nexport const useTable = ({\n allowCellBlockSelection,\n allowSelectCheckboxRow,\n allowDragDrop = false,\n autoSelectFirstRow,\n autoSelectRowKey,\n // colHeaderRowHeight,\n config,\n containerRef,\n dataSource,\n disableFocus,\n highlightedIndex: highlightedIndexProp,\n id,\n navigationStyle = \"cell\",\n onConfigChange,\n // onDataEdited: onDataEditedProp,\n onDragStart,\n onDrop,\n onHighlight,\n onRowClick: onRowClickProp,\n onSelect,\n onSelectCellBlock,\n onSelectionChange,\n renderBufferSize = 0,\n revealSelected,\n rowHeight,\n scrollingApiRef,\n selectionModel,\n showColumnHeaders,\n showPaginationControls,\n size,\n}: TableHookProps) => {\n const tableConfigRef = useRef<TableConfig>(config);\n // We need scrollTop from the scrolling hook, just to detect when we need to scroll after a config change\n const scrollTopRef = useRef(0);\n // avoids a hook dependency on requestScroll, important to avoid re-registering config handler\n const requestScrollRef = useRef<ScrollRequestHandler | undefined>(undefined);\n useMemo(() => {\n tableConfigRef.current = config;\n }, [config]);\n\n const editSession = useEditSession();\n\n // state is mutated, so make every component gets a fresh copy\n const initialState = useMemo(() => new CellFocusState(), []);\n\n const cellFocusStateRef = useRef<CellFocusState>(initialState);\n // Needed to avoid circular dependency between useTableScroll and useCellFocus\n const focusCellRef = useRef<FocusCell>(undefined);\n\n const [headerState, setHeaderState] = useState<HeaderState>(\n showColumnHeaders ? nullHeaderState : zeroHeaderState,\n );\n\n const [rowCount, setRowCount] = useState<number>(dataSource.size);\n if (dataSource === undefined) {\n throw Error(\"no data source provided to Vuu Table\");\n }\n\n const onDataRowcountChange = useCallback((size: number) => {\n setRowCount(size);\n }, []);\n\n const { selectionBookendWidth = 4 } = config;\n const virtualContentHeight = rowHeight * rowCount;\n const viewportBodyHeight =\n size.height - (headerState.height === -1 ? 0 : headerState.height);\n const verticalScrollbarWidth =\n virtualContentHeight > viewportBodyHeight ? 10 : 0;\n const availableWidth =\n size.width - (verticalScrollbarWidth + 2 * selectionBookendWidth);\n\n const rowClassNameGenerator = useRowClassNameGenerators(config);\n\n const useRowDragDrop = allowDragDrop ? useDragDrop : useNullDragDrop;\n\n const {\n columns,\n dispatchTableModelAction,\n headings,\n tableAttributes,\n tableConfig,\n } = useTableModel({ config, dataSource, selectionModel, availableWidth });\n\n const columnsRef = useStableReference(columns);\n\n // this is really here to capture changes to available Width - typically when we get\n // rowcount so add allowance for vertical scrollbar, reducing available width\n // including dataSource is causing us to do unnecessary work in useTableModel\n // split this into multiple effects\n useLayoutEffectSkipFirst(() => {\n dispatchTableModelAction({\n availableWidth,\n selectionModel,\n type: \"init\",\n tableConfig: tableConfigRef.current,\n dataSource,\n });\n }, [\n availableWidth,\n config,\n dataSource,\n dispatchTableModelAction,\n selectionModel,\n ]);\n\n const applyTableConfigChange = useCallback(\n (config: TableConfig, changeType: TableConfigChangeType) => {\n dispatchTableModelAction({\n availableWidth,\n selectionModel,\n type: \"init\",\n tableConfig: config,\n dataSource,\n });\n tableConfigRef.current = config;\n onConfigChange?.(config, changeType);\n },\n [\n availableWidth,\n dataSource,\n dispatchTableModelAction,\n onConfigChange,\n selectionModel,\n ],\n );\n\n const handleSelectionChange: SelectionChangeHandler =\n useCallback<SelectionChangeHandler>(\n (selectRequest) => {\n dataSource.select?.(selectRequest);\n onSelectionChange?.(selectRequest);\n },\n [dataSource, onSelectionChange],\n );\n\n const handleSelect = useCallback<TableRowSelectHandlerInternal>(\n (dataRow) => {\n if (onSelect) {\n onSelect(dataRow);\n }\n },\n [onSelect],\n );\n\n const onSubscribed = useCallback(\n ({ tableSchema }: DataSourceSubscribedMessage) => {\n if (tableSchema) {\n dispatchTableModelAction({\n type: \"setTableSchema\",\n tableSchema,\n });\n } else {\n console.log(\"subscription message with no schema\");\n }\n },\n [dispatchTableModelAction],\n );\n\n const {\n getRowAtPosition,\n getRowOffset,\n setInSituRowOffset: viewportHookSetInSituRowOffset,\n setScrollTop: viewportHookSetScrollTop,\n ...viewportMeasurements\n } = useTableViewport({\n columns,\n headerHeight: headerState.height,\n rowCount,\n rowHeight,\n selectionEndSize: selectionBookendWidth,\n size: size,\n showPaginationControls,\n });\n\n const {\n dataRows,\n dataRowsRef,\n getSelectedRows,\n range,\n // removeColumnDataFromCache,\n setRange,\n } = useDataSource({\n autoSelectFirstRow,\n autoSelectRowKey,\n dataSource,\n renderBufferSize,\n revealSelected,\n onSelect: handleSelect,\n onSizeChange: onDataRowcountChange,\n onSubscribed,\n selectionModel,\n });\n\n const { requestScroll, scrollTop, ...scrollProps } = useTableScroll({\n cellFocusStateRef,\n columns,\n getRowAtPosition,\n rowHeight,\n scrollingApiRef,\n setRange,\n showPaginationControls,\n onVerticalScroll: viewportHookSetScrollTop,\n onVerticalScrollInSitu: viewportHookSetInSituRowOffset,\n viewportMeasurements,\n });\n // to avoid invalidating the dependencies of consumers of scrollTp every time we scroll\n scrollTopRef.current = scrollTop;\n // avoids a hook dependency on requestScroll, important to avoid re-registering config handler\n requestScrollRef.current = requestScroll;\n\n const handleConfigChange = useCallback<DataSourceConfigChangeHandler>(\n (config, _range, confirmed, changes) => {\n const scrollSensitiveChanges =\n changes?.filterChanged || changes?.groupByChanged;\n if (scrollSensitiveChanges && scrollTopRef.current > 0) {\n // don't wait for the scroll event to fire and trigger a range change,\n //we might miss data in the meantime\n setRange(range.reset);\n requestScrollRef.current?.({\n type: \"scroll-top\",\n scrollPos: 0,\n instant: true,\n });\n }\n dispatchTableModelAction({\n type: \"tableConfig\",\n ...config,\n confirmed,\n });\n },\n [dispatchTableModelAction, range, setRange],\n );\n\n useEffect(() => {\n dataSource.on(\"config\", handleConfigChange);\n return () => {\n dataSource.removeListener(\"config\", handleConfigChange);\n };\n }, [dataSource, dispatchTableModelAction, handleConfigChange]);\n\n //TODO careful with autoSubscribeColumns\n const removeColumn = useCallback(\n (action: ColumnActionRemove) => {\n const { column } = action;\n const newTableConfig = {\n ...tableConfig,\n columns: tableConfig.columns.filter((col) => col.name !== column.name),\n };\n // this will not trigger a render, simply splice the removed column from cached row arrays\n // removeColumnDataFromCache(column.name);\n // this will trigger a render and will render with the correct data, even before\n // we receive refresh from server\n applyTableConfigChange(newTableConfig, {\n type: \"column-removed\",\n column,\n });\n },\n [applyTableConfigChange, tableConfig],\n );\n\n const hideColumns = useCallback(\n (action: ColumnActionHide) => {\n const { columns } = action;\n const hiddenColumns = columns.map((c) => c.name);\n const newTableConfig = {\n ...tableConfig,\n columns: tableConfig.columns.map((col) =>\n hiddenColumns.includes(col.name) ? { ...col, hidden: true } : col,\n ),\n };\n applyTableConfigChange(newTableConfig, {\n type: \"columns-hidden\",\n columns,\n });\n },\n [tableConfig, applyTableConfigChange],\n );\n\n const pinColumn = useCallback(\n ({ column, pin }: ColumnPinAction) => {\n applyTableConfigChange(\n {\n ...tableConfig,\n columns: updateColumn(tableConfig.columns, {\n ...column,\n pin,\n }),\n },\n {\n type: \"column-pinned\",\n column,\n },\n );\n },\n [tableConfig, applyTableConfigChange],\n );\n\n const handleColumnDisplayAction = useCallback<ColumnDisplayActionHandler>(\n (action) => {\n const { type } = action;\n switch (type) {\n case \"hideColumn\":\n return hideColumns({\n type: \"hideColumns\",\n columns: [action.column],\n });\n case \"removeColumn\":\n return removeColumn({\n type: \"removeColumn\",\n column: action.column,\n });\n case \"pinColumn\":\n return pinColumn(action);\n default:\n logUnhandledMessage(type, \"[vuu-table] handleColumnDisplayAction\");\n }\n // }\n },\n [hideColumns, pinColumn, removeColumn],\n );\n\n const handleColumnAction = useColumnActions({\n dataSource,\n onColumnDisplayAction: handleColumnDisplayAction,\n });\n\n const handleSort = useCallback(\n (column: ColumnDescriptor, extendSort = false, sortType?: VuuSortType) => {\n if (dataSource) {\n dataSource.sort = toggleOrApplySort(\n dataSource.sort,\n column,\n extendSort,\n sortType,\n );\n }\n },\n [dataSource],\n );\n\n const cellResizeState = useRef<CellResizeState | undefined>(undefined);\n\n const onResizeColumn: TableColumnResizeHandler = useCallback(\n (phase, columnName, width = 0) => {\n if (phase === \"resize\") {\n cellResizeState.current?.cells.forEach((cell) => {\n cell.style.width = `${width}px`;\n });\n if (cellResizeState.current?.pinState) {\n const { pinState, startWidth } = cellResizeState.current;\n const { cell: pinnedCell, pinnedWidth } = pinState;\n const diff = width - startWidth;\n\n if (pinState.pinnedCells) {\n pinState.pinnedCells.forEach((cell) => {\n cell.style.left = `${parseInt(cell.style.left) + diff}px`;\n });\n }\n\n pinnedCell.style.setProperty(\n \"--pin-width\",\n `${pinnedWidth + diff}px`,\n );\n }\n } else {\n const column = columnsRef.current.find(\n (column) => column.name === columnName,\n );\n\n if (column) {\n if (phase === \"end\") {\n cellResizeState.current = undefined;\n if (isValidNumber(width)) {\n dispatchTableModelAction({\n type: \"resizeColumn\",\n phase,\n column,\n width,\n });\n onConfigChange?.(\n updateTableConfig(tableConfig, {\n type: \"col-size\",\n column,\n columns,\n width,\n }),\n {\n type: \"column-resized\",\n column,\n width,\n },\n );\n }\n } else if (phase === \"begin\") {\n // Store a list of the cells that will be affected by resize operation, so we do not\n // incur this cost on every resize.\n cellResizeState.current = {\n cells: getAllCellsInColumn(\n containerRef.current,\n column.ariaColIndex,\n ),\n startWidth: column.width,\n };\n\n const [headerCell] = cellResizeState.current.cells;\n cellResizeState.current.pinState =\n getPinStateFromElement(headerCell);\n\n dispatchTableModelAction({\n type: \"resizeColumn\",\n phase,\n column,\n width,\n });\n onConfigChange?.(\n updateTableConfig(tableConfig, {\n type: \"col-size\",\n column,\n columns,\n width,\n }),\n {\n type: \"column-resized\",\n column,\n width,\n },\n );\n }\n } else {\n throw Error(\n `useDataTable.handleColumnResize, column ${columnName} not found`,\n );\n }\n }\n },\n [\n columnsRef,\n dispatchTableModelAction,\n onConfigChange,\n tableConfig,\n columns,\n containerRef,\n ],\n );\n\n const onToggleGroup = useCallback(\n (dataRow: DataRow, column: RuntimeColumnDescriptor) => {\n const isJson = isJsonGroup(column, dataRow);\n const { key } = dataRow;\n\n if (dataRow.isExpanded) {\n dataSource.closeTreeNode(key, true);\n if (isJson) {\n // TODO could this be instigated by an event emitted by the JsonDataSOurce ? \"hide-columns\" ?\n const idx = columns.indexOf(column);\n const rows = dataSource.getRowsAtDepth?.(idx + 1);\n if (rows && !rows.some((row) => row[IS_EXPANDED] || row[IS_LEAF])) {\n dispatchTableModelAction({\n type: \"hideColumns\",\n columns: columns.slice(idx + 2),\n });\n }\n }\n } else {\n dataSource.openTreeNode(key);\n if (isJson) {\n const childRows = dataSource.getChildRows?.(key);\n const idx = columns.indexOf(column) + 1;\n const columnsToShow = [columns[idx]];\n if (childRows && childRows.some((row) => row[IS_LEAF])) {\n columnsToShow.push(columns[idx + 1]);\n }\n if (columnsToShow.some((col) => col.hidden)) {\n dispatchTableModelAction({\n type: \"showColumns\",\n columns: columnsToShow,\n });\n }\n }\n }\n },\n [columns, dataSource, dispatchTableModelAction],\n );\n\n // TODO combine with aboue\n const handleToggleGroup = useCallback<GroupToggleHandler>(\n (treeNodeOperation, rowIdx) => {\n if (treeNodeOperation === \"expand\") {\n dataSource.openTreeNode(rowIdx);\n } else {\n dataSource.closeTreeNode(rowIdx);\n }\n },\n [dataSource],\n );\n\n const {\n focusCell,\n focusCellPlaceholderKeyDown,\n focusCellPlaceholderRef,\n setTableBodyRef: tableBodyRef,\n } = useCellFocus({\n cellFocusStateRef,\n containerRef,\n disableFocus,\n requestScroll,\n });\n\n focusCellRef.current = focusCell;\n\n const columnCount = columns.filter((c) => c.hidden !== true).length;\n\n const {\n highlightedIndexRef,\n navigateCell: navigate,\n onFocus: navigationFocus,\n onKeyDown: navigationKeyDown,\n ...containerProps\n } = useKeyboardNavigation({\n cellFocusStateRef,\n columnCount,\n containerRef,\n disableFocus,\n editSessionInProgress: editSession?.inEditMode,\n focusCell,\n headerCount: headerState.count,\n highlightedIndex: highlightedIndexProp,\n navigationStyle,\n requestScroll,\n rowCount,\n onHighlight,\n onToggleGroup: handleToggleGroup,\n viewportRange: range,\n viewportRowCount: viewportMeasurements.rowCount,\n });\n\n const {\n onBlur: editingBlur,\n onDoubleClick: editingDoubleClick,\n onKeyDown: editingKeyDown,\n onFocus: editingFocus,\n } = useCellEditing({\n navigate,\n });\n\n const handleFocus = useCallback(\n (e: FocusEvent<HTMLElement>) => {\n // console.log(`[useTable] handleFocus`);\n navigationFocus();\n // navigationFocus does not call preventDefault\n if (!e.defaultPrevented) {\n editingFocus(e);\n }\n },\n [editingFocus, navigationFocus],\n );\n\n const onContextMenu = useTableContextMenu({\n columns,\n dataRows,\n dataSource,\n getSelectedRows,\n headerCount: headerState.count,\n });\n\n const onMoveGroupColumn = useCallback(\n (columns: ColumnDescriptor[]) => {\n dataSource.groupBy = columns.map((col) => col.name);\n },\n [dataSource],\n );\n\n const onRemoveGroupColumn = useCallback(\n (column: RuntimeColumnDescriptor) => {\n if (isGroupColumn(column)) {\n dataSource.groupBy = [];\n } else {\n if (dataSource && dataSource.groupBy?.includes(column.name)) {\n dataSource.groupBy = dataSource.groupBy.filter(\n (columnName) => columnName !== column.name,\n );\n }\n }\n },\n [dataSource],\n );\n\n const {\n allRowsSelected,\n onCheckBoxColumnHeaderClick,\n onKeyDown: selectionHookKeyDown,\n onRowClick: selectionHookOnRowClick,\n } = useSelection({\n allowSelectCheckboxRow,\n containerRef,\n dataSource,\n highlightedIndexRef,\n onSelect: handleSelect,\n onSelectionChange: handleSelectionChange,\n selectionModel,\n });\n\n const handleSelectCellBlock = useCallback(\n (cellBlock: TableCellBlock) => {\n handleSelectionChange({\n type: \"DESELECT_ALL\",\n });\n onSelectCellBlock?.(cellBlock);\n },\n [handleSelectionChange, onSelectCellBlock],\n );\n\n const {\n onMouseDown: cellBlockHookMouseDown,\n cellBlock,\n onKeyDown: cellBlockSelectionKeyDown,\n } = useCellBlockSelection({\n allowCellBlockSelection,\n columnCount,\n containerRef,\n onSelectCellBlock: handleSelectCellBlock,\n rowCount,\n });\n\n const handleRowClick = useCallback<TableRowClickHandlerInternal>(\n (evt, dataRow, rangeSelect, keepExistingSelection) => {\n selectionHookOnRowClick?.(\n evt,\n dataRow,\n rangeSelect,\n keepExistingSelection,\n );\n onRowClickProp?.(evt, dataRow);\n },\n [onRowClickProp, selectionHookOnRowClick],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLElement>) => {\n // console.log(`[useTable] handleKeyDown, delegates to ...`);\n\n cellBlockSelectionKeyDown?.(e);\n if (!e.defaultPrevented) {\n navigationKeyDown(e);\n }\n if (!e.defaultPrevented) {\n editingKeyDown(e);\n }\n if (!e.defaultPrevented) {\n selectionHookKeyDown(e);\n }\n },\n [\n cellBlockSelectionKeyDown,\n navigationKeyDown,\n editingKeyDown,\n selectionHookKeyDown,\n ],\n );\n\n const onMoveColumn = useCallback<ColumnMoveHandler>(\n (columnName, columns) => {\n const newTableConfig = {\n ...tableConfig,\n columns,\n };\n\n tableConfigRef.current = newTableConfig;\n\n dispatchTableModelAction({\n availableWidth,\n type: \"init\",\n tableConfig: newTableConfig,\n dataSource,\n });\n onConfigChange?.(newTableConfig, {\n columnName,\n columns,\n type: \"column-moved\",\n });\n\n setTimeout(() => {\n const headerCell = getHeaderCell(containerRef, columnName);\n if (headerCell) {\n const { ariaColIndex } = headerCell;\n const { ariaRowIndex } = headerCell.parentElement as HTMLDivElement;\n const col = parseInt(ariaColIndex ?? \"-1\");\n const row = parseInt(ariaRowIndex ?? \"-1\");\n if (!isNaN(col) && col !== -1 && !isNaN(row) && row !== -1) {\n focusCell([row, col]);\n }\n }\n }, 300);\n },\n [\n availableWidth,\n containerRef,\n dataSource,\n dispatchTableModelAction,\n focusCell,\n onConfigChange,\n tableConfig,\n ],\n );\n\n const handleDropRow = useCallback(\n // TODO - this should be GlobalDropHandler\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (dragDropState: any) => {\n onDrop?.(dragDropState);\n },\n [onDrop],\n );\n\n // const handleDataEdited = useCallback(\n // async (editState: DataCellEditEvent): Promise<RpcResult | undefined> => {\n // const {\n // editType = \"commit\",\n // isValid = true,\n // dataRow,\n // columnName,\n // previousValue = \"\",\n // value,\n // } = editState;\n // if (editType === \"commit\") {\n // if (editSession && dataRow && columnName) {\n // return editSession.commit(dataRow.key, columnName, value, isValid);\n // } else {\n // throw Error(\n // `[useTable] handleDataEdited, no editSession installed and datasource does not support RPC`,\n // );\n // }\n // } else {\n // if (editSession && dataRow && columnName) {\n // editSession.edit(dataRow.key, columnName, previousValue, value);\n // } else {\n // onDataEditedProp?.(editState);\n // }\n // }\n // },\n // [editSession, onDataEditedProp],\n // );\n\n const handleDragStartRow = useCallback<DragStartHandler>(\n (dragDropState) => {\n const { initialDragElement } = dragDropState;\n const rowIndex =\n getAriaRowIndex(initialDragElement) - headerState.count - 1;\n const row = dataRowsRef.current.find((row) => row.index === rowIndex);\n if (row) {\n dragDropState.setPayload(row);\n } else {\n // should we abort the operation ?\n }\n onDragStart?.(dragDropState);\n },\n [dataRowsRef, headerState.count, onDragStart],\n );\n\n const onHeaderHeightMeasured = useCallback(\n (height: number, count: number) => {\n setHeaderState({ height, count });\n },\n [],\n );\n\n // Drag Drop rows\n const { onMouseDown: rowDragMouseDown, draggable: draggableRow } =\n useRowDragDrop({\n allowDragDrop,\n containerRef,\n draggableClassName: `vuuTable`,\n id,\n onDragStart: handleDragStartRow,\n onDrop: handleDropRow,\n orientation: \"vertical\",\n itemQuery: \".vuuTableRow\",\n });\n\n const handleMouseDown = useCallback<MouseEventHandler>(\n (evt) => {\n rowDragMouseDown?.(evt);\n if (!evt.isPropagationStopped()) {\n cellBlockHookMouseDown?.(evt);\n }\n },\n [rowDragMouseDown, cellBlockHookMouseDown],\n );\n\n return {\n ...containerProps,\n allRowsSelected,\n \"aria-rowcount\": dataSource.size,\n cellBlock,\n columns,\n dataRows,\n draggableRow,\n editSessionInProgress: editSession?.inEditMode,\n focusCellPlaceholderKeyDown,\n focusCellPlaceholderRef,\n getRowOffset,\n handleColumnAction,\n headerState,\n headings,\n highlightedIndex: highlightedIndexRef.current,\n onBlur: editingBlur,\n onCheckBoxColumnHeaderClick,\n onDoubleClick: editingDoubleClick,\n onFocus: handleFocus,\n onKeyDown: handleKeyDown,\n onMouseDown: handleMouseDown,\n onContextMenu,\n // onDataEdited: handleDataEdited,\n onHeaderHeightMeasured,\n onMoveColumn,\n onMoveGroupColumn,\n onRemoveGroupColumn,\n onRowClick: handleRowClick,\n onSortColumn: handleSort,\n onResizeColumn,\n onToggleGroup,\n rowClassNameGenerator,\n scrollProps,\n // TODO don't think we need these ...\n tableAttributes,\n tableBodyRef,\n tableConfig,\n viewportMeasurements,\n };\n};\n"],"names":["size","config","columns","column","cellBlock","row"],"mappings":"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"}
@@ -1,73 +0,0 @@
1
- import { useContextMenu } from '@vuu-ui/vuu-context-menu';
2
- import { getAriaRowIndex, getAriaColIndex, columnByAriaIndex } from '@vuu-ui/vuu-utils';
3
- import { useCallback } from 'react';
4
-
5
- const NO_ROWS = [];
6
- const isTableLocation = (location) => ["grid", "header", "filter"].includes(location);
7
- const getDataSourceRow = (dataRows, rowIndex) => {
8
- const row = dataRows.find((dataRow) => dataRow.index === rowIndex);
9
- if (row) {
10
- return row;
11
- } else {
12
- throw Error(
13
- `useTableContextMenu data row not found for rowIndex ${rowIndex}`
14
- );
15
- }
16
- };
17
- const useTableContextMenu = ({
18
- allowContextMenu = true,
19
- columns,
20
- dataRows,
21
- dataSource,
22
- getSelectedRows,
23
- headerCount = 1
24
- }) => {
25
- const showContextMenu = useContextMenu();
26
- const onContextMenu = useCallback(
27
- (evt) => {
28
- const target = evt.target;
29
- const cellEl = target?.closest("div[role='cell']");
30
- const rowEl = target?.closest("div[role='row']");
31
- if (cellEl && rowEl) {
32
- const { selectedRowsCount } = dataSource;
33
- const rowIndex = getAriaRowIndex(rowEl) - headerCount - 1;
34
- const ariaColIndex = getAriaColIndex(cellEl);
35
- const dataRow = getDataSourceRow(dataRows, rowIndex);
36
- const column = columnByAriaIndex(
37
- columns,
38
- ariaColIndex
39
- );
40
- if (!column.isSystemColumn) {
41
- const menuOptions = {
42
- column,
43
- columns,
44
- dataRow,
45
- selectedRows: selectedRowsCount === 0 ? NO_ROWS : getSelectedRows(),
46
- viewport: dataSource.viewport
47
- };
48
- const menuShowing = showContextMenu(evt, "grid", menuOptions, {
49
- onOpenChange: (isOpen) => {
50
- console.log(`[useTableContextMenu] onOpenChange ${isOpen}`);
51
- cellEl.classList.remove("ContextOpen");
52
- }
53
- });
54
- if (menuShowing) {
55
- cellEl.classList.add("ContextOpen");
56
- }
57
- }
58
- }
59
- },
60
- [
61
- columns,
62
- dataRows,
63
- dataSource,
64
- getSelectedRows,
65
- headerCount,
66
- showContextMenu
67
- ]
68
- );
69
- return allowContextMenu ? onContextMenu : void 0;
70
- };
71
-
72
- export { isTableLocation, useTableContextMenu };
73
- //# sourceMappingURL=useTableContextMenu.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useTableContextMenu.js","sources":["../../../packages/vuu-table/src/useTableContextMenu.ts"],"sourcesContent":["import { useContextMenu } from \"@vuu-ui/vuu-context-menu\";\nimport { DataSource } from \"@vuu-ui/vuu-data-types\";\nimport {\n ColumnDescriptor,\n DataRow,\n RuntimeColumnDescriptor,\n TableContextMenuOptions,\n TableMenuLocation,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n columnByAriaIndex,\n getAriaColIndex,\n getAriaRowIndex,\n} from \"@vuu-ui/vuu-utils\";\nimport { MouseEvent, useCallback } from \"react\";\n\nexport interface TableContextMenuHookProps {\n allowContextMenu?: boolean;\n columns: ColumnDescriptor[];\n dataRows: DataRow[];\n dataSource: DataSource;\n getSelectedRows: () => DataRow[];\n // TODO can we eliminate this it is only needed to convert aria row index to actual row index\n headerCount?: number;\n}\n\nconst NO_ROWS: DataRow[] = [] as const;\n\nexport const isTableLocation = (\n location: string,\n): location is TableMenuLocation =>\n [\"grid\", \"header\", \"filter\"].includes(location);\n\nconst getDataSourceRow = (dataRows: DataRow[], rowIndex: number) => {\n const row = dataRows.find((dataRow) => dataRow.index === rowIndex);\n if (row) {\n return row;\n } else {\n throw Error(\n `useTableContextMenu data row not found for rowIndex ${rowIndex}`,\n );\n }\n};\n\nexport const useTableContextMenu = ({\n allowContextMenu = true,\n columns,\n dataRows,\n dataSource,\n getSelectedRows,\n headerCount = 1,\n}: TableContextMenuHookProps) => {\n const showContextMenu = useContextMenu();\n\n const onContextMenu = useCallback(\n (evt: MouseEvent<HTMLElement>) => {\n const target = evt.target as HTMLElement;\n const cellEl = target?.closest<HTMLElement>(\"div[role='cell']\");\n const rowEl = target?.closest<HTMLElement>(\"div[role='row']\");\n if (cellEl && rowEl) {\n const { selectedRowsCount } = dataSource;\n const rowIndex = getAriaRowIndex(rowEl) - headerCount - 1;\n const ariaColIndex = getAriaColIndex(cellEl);\n const dataRow = getDataSourceRow(dataRows, rowIndex);\n const column = columnByAriaIndex(\n columns as RuntimeColumnDescriptor[],\n ariaColIndex,\n );\n\n if (!column.isSystemColumn) {\n // TODO does it really make sense to collect selected rows ?\n // We only have access to rows in local cache\n const menuOptions: TableContextMenuOptions = {\n column,\n columns,\n dataRow,\n selectedRows: selectedRowsCount === 0 ? NO_ROWS : getSelectedRows(),\n viewport: dataSource.viewport,\n };\n\n const menuShowing = showContextMenu(evt, \"grid\", menuOptions, {\n onOpenChange: (isOpen: boolean) => {\n console.log(`[useTableContextMenu] onOpenChange ${isOpen}`);\n cellEl.classList.remove(\"ContextOpen\");\n },\n });\n if (menuShowing) {\n cellEl.classList.add(\"ContextOpen\");\n }\n }\n }\n },\n [\n columns,\n dataRows,\n dataSource,\n getSelectedRows,\n headerCount,\n showContextMenu,\n ],\n );\n\n return allowContextMenu ? onContextMenu : undefined;\n};\n"],"names":[],"mappings":";;;;AA0BA,MAAM,UAAqB,EAAC;AAEf,MAAA,eAAA,GAAkB,CAC7B,QAEA,KAAA,CAAC,QAAQ,QAAU,EAAA,QAAQ,CAAE,CAAA,QAAA,CAAS,QAAQ;AAEhD,MAAM,gBAAA,GAAmB,CAAC,QAAA,EAAqB,QAAqB,KAAA;AAClE,EAAA,MAAM,MAAM,QAAS,CAAA,IAAA,CAAK,CAAC,OAAY,KAAA,OAAA,CAAQ,UAAU,QAAQ,CAAA;AACjE,EAAA,IAAI,GAAK,EAAA;AACP,IAAO,OAAA,GAAA;AAAA,GACF,MAAA;AACL,IAAM,MAAA,KAAA;AAAA,MACJ,uDAAuD,QAAQ,CAAA;AAAA,KACjE;AAAA;AAEJ,CAAA;AAEO,MAAM,sBAAsB,CAAC;AAAA,EAClC,gBAAmB,GAAA,IAAA;AAAA,EACnB,OAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAc,GAAA;AAChB,CAAiC,KAAA;AAC/B,EAAA,MAAM,kBAAkB,cAAe,EAAA;AAEvC,EAAA,MAAM,aAAgB,GAAA,WAAA;AAAA,IACpB,CAAC,GAAiC,KAAA;AAChC,MAAA,MAAM,SAAS,GAAI,CAAA,MAAA;AACnB,MAAM,MAAA,MAAA,GAAS,MAAQ,EAAA,OAAA,CAAqB,kBAAkB,CAAA;AAC9D,MAAM,MAAA,KAAA,GAAQ,MAAQ,EAAA,OAAA,CAAqB,iBAAiB,CAAA;AAC5D,MAAA,IAAI,UAAU,KAAO,EAAA;AACnB,QAAM,MAAA,EAAE,mBAAsB,GAAA,UAAA;AAC9B,QAAA,MAAM,QAAW,GAAA,eAAA,CAAgB,KAAK,CAAA,GAAI,WAAc,GAAA,CAAA;AACxD,QAAM,MAAA,YAAA,GAAe,gBAAgB,MAAM,CAAA;AAC3C,QAAM,MAAA,OAAA,GAAU,gBAAiB,CAAA,QAAA,EAAU,QAAQ,CAAA;AACnD,QAAA,MAAM,MAAS,GAAA,iBAAA;AAAA,UACb,OAAA;AAAA,UACA;AAAA,SACF;AAEA,QAAI,IAAA,CAAC,OAAO,cAAgB,EAAA;AAG1B,UAAA,MAAM,WAAuC,GAAA;AAAA,YAC3C,MAAA;AAAA,YACA,OAAA;AAAA,YACA,OAAA;AAAA,YACA,YAAc,EAAA,iBAAA,KAAsB,CAAI,GAAA,OAAA,GAAU,eAAgB,EAAA;AAAA,YAClE,UAAU,UAAW,CAAA;AAAA,WACvB;AAEA,UAAA,MAAM,WAAc,GAAA,eAAA,CAAgB,GAAK,EAAA,MAAA,EAAQ,WAAa,EAAA;AAAA,YAC5D,YAAA,EAAc,CAAC,MAAoB,KAAA;AACjC,cAAQ,OAAA,CAAA,GAAA,CAAI,CAAsC,mCAAA,EAAA,MAAM,CAAE,CAAA,CAAA;AAC1D,cAAO,MAAA,CAAA,SAAA,CAAU,OAAO,aAAa,CAAA;AAAA;AACvC,WACD,CAAA;AACD,UAAA,IAAI,WAAa,EAAA;AACf,YAAO,MAAA,CAAA,SAAA,CAAU,IAAI,aAAa,CAAA;AAAA;AACpC;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,OAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,eAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,OAAO,mBAAmB,aAAgB,GAAA,KAAA,CAAA;AAC5C;;;;"}
@@ -1,419 +0,0 @@
1
- import { buildValidationChecker } from '@vuu-ui/vuu-data-react';
2
- import { logger, assertAllColumnsAreIncludedInSubscription, applyWidthToColumns, isPinned, sortPinnedColumns, getTableHeadings, checkConfirmationPending, applyGroupByToColumns, isGroupColumn, flattenColumnGroup, applySortToColumns, existingSort, removeSort, applyFilterToColumns, isFilteredColumn, stripFilterFromColumns, applyRuntimeColumnWidthsToConfig, getColumnLabel, getCellRenderer, getColumnHeaderContentRenderer, getColumnHeaderLabelRenderer, hasValidationRules, getValueFormatter, replaceColumn, isNumericType } from '@vuu-ui/vuu-utils';
3
- import { useReducer } from 'react';
4
-
5
- const { info } = logger("useTableModel");
6
- const DEFAULT_COLUMN_WIDTH = 100;
7
- const columnWithoutDataType = ({ serverDataType }) => serverDataType === void 0;
8
- const getDataType = (column, tableSchema) => {
9
- const schemaColumn = tableSchema?.columns.find(
10
- ({ name }) => name === column.name
11
- );
12
- if (schemaColumn) {
13
- return schemaColumn.serverDataType;
14
- } else {
15
- return column.serverDataType;
16
- }
17
- };
18
- const CheckboxColumnDescriptor = (selectionModel, width = 25) => ({
19
- allowColumnHeaderMenu: false,
20
- className: selectionModel === "checkbox-disabled" ? "vuuDisabled" : void 0,
21
- label: "",
22
- name: "",
23
- width,
24
- resizeable: false,
25
- sortable: false,
26
- isSystemColumn: true,
27
- type: {
28
- name: "checkbox",
29
- renderer: {
30
- name: "checkbox-row-selector-cell"
31
- }
32
- }
33
- });
34
- const PinnedCheckboxColumnDescriptor = (selectionModel, width) => ({
35
- ...CheckboxColumnDescriptor(selectionModel, width),
36
- pin: "left"
37
- });
38
- const getDefaultAlignment = (serverDataType) => serverDataType === void 0 ? void 0 : isNumericType(serverDataType) ? "right" : "left";
39
- const tableModelReducer = (state, action) => {
40
- info?.(`TableModelReducer ${action.type}`);
41
- switch (action.type) {
42
- case "init": {
43
- if (state.tableConfig.columnLayout === "manual" && action.tableConfig.columnLayout === "fit") {
44
- return init({
45
- ...action,
46
- tableConfig: applyRuntimeColumnWidthsToConfig(
47
- action.tableConfig,
48
- state.columns
49
- )
50
- });
51
- } else {
52
- return init(action, state);
53
- }
54
- }
55
- case "moveColumn":
56
- return moveColumn(state, action);
57
- case "resizeColumn":
58
- return resizeColumn(state, action);
59
- case "setTableSchema":
60
- return setTableSchema(state, action);
61
- case "hideColumns":
62
- return hideColumns(state, action);
63
- case "showColumns":
64
- return showColumns(state, action);
65
- case "updateColumnProp":
66
- return updateColumnProp(state, action);
67
- case "tableConfig":
68
- return updateTableConfig(state, action);
69
- default:
70
- console.log(`unhandled action ${action.type}`);
71
- return state;
72
- }
73
- };
74
- const useTableModel = ({
75
- config: tableConfigProp,
76
- dataSource,
77
- selectionModel,
78
- availableWidth
79
- }) => {
80
- const [state, dispatchTableModelAction] = useReducer(
81
- tableModelReducer,
82
- {
83
- availableWidth,
84
- tableConfig: tableConfigProp,
85
- dataSource,
86
- selectionModel
87
- },
88
- init
89
- );
90
- const { columns, headings, tableConfig, ...tableAttributes } = state;
91
- return {
92
- columns,
93
- dispatchTableModelAction,
94
- headings,
95
- tableAttributes,
96
- tableConfig
97
- };
98
- };
99
- function init({ availableWidth, dataSource, selectionModel, tableConfig }, previousConfig) {
100
- const { checkboxColumnWidth = 25, columns, ...tableAttributes } = tableConfig;
101
- const { config: dataSourceConfig, tableSchema } = dataSource;
102
- const toRuntimeColumnDescriptor = columnDescriptorToRuntimeColumDescriptor(
103
- tableAttributes,
104
- tableSchema
105
- );
106
- const runtimeColumns = [];
107
- let colIndex = selectionModel?.startsWith("checkbox") ? 2 : 1;
108
- assertAllColumnsAreIncludedInSubscription(columns, dataSourceConfig.columns);
109
- for (const column of columns) {
110
- runtimeColumns.push(
111
- toRuntimeColumnDescriptor(column, column.hidden ? -1 : colIndex)
112
- );
113
- if (!column.hidden) {
114
- colIndex += 1;
115
- }
116
- }
117
- if (selectionModel?.startsWith("checkbox")) {
118
- const somePinnedLeft = runtimeColumns.some((col) => col.pin === "left");
119
- runtimeColumns.splice(
120
- 0,
121
- 0,
122
- toRuntimeColumnDescriptor(
123
- somePinnedLeft ? PinnedCheckboxColumnDescriptor(selectionModel, checkboxColumnWidth) : CheckboxColumnDescriptor(selectionModel, checkboxColumnWidth),
124
- 1
125
- )
126
- );
127
- }
128
- const { columnLayout = "static", selectionBookendWidth = 4 } = tableConfig;
129
- const runtimeColumnsWithLayout = applyWidthToColumns(runtimeColumns, {
130
- availableWidth,
131
- columnLayout
132
- });
133
- const columnsInRenderOrder = runtimeColumnsWithLayout.some(isPinned) ? sortPinnedColumns(runtimeColumnsWithLayout, selectionBookendWidth) : runtimeColumnsWithLayout;
134
- let state = {
135
- availableWidth,
136
- columns: columnsInRenderOrder,
137
- headings: getTableHeadings(columnsInRenderOrder),
138
- tableConfig,
139
- ...tableAttributes
140
- };
141
- if (dataSourceConfig) {
142
- const { columns: _, ...rest } = dataSourceConfig;
143
- state = updateTableConfig(state, {
144
- type: "tableConfig",
145
- ...rest,
146
- confirmed: checkConfirmationPending(previousConfig)
147
- });
148
- }
149
- return state;
150
- }
151
- const getLabel = (label, columnFormatHeader) => {
152
- if (columnFormatHeader === "uppercase") {
153
- return label.toUpperCase();
154
- } else if (columnFormatHeader === "capitalize") {
155
- return label[0].toUpperCase() + label.slice(1).toLowerCase();
156
- }
157
- return label;
158
- };
159
- const columnDescriptorToRuntimeColumDescriptor = (tableAttributes, tableSchema) => (column, ariaColIndex) => {
160
- const { columnDefaultWidth = DEFAULT_COLUMN_WIDTH, columnFormatHeader } = tableAttributes;
161
- const serverDataType = getDataType(column, tableSchema);
162
- const {
163
- align = getDefaultAlignment(serverDataType),
164
- name,
165
- label = getColumnLabel(column),
166
- source = "server",
167
- width = columnDefaultWidth,
168
- ...rest
169
- } = column;
170
- const runtimeColumnWithDefaults = {
171
- ...rest,
172
- align,
173
- ariaColIndex,
174
- CellRenderer: getCellRenderer(column),
175
- HeaderCellContentRenderer: getColumnHeaderContentRenderer(column),
176
- HeaderCellLabelRenderer: getColumnHeaderLabelRenderer(column),
177
- clientSideEditValidationCheck: hasValidationRules(column.type) ? buildValidationChecker(column.type.rules) : void 0,
178
- label: getLabel(label, columnFormatHeader),
179
- name,
180
- originalIdx: ariaColIndex,
181
- serverDataType,
182
- source,
183
- valueFormatter: getValueFormatter(column, serverDataType),
184
- width
185
- };
186
- if (isGroupColumn(runtimeColumnWithDefaults)) {
187
- runtimeColumnWithDefaults.columns = runtimeColumnWithDefaults.columns.map(
188
- (col) => columnDescriptorToRuntimeColumDescriptor(tableAttributes)(col, -1)
189
- );
190
- }
191
- return runtimeColumnWithDefaults;
192
- };
193
- function moveColumn(state, { column, moveBy }) {
194
- const { columns } = state;
195
- if (typeof moveBy === "number") {
196
- const idx = columns.indexOf(column);
197
- const newColumns = columns.slice();
198
- const [movedColumns] = newColumns.splice(idx, 1);
199
- newColumns.splice(idx + moveBy, 0, movedColumns);
200
- return {
201
- ...state,
202
- columns: newColumns
203
- };
204
- }
205
- return state;
206
- }
207
- function hideColumns(state, { columns }) {
208
- console.log(`[useTableModel] hideColumns ${JSON.stringify(columns)}`);
209
- if (columns.some((col) => col.hidden !== true)) {
210
- return columns.reduce((s, c) => {
211
- if (c.hidden !== true) {
212
- return updateColumnProp(s, {
213
- type: "updateColumnProp",
214
- column: c,
215
- hidden: true
216
- });
217
- } else {
218
- return s;
219
- }
220
- }, state);
221
- } else {
222
- return state;
223
- }
224
- }
225
- function showColumns(state, { columns }) {
226
- if (columns.some((col) => col.hidden)) {
227
- return columns.reduce((s, c) => {
228
- if (c.hidden) {
229
- return updateColumnProp(s, {
230
- type: "updateColumnProp",
231
- column: c,
232
- hidden: false
233
- });
234
- } else {
235
- return s;
236
- }
237
- }, state);
238
- } else {
239
- return state;
240
- }
241
- }
242
- function resizeColumn(state, { column, phase, width }) {
243
- const type = "updateColumnProp";
244
- const resizing = phase !== "end";
245
- switch (phase) {
246
- case "begin":
247
- return updateColumnProp(state, { type, column, resizing });
248
- case "end": {
249
- const { tableConfig } = state;
250
- const isFit = tableConfig.columnLayout === "fit";
251
- let newState = isFit ? {
252
- ...state,
253
- tableConfig: applyRuntimeColumnWidthsToConfig(
254
- tableConfig,
255
- state.columns
256
- )
257
- } : state;
258
- if (column.pin && !column.pinnedWidth && width) {
259
- newState = adjustPinOffsets(newState, column, width);
260
- }
261
- return updateColumnProp(newState, { type, column, resizing, width });
262
- }
263
- case "resize":
264
- return updateColumnProp(state, { type, column, width });
265
- default:
266
- throw Error(`useTableModel.resizeColumn, invalid resizePhase ${phase}`);
267
- }
268
- }
269
- function setTableSchema(state, { tableSchema }) {
270
- const { columns } = state;
271
- if (columns.some(columnWithoutDataType)) {
272
- const cols = columns.map((column) => {
273
- const serverDataType = getDataType(column, tableSchema);
274
- return {
275
- ...column,
276
- align: column.align ?? getDefaultAlignment(serverDataType),
277
- serverDataType
278
- };
279
- });
280
- return {
281
- ...state,
282
- columns: cols
283
- };
284
- } else {
285
- return state;
286
- }
287
- }
288
- function adjustPinOffsets(state, column, width) {
289
- const newColumns = state.columns.slice();
290
- if (column.pin === "left") {
291
- const diff = width - column.width;
292
- const colIndex = newColumns.findIndex((col) => col.name === column.name);
293
- for (let i = colIndex + 1; i < newColumns.length; i++) {
294
- const pinnedColumn = newColumns.at(i);
295
- if (pinnedColumn?.pin === "left" && typeof pinnedColumn?.pinnedOffset === "number") {
296
- newColumns[i] = {
297
- ...newColumns[i],
298
- pinnedOffset: pinnedColumn.pinnedOffset + diff
299
- };
300
- if (pinnedColumn.pinnedWidth) {
301
- newColumns[i] = {
302
- ...newColumns[i],
303
- pinnedWidth: pinnedColumn.pinnedWidth + diff
304
- };
305
- break;
306
- }
307
- } else {
308
- throw Error(
309
- `[useTableModel] adjustPinOffsets, invalid column pin, no endPin following pinned column`
310
- );
311
- }
312
- }
313
- } else if (column.pin === "right") {
314
- throw "whoaaargh";
315
- } else {
316
- throw Error(
317
- `[useTableModel] adjustPinOffsets, invalid param, column is not pinned `
318
- );
319
- }
320
- return {
321
- ...state,
322
- columns: newColumns
323
- };
324
- }
325
- function updateColumnProp(state, action) {
326
- let { columns, tableConfig } = state;
327
- const { align, column, hidden, label, resizing, width } = action;
328
- const targetColumn = columns.find((col) => col.name === column.name);
329
- if (targetColumn) {
330
- if (align === "left" || align === "right") {
331
- columns = replaceColumn(columns, { ...targetColumn, align });
332
- }
333
- if (typeof label === "string") {
334
- columns = replaceColumn(columns, { ...targetColumn, label });
335
- }
336
- if (typeof resizing === "boolean") {
337
- columns = replaceColumn(columns, { ...targetColumn, resizing });
338
- }
339
- if (typeof hidden === "boolean") {
340
- columns = replaceColumn(columns, { ...targetColumn, hidden });
341
- }
342
- if (typeof width === "number") {
343
- columns = replaceColumn(columns, { ...targetColumn, width });
344
- const targetConfigColumn = tableConfig.columns.find(
345
- (col) => col.name === column.name
346
- );
347
- if (targetConfigColumn) {
348
- tableConfig = {
349
- ...tableConfig,
350
- columns: replaceColumn(tableConfig.columns, {
351
- ...targetConfigColumn,
352
- width
353
- })
354
- };
355
- }
356
- }
357
- }
358
- return {
359
- ...state,
360
- columns,
361
- tableConfig
362
- };
363
- }
364
- function updateTableConfig(state, {
365
- confirmed,
366
- filterSpec,
367
- groupBy,
368
- sort
369
- }) {
370
- let result = state;
371
- const { availableWidth, columnLayout = "static" } = state;
372
- if (groupBy.length > 0) {
373
- const groupedColumns = applyGroupByToColumns({
374
- columns: result.columns,
375
- groupBy,
376
- confirmed,
377
- availableWidth
378
- });
379
- const columns = applyWidthToColumns(groupedColumns, {
380
- availableWidth,
381
- columnLayout
382
- });
383
- result = {
384
- ...state,
385
- columns
386
- };
387
- } else if (result.columns.length > 0 && isGroupColumn(result.columns[0]) && confirmed) {
388
- result = {
389
- ...state,
390
- columns: flattenColumnGroup(result.columns)
391
- };
392
- }
393
- if (sort.sortDefs.length > 0) {
394
- result = {
395
- ...state,
396
- columns: applySortToColumns(result.columns, sort)
397
- };
398
- } else if (existingSort(result.columns)) {
399
- result = {
400
- ...state,
401
- columns: removeSort(result.columns)
402
- };
403
- }
404
- if (filterSpec.filter.length > 0) {
405
- result = {
406
- ...state,
407
- columns: applyFilterToColumns(result.columns, filterSpec)
408
- };
409
- } else if (result.columns.some(isFilteredColumn)) {
410
- result = {
411
- ...state,
412
- columns: stripFilterFromColumns(result.columns)
413
- };
414
- }
415
- return result;
416
- }
417
-
418
- export { useTableModel };
419
- //# sourceMappingURL=useTableModel.js.map