@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
@@ -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":["metadataKeys","useRef","useMemo","useEditSession","CellFocusState","useState","useCallback","size","useRowClassNameGenerators","useDragDrop","tableConfig","useTableModel","useStableReference","useLayoutEffectSkipFirst","config","useTableViewport","useDataSource","useTableScroll","useEffect","columns","updateColumn","logUnhandledMessage","useColumnActions","toggleOrApplySort","column","isValidNumber","updateTableConfig","getAllCellsInColumn","getPinStateFromElement","isJsonGroup","useCellFocus","useKeyboardNavigation","useCellEditing","useTableContextMenu","isGroupColumn","useSelection","cellBlock","useCellBlockSelection","getHeaderCell","getAriaRowIndex","row"],"mappings":"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"}
@@ -1,76 +0,0 @@
1
- 'use strict';
2
-
3
- var vuuContextMenu = require('@vuu-ui/vuu-context-menu');
4
- var vuuUtils = require('@vuu-ui/vuu-utils');
5
- var react = require('react');
6
-
7
- const NO_ROWS = [];
8
- const isTableLocation = (location) => ["grid", "header", "filter"].includes(location);
9
- const getDataSourceRow = (dataRows, rowIndex) => {
10
- const row = dataRows.find((dataRow) => dataRow.index === rowIndex);
11
- if (row) {
12
- return row;
13
- } else {
14
- throw Error(
15
- `useTableContextMenu data row not found for rowIndex ${rowIndex}`
16
- );
17
- }
18
- };
19
- const useTableContextMenu = ({
20
- allowContextMenu = true,
21
- columns,
22
- dataRows,
23
- dataSource,
24
- getSelectedRows,
25
- headerCount = 1
26
- }) => {
27
- const showContextMenu = vuuContextMenu.useContextMenu();
28
- const onContextMenu = react.useCallback(
29
- (evt) => {
30
- const target = evt.target;
31
- const cellEl = target?.closest("div[role='cell']");
32
- const rowEl = target?.closest("div[role='row']");
33
- if (cellEl && rowEl) {
34
- const { selectedRowsCount } = dataSource;
35
- const rowIndex = vuuUtils.getAriaRowIndex(rowEl) - headerCount - 1;
36
- const ariaColIndex = vuuUtils.getAriaColIndex(cellEl);
37
- const dataRow = getDataSourceRow(dataRows, rowIndex);
38
- const column = vuuUtils.columnByAriaIndex(
39
- columns,
40
- ariaColIndex
41
- );
42
- if (!column.isSystemColumn) {
43
- const menuOptions = {
44
- column,
45
- columns,
46
- dataRow,
47
- selectedRows: selectedRowsCount === 0 ? NO_ROWS : getSelectedRows(),
48
- viewport: dataSource.viewport
49
- };
50
- const menuShowing = showContextMenu(evt, "grid", menuOptions, {
51
- onOpenChange: (isOpen) => {
52
- console.log(`[useTableContextMenu] onOpenChange ${isOpen}`);
53
- cellEl.classList.remove("ContextOpen");
54
- }
55
- });
56
- if (menuShowing) {
57
- cellEl.classList.add("ContextOpen");
58
- }
59
- }
60
- }
61
- },
62
- [
63
- columns,
64
- dataRows,
65
- dataSource,
66
- getSelectedRows,
67
- headerCount,
68
- showContextMenu
69
- ]
70
- );
71
- return allowContextMenu ? onContextMenu : void 0;
72
- };
73
-
74
- exports.isTableLocation = isTableLocation;
75
- exports.useTableContextMenu = useTableContextMenu;
76
- //# 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":["useContextMenu","useCallback","getAriaRowIndex","getAriaColIndex","columnByAriaIndex"],"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,kBAAkBA,6BAAe,EAAA;AAEvC,EAAA,MAAM,aAAgB,GAAAC,iBAAA;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,GAAAC,wBAAA,CAAgB,KAAK,CAAA,GAAI,WAAc,GAAA,CAAA;AACxD,QAAM,MAAA,YAAA,GAAeC,yBAAgB,MAAM,CAAA;AAC3C,QAAM,MAAA,OAAA,GAAU,gBAAiB,CAAA,QAAA,EAAU,QAAQ,CAAA;AACnD,QAAA,MAAM,MAAS,GAAAC,0BAAA;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,421 +0,0 @@
1
- 'use strict';
2
-
3
- var vuuDataReact = require('@vuu-ui/vuu-data-react');
4
- var vuuUtils = require('@vuu-ui/vuu-utils');
5
- var react = require('react');
6
-
7
- const { info } = vuuUtils.logger("useTableModel");
8
- const DEFAULT_COLUMN_WIDTH = 100;
9
- const columnWithoutDataType = ({ serverDataType }) => serverDataType === void 0;
10
- const getDataType = (column, tableSchema) => {
11
- const schemaColumn = tableSchema?.columns.find(
12
- ({ name }) => name === column.name
13
- );
14
- if (schemaColumn) {
15
- return schemaColumn.serverDataType;
16
- } else {
17
- return column.serverDataType;
18
- }
19
- };
20
- const CheckboxColumnDescriptor = (selectionModel, width = 25) => ({
21
- allowColumnHeaderMenu: false,
22
- className: selectionModel === "checkbox-disabled" ? "vuuDisabled" : void 0,
23
- label: "",
24
- name: "",
25
- width,
26
- resizeable: false,
27
- sortable: false,
28
- isSystemColumn: true,
29
- type: {
30
- name: "checkbox",
31
- renderer: {
32
- name: "checkbox-row-selector-cell"
33
- }
34
- }
35
- });
36
- const PinnedCheckboxColumnDescriptor = (selectionModel, width) => ({
37
- ...CheckboxColumnDescriptor(selectionModel, width),
38
- pin: "left"
39
- });
40
- const getDefaultAlignment = (serverDataType) => serverDataType === void 0 ? void 0 : vuuUtils.isNumericType(serverDataType) ? "right" : "left";
41
- const tableModelReducer = (state, action) => {
42
- info?.(`TableModelReducer ${action.type}`);
43
- switch (action.type) {
44
- case "init": {
45
- if (state.tableConfig.columnLayout === "manual" && action.tableConfig.columnLayout === "fit") {
46
- return init({
47
- ...action,
48
- tableConfig: vuuUtils.applyRuntimeColumnWidthsToConfig(
49
- action.tableConfig,
50
- state.columns
51
- )
52
- });
53
- } else {
54
- return init(action, state);
55
- }
56
- }
57
- case "moveColumn":
58
- return moveColumn(state, action);
59
- case "resizeColumn":
60
- return resizeColumn(state, action);
61
- case "setTableSchema":
62
- return setTableSchema(state, action);
63
- case "hideColumns":
64
- return hideColumns(state, action);
65
- case "showColumns":
66
- return showColumns(state, action);
67
- case "updateColumnProp":
68
- return updateColumnProp(state, action);
69
- case "tableConfig":
70
- return updateTableConfig(state, action);
71
- default:
72
- console.log(`unhandled action ${action.type}`);
73
- return state;
74
- }
75
- };
76
- const useTableModel = ({
77
- config: tableConfigProp,
78
- dataSource,
79
- selectionModel,
80
- availableWidth
81
- }) => {
82
- const [state, dispatchTableModelAction] = react.useReducer(
83
- tableModelReducer,
84
- {
85
- availableWidth,
86
- tableConfig: tableConfigProp,
87
- dataSource,
88
- selectionModel
89
- },
90
- init
91
- );
92
- const { columns, headings, tableConfig, ...tableAttributes } = state;
93
- return {
94
- columns,
95
- dispatchTableModelAction,
96
- headings,
97
- tableAttributes,
98
- tableConfig
99
- };
100
- };
101
- function init({ availableWidth, dataSource, selectionModel, tableConfig }, previousConfig) {
102
- const { checkboxColumnWidth = 25, columns, ...tableAttributes } = tableConfig;
103
- const { config: dataSourceConfig, tableSchema } = dataSource;
104
- const toRuntimeColumnDescriptor = columnDescriptorToRuntimeColumDescriptor(
105
- tableAttributes,
106
- tableSchema
107
- );
108
- const runtimeColumns = [];
109
- let colIndex = selectionModel?.startsWith("checkbox") ? 2 : 1;
110
- vuuUtils.assertAllColumnsAreIncludedInSubscription(columns, dataSourceConfig.columns);
111
- for (const column of columns) {
112
- runtimeColumns.push(
113
- toRuntimeColumnDescriptor(column, column.hidden ? -1 : colIndex)
114
- );
115
- if (!column.hidden) {
116
- colIndex += 1;
117
- }
118
- }
119
- if (selectionModel?.startsWith("checkbox")) {
120
- const somePinnedLeft = runtimeColumns.some((col) => col.pin === "left");
121
- runtimeColumns.splice(
122
- 0,
123
- 0,
124
- toRuntimeColumnDescriptor(
125
- somePinnedLeft ? PinnedCheckboxColumnDescriptor(selectionModel, checkboxColumnWidth) : CheckboxColumnDescriptor(selectionModel, checkboxColumnWidth),
126
- 1
127
- )
128
- );
129
- }
130
- const { columnLayout = "static", selectionBookendWidth = 4 } = tableConfig;
131
- const runtimeColumnsWithLayout = vuuUtils.applyWidthToColumns(runtimeColumns, {
132
- availableWidth,
133
- columnLayout
134
- });
135
- const columnsInRenderOrder = runtimeColumnsWithLayout.some(vuuUtils.isPinned) ? vuuUtils.sortPinnedColumns(runtimeColumnsWithLayout, selectionBookendWidth) : runtimeColumnsWithLayout;
136
- let state = {
137
- availableWidth,
138
- columns: columnsInRenderOrder,
139
- headings: vuuUtils.getTableHeadings(columnsInRenderOrder),
140
- tableConfig,
141
- ...tableAttributes
142
- };
143
- if (dataSourceConfig) {
144
- const { columns: _, ...rest } = dataSourceConfig;
145
- state = updateTableConfig(state, {
146
- type: "tableConfig",
147
- ...rest,
148
- confirmed: vuuUtils.checkConfirmationPending(previousConfig)
149
- });
150
- }
151
- return state;
152
- }
153
- const getLabel = (label, columnFormatHeader) => {
154
- if (columnFormatHeader === "uppercase") {
155
- return label.toUpperCase();
156
- } else if (columnFormatHeader === "capitalize") {
157
- return label[0].toUpperCase() + label.slice(1).toLowerCase();
158
- }
159
- return label;
160
- };
161
- const columnDescriptorToRuntimeColumDescriptor = (tableAttributes, tableSchema) => (column, ariaColIndex) => {
162
- const { columnDefaultWidth = DEFAULT_COLUMN_WIDTH, columnFormatHeader } = tableAttributes;
163
- const serverDataType = getDataType(column, tableSchema);
164
- const {
165
- align = getDefaultAlignment(serverDataType),
166
- name,
167
- label = vuuUtils.getColumnLabel(column),
168
- source = "server",
169
- width = columnDefaultWidth,
170
- ...rest
171
- } = column;
172
- const runtimeColumnWithDefaults = {
173
- ...rest,
174
- align,
175
- ariaColIndex,
176
- CellRenderer: vuuUtils.getCellRenderer(column),
177
- HeaderCellContentRenderer: vuuUtils.getColumnHeaderContentRenderer(column),
178
- HeaderCellLabelRenderer: vuuUtils.getColumnHeaderLabelRenderer(column),
179
- clientSideEditValidationCheck: vuuUtils.hasValidationRules(column.type) ? vuuDataReact.buildValidationChecker(column.type.rules) : void 0,
180
- label: getLabel(label, columnFormatHeader),
181
- name,
182
- originalIdx: ariaColIndex,
183
- serverDataType,
184
- source,
185
- valueFormatter: vuuUtils.getValueFormatter(column, serverDataType),
186
- width
187
- };
188
- if (vuuUtils.isGroupColumn(runtimeColumnWithDefaults)) {
189
- runtimeColumnWithDefaults.columns = runtimeColumnWithDefaults.columns.map(
190
- (col) => columnDescriptorToRuntimeColumDescriptor(tableAttributes)(col, -1)
191
- );
192
- }
193
- return runtimeColumnWithDefaults;
194
- };
195
- function moveColumn(state, { column, moveBy }) {
196
- const { columns } = state;
197
- if (typeof moveBy === "number") {
198
- const idx = columns.indexOf(column);
199
- const newColumns = columns.slice();
200
- const [movedColumns] = newColumns.splice(idx, 1);
201
- newColumns.splice(idx + moveBy, 0, movedColumns);
202
- return {
203
- ...state,
204
- columns: newColumns
205
- };
206
- }
207
- return state;
208
- }
209
- function hideColumns(state, { columns }) {
210
- console.log(`[useTableModel] hideColumns ${JSON.stringify(columns)}`);
211
- if (columns.some((col) => col.hidden !== true)) {
212
- return columns.reduce((s, c) => {
213
- if (c.hidden !== true) {
214
- return updateColumnProp(s, {
215
- type: "updateColumnProp",
216
- column: c,
217
- hidden: true
218
- });
219
- } else {
220
- return s;
221
- }
222
- }, state);
223
- } else {
224
- return state;
225
- }
226
- }
227
- function showColumns(state, { columns }) {
228
- if (columns.some((col) => col.hidden)) {
229
- return columns.reduce((s, c) => {
230
- if (c.hidden) {
231
- return updateColumnProp(s, {
232
- type: "updateColumnProp",
233
- column: c,
234
- hidden: false
235
- });
236
- } else {
237
- return s;
238
- }
239
- }, state);
240
- } else {
241
- return state;
242
- }
243
- }
244
- function resizeColumn(state, { column, phase, width }) {
245
- const type = "updateColumnProp";
246
- const resizing = phase !== "end";
247
- switch (phase) {
248
- case "begin":
249
- return updateColumnProp(state, { type, column, resizing });
250
- case "end": {
251
- const { tableConfig } = state;
252
- const isFit = tableConfig.columnLayout === "fit";
253
- let newState = isFit ? {
254
- ...state,
255
- tableConfig: vuuUtils.applyRuntimeColumnWidthsToConfig(
256
- tableConfig,
257
- state.columns
258
- )
259
- } : state;
260
- if (column.pin && !column.pinnedWidth && width) {
261
- newState = adjustPinOffsets(newState, column, width);
262
- }
263
- return updateColumnProp(newState, { type, column, resizing, width });
264
- }
265
- case "resize":
266
- return updateColumnProp(state, { type, column, width });
267
- default:
268
- throw Error(`useTableModel.resizeColumn, invalid resizePhase ${phase}`);
269
- }
270
- }
271
- function setTableSchema(state, { tableSchema }) {
272
- const { columns } = state;
273
- if (columns.some(columnWithoutDataType)) {
274
- const cols = columns.map((column) => {
275
- const serverDataType = getDataType(column, tableSchema);
276
- return {
277
- ...column,
278
- align: column.align ?? getDefaultAlignment(serverDataType),
279
- serverDataType
280
- };
281
- });
282
- return {
283
- ...state,
284
- columns: cols
285
- };
286
- } else {
287
- return state;
288
- }
289
- }
290
- function adjustPinOffsets(state, column, width) {
291
- const newColumns = state.columns.slice();
292
- if (column.pin === "left") {
293
- const diff = width - column.width;
294
- const colIndex = newColumns.findIndex((col) => col.name === column.name);
295
- for (let i = colIndex + 1; i < newColumns.length; i++) {
296
- const pinnedColumn = newColumns.at(i);
297
- if (pinnedColumn?.pin === "left" && typeof pinnedColumn?.pinnedOffset === "number") {
298
- newColumns[i] = {
299
- ...newColumns[i],
300
- pinnedOffset: pinnedColumn.pinnedOffset + diff
301
- };
302
- if (pinnedColumn.pinnedWidth) {
303
- newColumns[i] = {
304
- ...newColumns[i],
305
- pinnedWidth: pinnedColumn.pinnedWidth + diff
306
- };
307
- break;
308
- }
309
- } else {
310
- throw Error(
311
- `[useTableModel] adjustPinOffsets, invalid column pin, no endPin following pinned column`
312
- );
313
- }
314
- }
315
- } else if (column.pin === "right") {
316
- throw "whoaaargh";
317
- } else {
318
- throw Error(
319
- `[useTableModel] adjustPinOffsets, invalid param, column is not pinned `
320
- );
321
- }
322
- return {
323
- ...state,
324
- columns: newColumns
325
- };
326
- }
327
- function updateColumnProp(state, action) {
328
- let { columns, tableConfig } = state;
329
- const { align, column, hidden, label, resizing, width } = action;
330
- const targetColumn = columns.find((col) => col.name === column.name);
331
- if (targetColumn) {
332
- if (align === "left" || align === "right") {
333
- columns = vuuUtils.replaceColumn(columns, { ...targetColumn, align });
334
- }
335
- if (typeof label === "string") {
336
- columns = vuuUtils.replaceColumn(columns, { ...targetColumn, label });
337
- }
338
- if (typeof resizing === "boolean") {
339
- columns = vuuUtils.replaceColumn(columns, { ...targetColumn, resizing });
340
- }
341
- if (typeof hidden === "boolean") {
342
- columns = vuuUtils.replaceColumn(columns, { ...targetColumn, hidden });
343
- }
344
- if (typeof width === "number") {
345
- columns = vuuUtils.replaceColumn(columns, { ...targetColumn, width });
346
- const targetConfigColumn = tableConfig.columns.find(
347
- (col) => col.name === column.name
348
- );
349
- if (targetConfigColumn) {
350
- tableConfig = {
351
- ...tableConfig,
352
- columns: vuuUtils.replaceColumn(tableConfig.columns, {
353
- ...targetConfigColumn,
354
- width
355
- })
356
- };
357
- }
358
- }
359
- }
360
- return {
361
- ...state,
362
- columns,
363
- tableConfig
364
- };
365
- }
366
- function updateTableConfig(state, {
367
- confirmed,
368
- filterSpec,
369
- groupBy,
370
- sort
371
- }) {
372
- let result = state;
373
- const { availableWidth, columnLayout = "static" } = state;
374
- if (groupBy.length > 0) {
375
- const groupedColumns = vuuUtils.applyGroupByToColumns({
376
- columns: result.columns,
377
- groupBy,
378
- confirmed,
379
- availableWidth
380
- });
381
- const columns = vuuUtils.applyWidthToColumns(groupedColumns, {
382
- availableWidth,
383
- columnLayout
384
- });
385
- result = {
386
- ...state,
387
- columns
388
- };
389
- } else if (result.columns.length > 0 && vuuUtils.isGroupColumn(result.columns[0]) && confirmed) {
390
- result = {
391
- ...state,
392
- columns: vuuUtils.flattenColumnGroup(result.columns)
393
- };
394
- }
395
- if (sort.sortDefs.length > 0) {
396
- result = {
397
- ...state,
398
- columns: vuuUtils.applySortToColumns(result.columns, sort)
399
- };
400
- } else if (vuuUtils.existingSort(result.columns)) {
401
- result = {
402
- ...state,
403
- columns: vuuUtils.removeSort(result.columns)
404
- };
405
- }
406
- if (filterSpec.filter.length > 0) {
407
- result = {
408
- ...state,
409
- columns: vuuUtils.applyFilterToColumns(result.columns, filterSpec)
410
- };
411
- } else if (result.columns.some(vuuUtils.isFilteredColumn)) {
412
- result = {
413
- ...state,
414
- columns: vuuUtils.stripFilterFromColumns(result.columns)
415
- };
416
- }
417
- return result;
418
- }
419
-
420
- exports.useTableModel = useTableModel;
421
- //# sourceMappingURL=useTableModel.js.map