@1771technologies/lytenyte-pro 1.0.0-beta.1 → 1.0.0-beta.10

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 (396) hide show
  1. package/dist/+types.d.ts +4135 -3940
  2. package/dist/cell-selection/adjust-rect-for-row-and-cell-span.d.ts +1 -1
  3. package/dist/cell-selection/adjust-rect-for-row-and-cell-span.js +39 -39
  4. package/dist/cell-selection/are-rects-equal.d.ts +1 -1
  5. package/dist/cell-selection/are-rects-equal.js +6 -4
  6. package/dist/cell-selection/bound-selection-rect.d.ts +1 -1
  7. package/dist/cell-selection/bound-selection-rect.js +14 -14
  8. package/dist/cell-selection/cell-selection-containers.js +108 -78
  9. package/dist/cell-selection/cell-selection-driver.js +250 -254
  10. package/dist/cell-selection/cell-style-row.d.ts +12 -6
  11. package/dist/cell-selection/cell-style-row.js +82 -79
  12. package/dist/cell-selection/deselect-rect-range.d.ts +1 -1
  13. package/dist/cell-selection/deselect-rect-range.js +42 -41
  14. package/dist/cell-selection/expand-cell-selection-down.d.ts +7 -4
  15. package/dist/cell-selection/expand-cell-selection-down.js +30 -34
  16. package/dist/cell-selection/expand-cell-selection-end.d.ts +7 -4
  17. package/dist/cell-selection/expand-cell-selection-end.js +31 -35
  18. package/dist/cell-selection/expand-cell-selection-start.d.ts +7 -4
  19. package/dist/cell-selection/expand-cell-selection-start.js +30 -34
  20. package/dist/cell-selection/expand-cell-selection-up.d.ts +7 -4
  21. package/dist/cell-selection/expand-cell-selection-up.js +30 -34
  22. package/dist/cell-selection/full-width-start-end-index.d.ts +1 -1
  23. package/dist/cell-selection/full-width-start-end-index.js +3 -3
  24. package/dist/cell-selection/get-root-cell.d.ts +6 -2
  25. package/dist/cell-selection/get-root-cell.js +79 -81
  26. package/dist/cell-selection/is-bottom-rect.d.ts +1 -1
  27. package/dist/cell-selection/is-bottom-rect.js +5 -5
  28. package/dist/cell-selection/is-center-col-rect.d.ts +6 -3
  29. package/dist/cell-selection/is-center-col-rect.js +5 -3
  30. package/dist/cell-selection/is-center-rect.d.ts +1 -1
  31. package/dist/cell-selection/is-center-rect.js +3 -3
  32. package/dist/cell-selection/is-end-rect.d.ts +6 -3
  33. package/dist/cell-selection/is-end-rect.js +2 -2
  34. package/dist/cell-selection/is-overlapping-rect.d.ts +1 -1
  35. package/dist/cell-selection/is-overlapping-rect.js +6 -4
  36. package/dist/cell-selection/is-start-rect.d.ts +6 -3
  37. package/dist/cell-selection/is-start-rect.js +2 -2
  38. package/dist/cell-selection/is-top-rect.d.ts +1 -1
  39. package/dist/cell-selection/is-top-rect.js +2 -2
  40. package/dist/cell-selection/is-within-selection-rect.d.ts +1 -1
  41. package/dist/cell-selection/is-within-selection-rect.js +1 -1
  42. package/dist/cell-selection/split-cell-selection-rect.d.ts +13 -7
  43. package/dist/cell-selection/split-cell-selection-rect.js +53 -47
  44. package/dist/cell-selection/update-additive-cell-selection.d.ts +7 -4
  45. package/dist/cell-selection/update-additive-cell-selection.js +22 -23
  46. package/dist/cell-selection/use-edge-scroll.d.ts +10 -8
  47. package/dist/cell-selection/use-edge-scroll.js +65 -63
  48. package/dist/cells/cell-default.d.ts +5 -1
  49. package/dist/cells/cell-default.js +5 -5
  50. package/dist/cells/cell-editor.d.ts +4 -2
  51. package/dist/cells/cell-editor.js +121 -86
  52. package/dist/cells/cell.d.ts +16 -3
  53. package/dist/cells/cell.js +55 -26
  54. package/dist/column-manager/branch-lookup-context.d.ts +3 -1
  55. package/dist/column-manager/branch.d.ts +12 -4
  56. package/dist/column-manager/branch.js +39 -29
  57. package/dist/column-manager/column-manager.d.ts +58 -9
  58. package/dist/column-manager/column-manager.js +9 -9
  59. package/dist/column-manager/context.d.ts +1 -1
  60. package/dist/column-manager/label.d.ts +10 -2
  61. package/dist/column-manager/label.js +11 -12
  62. package/dist/column-manager/leaf.d.ts +10 -2
  63. package/dist/column-manager/leaf.js +42 -32
  64. package/dist/column-manager/move-handle.d.ts +14 -6
  65. package/dist/column-manager/move-handle.js +54 -50
  66. package/dist/column-manager/root.d.ts +9 -3
  67. package/dist/column-manager/root.js +26 -13
  68. package/dist/column-manager/use-column-manager.d.ts +14 -14
  69. package/dist/column-manager/use-column-manager.js +21 -21
  70. package/dist/column-manager/use-columns-from-context.d.ts +2 -2
  71. package/dist/column-manager/use-columns-from-context.js +19 -19
  72. package/dist/column-manager/visibility-checkbox.d.ts +14 -6
  73. package/dist/column-manager/visibility-checkbox.js +36 -23
  74. package/dist/context.d.ts +4 -4
  75. package/dist/filter-tree/branch.d.ts +13 -5
  76. package/dist/filter-tree/branch.js +23 -13
  77. package/dist/filter-tree/context.d.ts +16 -16
  78. package/dist/filter-tree/filter-tree.d.ts +53 -12
  79. package/dist/filter-tree/filter-tree.js +16 -16
  80. package/dist/filter-tree/hooks/use-filter-tree.d.ts +35 -29
  81. package/dist/filter-tree/hooks/use-filter-tree.js +94 -92
  82. package/dist/filter-tree/hooks/use-tree-item.d.ts +6 -6
  83. package/dist/filter-tree/hooks/use-tree-item.js +101 -108
  84. package/dist/filter-tree/inclusion-checkbox.d.ts +14 -6
  85. package/dist/filter-tree/inclusion-checkbox.js +19 -9
  86. package/dist/filter-tree/label.d.ts +10 -2
  87. package/dist/filter-tree/label.js +11 -12
  88. package/dist/filter-tree/leaf.d.ts +10 -2
  89. package/dist/filter-tree/leaf.js +15 -5
  90. package/dist/filter-tree/root.d.ts +23 -7
  91. package/dist/filter-tree/root.js +51 -23
  92. package/dist/grid-box/+types.d.ts +10 -10
  93. package/dist/grid-box/context.d.ts +4 -4
  94. package/dist/grid-box/grid-box.d.ts +26 -6
  95. package/dist/grid-box/grid-box.js +6 -6
  96. package/dist/grid-box/item.d.ts +11 -3
  97. package/dist/grid-box/item.js +29 -26
  98. package/dist/grid-box/panel.d.ts +13 -1
  99. package/dist/grid-box/panel.js +9 -2
  100. package/dist/grid-box/root.d.ts +11 -5
  101. package/dist/grid-box/root.js +11 -2
  102. package/dist/grid-box/use-aggregation-box-items.d.ts +18 -15
  103. package/dist/grid-box/use-aggregation-box-items.js +54 -55
  104. package/dist/grid-box/use-column-box-items.d.ts +33 -23
  105. package/dist/grid-box/use-column-box-items.js +90 -78
  106. package/dist/grid-box/use-row-group-box-items.d.ts +19 -14
  107. package/dist/grid-box/use-row-group-box-items.js +116 -124
  108. package/dist/grid-provider/context.d.ts +6 -4
  109. package/dist/grid-provider/provider.d.ts +5 -3
  110. package/dist/grid-provider/provider.js +1 -1
  111. package/dist/grid-provider/use-grid.d.ts +2 -2
  112. package/dist/grid-provider/use-grid.js +1 -1
  113. package/dist/grid.d.ts +150 -25
  114. package/dist/grid.js +39 -25
  115. package/dist/header/header-cell.d.ts +13 -5
  116. package/dist/header/header-cell.js +41 -15
  117. package/dist/header/header-group-cell.d.ts +10 -2
  118. package/dist/header/header-group-cell.js +21 -6
  119. package/dist/header/header-row.d.ts +10 -2
  120. package/dist/header/header-row.js +2 -2
  121. package/dist/header/header.d.ts +10 -1
  122. package/dist/header/header.js +11 -2
  123. package/dist/header/resize-handler.d.ts +15 -6
  124. package/dist/header/resize-handler.js +128 -117
  125. package/dist/header/use-drag-move.d.ts +23 -12
  126. package/dist/header/use-drag-move.js +83 -87
  127. package/dist/header/use-header-cell-renderer.d.ts +9 -2
  128. package/dist/header/use-header-cell-renderer.js +24 -29
  129. package/dist/icons/index.d.ts +92 -0
  130. package/dist/icons/index.js +92 -0
  131. package/dist/index.d.ts +1 -0
  132. package/dist/index.js +1 -0
  133. package/dist/license.js +174 -174
  134. package/dist/listbox/context.d.ts +2 -2
  135. package/dist/listbox/item.d.ts +10 -1
  136. package/dist/listbox/item.js +23 -19
  137. package/dist/listbox/panel.d.ts +10 -1
  138. package/dist/listbox/panel.js +69 -43
  139. package/dist/listbox/root.d.ts +5 -3
  140. package/dist/listbox/root.js +7 -7
  141. package/dist/root/dialog-driver.js +22 -16
  142. package/dist/root/popover-driver.js +27 -16
  143. package/dist/root/root.d.ts +7 -3
  144. package/dist/root/root.js +111 -107
  145. package/dist/row-data-source-client/+types.d.ts +17 -17
  146. package/dist/row-data-source-client/built-ins/avg.js +3 -4
  147. package/dist/row-data-source-client/built-ins/built-ins.d.ts +17 -17
  148. package/dist/row-data-source-client/built-ins/built-ins.js +17 -17
  149. package/dist/row-data-source-client/built-ins/count.js +3 -5
  150. package/dist/row-data-source-client/built-ins/first.js +1 -1
  151. package/dist/row-data-source-client/built-ins/group.js +1 -1
  152. package/dist/row-data-source-client/built-ins/last.js +1 -1
  153. package/dist/row-data-source-client/built-ins/max.js +9 -13
  154. package/dist/row-data-source-client/built-ins/min.js +9 -13
  155. package/dist/row-data-source-client/built-ins/sum.js +8 -10
  156. package/dist/row-data-source-client/filter/+types.d.ts +35 -13
  157. package/dist/row-data-source-client/filter/compute-filtered-rows.d.ts +16 -2
  158. package/dist/row-data-source-client/filter/compute-filtered-rows.js +102 -102
  159. package/dist/row-data-source-client/pivots/create-agg-model.d.ts +8 -4
  160. package/dist/row-data-source-client/pivots/create-agg-model.js +8 -9
  161. package/dist/row-data-source-client/pivots/create-pivot-columns-from-paths.d.ts +6 -1
  162. package/dist/row-data-source-client/pivots/create-pivot-columns-from-paths.js +42 -46
  163. package/dist/row-data-source-client/pivots/create-pivot-columns.d.ts +6 -1
  164. package/dist/row-data-source-client/pivots/create-pivot-columns.js +18 -19
  165. package/dist/row-data-source-client/pivots/create-pivot-tree.d.ts +7 -1
  166. package/dist/row-data-source-client/pivots/create-pivot-tree.js +19 -19
  167. package/dist/row-data-source-client/tree/client-tree.d.ts +19 -13
  168. package/dist/row-data-source-client/tree/client-tree.js +64 -67
  169. package/dist/row-data-source-client/tree/evaluator-aggregation.d.ts +5 -2
  170. package/dist/row-data-source-client/tree/evaluator-aggregation.js +6 -6
  171. package/dist/row-data-source-client/tree/evaluator-group.d.ts +5 -2
  172. package/dist/row-data-source-client/tree/evaluator-group.js +6 -7
  173. package/dist/row-data-source-client/tree/traverse.d.ts +6 -2
  174. package/dist/row-data-source-client/tree/traverse.js +16 -19
  175. package/dist/row-data-source-client/use-client-data-source-paginated.d.ts +11 -7
  176. package/dist/row-data-source-client/use-client-data-source-paginated.js +528 -512
  177. package/dist/row-data-source-client/use-client-data-source.d.ts +11 -7
  178. package/dist/row-data-source-client/use-client-data-source.js +673 -639
  179. package/dist/row-data-source-client/use-client-tree-data-source.d.ts +10 -6
  180. package/dist/row-data-source-client/use-client-tree-data-source.js +499 -489
  181. package/dist/row-data-source-server/async-tree/+types.async-tree.d.ts +36 -33
  182. package/dist/row-data-source-server/async-tree/apply-delete-action-to-tree.d.ts +4 -1
  183. package/dist/row-data-source-server/async-tree/apply-delete-action-to-tree.js +19 -23
  184. package/dist/row-data-source-server/async-tree/apply-set-action-to-tree.d.ts +4 -1
  185. package/dist/row-data-source-server/async-tree/apply-set-action-to-tree.js +17 -25
  186. package/dist/row-data-source-server/async-tree/check-set-action-item-keys-are-unique.js +18 -18
  187. package/dist/row-data-source-server/async-tree/check-set-action-item-keys-are-valid.js +9 -10
  188. package/dist/row-data-source-server/async-tree/check-set-action-item-keys-fit.d.ts +4 -1
  189. package/dist/row-data-source-server/async-tree/check-set-action-item-keys-fit.js +13 -14
  190. package/dist/row-data-source-server/async-tree/check-set-action-item-kinds.js +9 -10
  191. package/dist/row-data-source-server/async-tree/get-parent-node-by-path.d.ts +4 -1
  192. package/dist/row-data-source-server/async-tree/get-parent-node-by-path.js +13 -13
  193. package/dist/row-data-source-server/async-tree/is-set-action-a-no-op-on-node.d.ts +4 -1
  194. package/dist/row-data-source-server/async-tree/is-set-action-a-no-op-on-node.js +1 -1
  195. package/dist/row-data-source-server/async-tree/make-async-tree.js +17 -17
  196. package/dist/row-data-source-server/async-tree/maybe-apply-parent-remove-self.d.ts +3 -1
  197. package/dist/row-data-source-server/async-tree/maybe-apply-parent-remove-self.js +6 -6
  198. package/dist/row-data-source-server/async-tree/maybe-apply-resize.d.ts +5 -1
  199. package/dist/row-data-source-server/async-tree/maybe-apply-resize.js +11 -14
  200. package/dist/row-data-source-server/async-tree/maybe-apply-set-action-items.d.ts +4 -1
  201. package/dist/row-data-source-server/async-tree/maybe-apply-set-action-items.js +42 -46
  202. package/dist/row-data-source-server/range-tree/range-tree.d.ts +28 -28
  203. package/dist/row-data-source-server/range-tree/range-tree.js +49 -48
  204. package/dist/row-data-source-server/use-server-data-source.d.ts +12 -3
  205. package/dist/row-data-source-server/use-server-data-source.js +667 -654
  206. package/dist/row-data-source-server/utils/get-node-depth.js +7 -7
  207. package/dist/row-data-source-server/utils/get-node-path.js +7 -7
  208. package/dist/row-data-source-server/utils/get-request-id.js +3 -4
  209. package/dist/rows/row/context.d.ts +2 -2
  210. package/dist/rows/row/row.d.ts +16 -3
  211. package/dist/rows/row/row.js +19 -4
  212. package/dist/rows/row/use-row-context-value.d.ts +5 -2
  213. package/dist/rows/row/use-row-context-value.js +23 -26
  214. package/dist/rows/row-detail-row.d.ts +4 -2
  215. package/dist/rows/row-detail-row.js +147 -124
  216. package/dist/rows/row-full-width.d.ts +12 -4
  217. package/dist/rows/row-full-width.js +35 -7
  218. package/dist/rows/rows-container.d.ts +10 -1
  219. package/dist/rows/rows-container.js +12 -3
  220. package/dist/rows/rows-sections.d.ts +30 -3
  221. package/dist/rows/rows-sections.js +42 -10
  222. package/dist/rows/scrollers/native-scroller.d.ts +3 -1
  223. package/dist/rows/scrollers/native-scroller.js +17 -13
  224. package/dist/sort-manager/+types.d.ts +14 -7
  225. package/dist/sort-manager/context.d.ts +7 -7
  226. package/dist/sort-manager/hooks/use-sort-manager.d.ts +10 -10
  227. package/dist/sort-manager/hooks/use-sort-manager.js +47 -51
  228. package/dist/sort-manager/hooks/use-sort-row-item.d.ts +58 -47
  229. package/dist/sort-manager/hooks/use-sort-row-item.js +127 -132
  230. package/dist/sort-manager/hooks/use-sortable-column-items.d.ts +6 -3
  231. package/dist/sort-manager/hooks/use-sortable-column-items.js +10 -10
  232. package/dist/sort-manager/root.d.ts +7 -1
  233. package/dist/sort-manager/root.js +10 -10
  234. package/dist/sort-manager/sort-add.d.ts +13 -5
  235. package/dist/sort-manager/sort-add.js +8 -8
  236. package/dist/sort-manager/sort-apply.d.ts +12 -4
  237. package/dist/sort-manager/sort-apply.js +16 -16
  238. package/dist/sort-manager/sort-cancel.d.ts +12 -4
  239. package/dist/sort-manager/sort-cancel.js +19 -19
  240. package/dist/sort-manager/sort-clear.d.ts +12 -4
  241. package/dist/sort-manager/sort-clear.js +15 -16
  242. package/dist/sort-manager/sort-column-select.d.ts +14 -6
  243. package/dist/sort-manager/sort-column-select.js +26 -15
  244. package/dist/sort-manager/sort-direction-select.d.ts +14 -6
  245. package/dist/sort-manager/sort-direction-select.js +27 -19
  246. package/dist/sort-manager/sort-manager.d.ts +93 -12
  247. package/dist/sort-manager/sort-manager.js +12 -12
  248. package/dist/sort-manager/sort-remove.d.ts +12 -4
  249. package/dist/sort-manager/sort-remove.js +8 -8
  250. package/dist/sort-manager/sort-row.d.ts +10 -2
  251. package/dist/sort-manager/sort-row.js +4 -1
  252. package/dist/sort-manager/sort-rows.d.ts +10 -1
  253. package/dist/sort-manager/sort-rows.js +1 -1
  254. package/dist/sort-manager/sort-value-select.d.ts +15 -7
  255. package/dist/sort-manager/sort-value-select.js +28 -19
  256. package/dist/sort-manager/utils/sort-item-to-sort-model.d.ts +5 -2
  257. package/dist/sort-manager/utils/sort-item-to-sort-model.js +46 -49
  258. package/dist/sort-manager/utils/sort-model-to-sort-items.d.ts +5 -2
  259. package/dist/sort-manager/utils/sort-model-to-sort-items.js +36 -44
  260. package/dist/state/+types.d.ts +41 -28
  261. package/dist/state/api/column-autosize.d.ts +5 -3
  262. package/dist/state/api/column-autosize.js +63 -64
  263. package/dist/state/api/column-by-id.js +4 -4
  264. package/dist/state/api/column-field.js +17 -20
  265. package/dist/state/api/column-from-index.js +4 -4
  266. package/dist/state/api/column-group-toggle.js +8 -8
  267. package/dist/state/api/column-index.js +5 -5
  268. package/dist/state/api/column-move.js +49 -47
  269. package/dist/state/api/column-resize.js +9 -7
  270. package/dist/state/api/column-update.js +11 -11
  271. package/dist/state/api/dialog-frame.d.ts +9 -5
  272. package/dist/state/api/dialog-frame.js +11 -12
  273. package/dist/state/api/edit-begin.d.ts +5 -3
  274. package/dist/state/api/edit-begin.js +72 -85
  275. package/dist/state/api/edit-end.d.ts +5 -3
  276. package/dist/state/api/edit-end.js +38 -41
  277. package/dist/state/api/edit-is-cell-active.d.ts +5 -3
  278. package/dist/state/api/edit-is-cell-active.js +17 -24
  279. package/dist/state/api/edit-update.d.ts +5 -3
  280. package/dist/state/api/edit-update.js +75 -86
  281. package/dist/state/api/event-listeners.d.ts +12 -3
  282. package/dist/state/api/event-listeners.js +16 -17
  283. package/dist/state/api/export-csv.js +34 -36
  284. package/dist/state/api/export-data-rect.js +22 -22
  285. package/dist/state/api/focus-cell.d.ts +5 -3
  286. package/dist/state/api/focus-cell.js +110 -109
  287. package/dist/state/api/popover-frame.d.ts +10 -6
  288. package/dist/state/api/popover-frame.js +11 -12
  289. package/dist/state/api/position-from-element.js +5 -6
  290. package/dist/state/api/row-by-id.js +3 -3
  291. package/dist/state/api/row-by-index.js +11 -6
  292. package/dist/state/api/row-detail-is-expanded.d.ts +3 -1
  293. package/dist/state/api/row-detail-is-expanded.js +4 -4
  294. package/dist/state/api/row-detail-rendered-height.d.ts +6 -4
  295. package/dist/state/api/row-detail-rendered-height.js +10 -12
  296. package/dist/state/api/row-detail-toggle.js +26 -30
  297. package/dist/state/api/row-group-apply-expansions.d.ts +3 -1
  298. package/dist/state/api/row-group-apply-expansions.js +15 -17
  299. package/dist/state/api/row-group-column-index.d.ts +3 -1
  300. package/dist/state/api/row-group-column-index.js +14 -12
  301. package/dist/state/api/row-group-is-expanded.d.ts +3 -1
  302. package/dist/state/api/row-group-is-expanded.js +11 -13
  303. package/dist/state/api/row-group-toggle.js +5 -5
  304. package/dist/state/api/row-handle-select.d.ts +4 -2
  305. package/dist/state/api/row-handle-select.js +36 -40
  306. package/dist/state/api/row-select-all.js +14 -15
  307. package/dist/state/api/row-select.d.ts +4 -2
  308. package/dist/state/api/row-select.js +30 -33
  309. package/dist/state/api/row-selected.js +10 -11
  310. package/dist/state/api/scroll-into-view.d.ts +4 -2
  311. package/dist/state/api/scroll-into-view.js +47 -47
  312. package/dist/state/api/sort-for-column.js +6 -7
  313. package/dist/state/api/use-row-drag.js +22 -24
  314. package/dist/state/helpers/cell-row-group.d.ts +5 -1
  315. package/dist/state/helpers/cell-row-group.js +18 -16
  316. package/dist/state/helpers/column-add-row-group.d.ts +16 -6
  317. package/dist/state/helpers/column-add-row-group.js +63 -58
  318. package/dist/state/helpers/column-layout.d.ts +7 -1
  319. package/dist/state/helpers/column-layout.js +60 -60
  320. package/dist/state/helpers/column-marker.d.ts +8 -4
  321. package/dist/state/helpers/column-marker.js +38 -34
  322. package/dist/state/helpers/column-view.d.ts +21 -15
  323. package/dist/state/helpers/column-view.js +56 -32
  324. package/dist/state/helpers/edit-on-change.d.ts +18 -10
  325. package/dist/state/helpers/edit-on-change.js +24 -24
  326. package/dist/state/helpers/empty-row-data-source.js +15 -15
  327. package/dist/state/helpers/get-data-rect.d.ts +20 -10
  328. package/dist/state/helpers/get-data-rect.js +67 -62
  329. package/dist/state/helpers/get-full-width-callback.d.ts +5 -1
  330. package/dist/state/helpers/get-full-width-callback.js +5 -6
  331. package/dist/state/helpers/get-span-callback.d.ts +6 -1
  332. package/dist/state/helpers/get-span-callback.js +15 -18
  333. package/dist/state/helpers/resolve-column.d.ts +6 -2
  334. package/dist/state/helpers/resolve-column.js +18 -18
  335. package/dist/state/helpers/row-layout/get-focus-criteria.d.ts +15 -12
  336. package/dist/state/helpers/row-layout/get-focus-criteria.js +57 -56
  337. package/dist/state/helpers/row-layout/row-layout.d.ts +15 -9
  338. package/dist/state/helpers/row-layout/row-layout.js +387 -401
  339. package/dist/state/use-lytenyte.js +556 -516
  340. package/dist/tree-view/branch/branch.d.ts +16 -8
  341. package/dist/tree-view/branch/branch.js +104 -52
  342. package/dist/tree-view/branch/use-branch-keys.d.ts +5 -1
  343. package/dist/tree-view/branch/use-branch-keys.js +71 -74
  344. package/dist/tree-view/context.d.ts +21 -17
  345. package/dist/tree-view/hooks/use-tree-view-paths.d.ts +6 -1
  346. package/dist/tree-view/hooks/use-tree-view-paths.js +5 -5
  347. package/dist/tree-view/index.d.ts +35 -7
  348. package/dist/tree-view/index.js +7 -7
  349. package/dist/tree-view/leaf.d.ts +10 -2
  350. package/dist/tree-view/leaf.js +29 -20
  351. package/dist/tree-view/navigation/get-all-ids.js +3 -3
  352. package/dist/tree-view/navigation/get-first-node.js +3 -3
  353. package/dist/tree-view/navigation/get-last-node.js +3 -3
  354. package/dist/tree-view/navigation/get-next-node.js +6 -8
  355. package/dist/tree-view/navigation/get-prev-node.js +6 -8
  356. package/dist/tree-view/panel/make-handle-navigation.js +23 -31
  357. package/dist/tree-view/panel/make-handle-selection.js +68 -77
  358. package/dist/tree-view/panel/make-handle-typeahead.js +34 -40
  359. package/dist/tree-view/panel/panel.d.ts +10 -1
  360. package/dist/tree-view/panel/panel.js +40 -20
  361. package/dist/tree-view/panel/use-tree-navigation.js +64 -52
  362. package/dist/tree-view/root.d.ts +20 -14
  363. package/dist/tree-view/root.js +53 -55
  364. package/dist/tree-view/utils/get-focusable-nodes.js +4 -2
  365. package/dist/tree-view/utils/get-focused-node.js +11 -11
  366. package/dist/tree-view/utils/get-ids-between-nodes.d.ts +5 -1
  367. package/dist/tree-view/utils/get-ids-between-nodes.js +10 -11
  368. package/dist/tree-view/utils/get-panel.js +5 -5
  369. package/dist/tree-view/utils/get-parent-node.js +6 -7
  370. package/dist/tree-view/utils/get-sibling-branches.js +8 -10
  371. package/dist/tree-view/utils/get-tree-node-id.js +1 -1
  372. package/dist/tree-view/utils/is-branch-node.js +1 -1
  373. package/dist/tree-view/utils/is-leaf-node.js +1 -1
  374. package/dist/tree-view/utils/is-tree-node-disabled.js +1 -1
  375. package/dist/tree-view/utils/select-node.d.ts +5 -1
  376. package/dist/tree-view/utils/select-node.js +8 -11
  377. package/dist/tree-view/utils/toggle-all-selections.js +4 -6
  378. package/dist/tree-view/utils/toggle-selection.js +15 -18
  379. package/dist/tree-view/virtualized/force-sync-scrolling.d.ts +3 -1
  380. package/dist/tree-view/virtualized/force-sync-scrolling.js +24 -18
  381. package/dist/tree-view/virtualized/get-virtual-tree-paths.d.ts +3 -1
  382. package/dist/tree-view/virtualized/get-virtual-tree-paths.js +11 -12
  383. package/dist/tree-view/virtualized/make-virtual-tree.d.ts +26 -21
  384. package/dist/tree-view/virtualized/make-virtual-tree.js +79 -85
  385. package/dist/tree-view/virtualized/use-flattened-tree.d.ts +17 -8
  386. package/dist/tree-view/virtualized/use-flattened-tree.js +30 -31
  387. package/dist/tree-view/virtualized/use-row-start-and-end.d.ts +6 -1
  388. package/dist/tree-view/virtualized/use-row-start-and-end.js +21 -23
  389. package/dist/tree-view/virtualized/use-virtualized-tree.d.ts +21 -15
  390. package/dist/tree-view/virtualized/use-virtualized-tree.js +103 -90
  391. package/dist/utils/cycle-sorts.js +12 -14
  392. package/dist/viewport/begin-editing.d.ts +6 -2
  393. package/dist/viewport/begin-editing.js +9 -13
  394. package/dist/viewport/viewport.d.ts +10 -1
  395. package/dist/viewport/viewport.js +93 -70
  396. package/package.json +15 -9
@@ -1,679 +1,692 @@
1
1
  import { atom, createStore } from "@1771technologies/atom";
2
2
  import { useRef } from "react";
3
- import { makeAsyncTree } from "./async-tree/make-async-tree";
3
+ import { makeAsyncTree } from "./async-tree/make-async-tree.js";
4
4
  import { makeGridAtom } from "@1771technologies/lytenyte-shared";
5
- import { getNodeDepth } from "./utils/get-node-depth";
6
- import { getRequestId } from "./utils/get-request-id";
7
- import { RangeTree } from "./range-tree/range-tree";
8
- import { getNodePath } from "./utils/get-node-path";
5
+ import { getNodeDepth } from "./utils/get-node-depth.js";
6
+ import { getRequestId } from "./utils/get-request-id.js";
7
+ import { RangeTree } from "./range-tree/range-tree.js";
8
+ import { getNodePath } from "./utils/get-node-path.js";
9
9
  import { equal } from "@1771technologies/lytenyte-js-utils";
10
- export function makeServerDataSource({ dataFetcher, dataColumnPivotFetcher, dataInFilterItemFetcher, cellUpdateHandler, cellUpdateOptimistically = true, blockSize = 200, }) {
11
- let grid = null;
12
- const snapshot$ = atom(Date.now());
13
- const rdsStore = createStore();
14
- const tree$ = atom(makeAsyncTree());
15
- const tree = makeGridAtom(tree$, rdsStore);
16
- const isLoading$ = atom(false);
17
- const isLoading = makeGridAtom(isLoading$, rdsStore);
18
- const error$ = atom();
19
- const loadError = makeGridAtom(error$, rdsStore);
20
- const nodesWithError = atom(new Map());
21
- const initialized = atom(false);
22
- const model$ = atom({
23
- sorts: [],
24
- filters: {},
25
- filtersIn: {},
26
- quickSearch: null,
27
- group: [],
28
- groupExpansions: {},
29
- aggregations: {},
30
- pivotGroupExpansions: {},
31
- pivotMode: false,
32
- pivotModel: {
33
- columns: [],
34
- filters: {},
35
- filtersIn: {},
36
- rows: [],
37
- sorts: [],
38
- values: [],
39
- },
10
+ export function makeServerDataSource({
11
+ dataFetcher,
12
+ dataColumnPivotFetcher,
13
+ dataInFilterItemFetcher,
14
+ cellUpdateHandler,
15
+ cellUpdateOptimistically = true,
16
+ blockSize = 200,
17
+ }) {
18
+ let grid = null;
19
+ const snapshot$ = atom(Date.now());
20
+ const rdsStore = createStore();
21
+ const tree$ = atom(makeAsyncTree());
22
+ const tree = makeGridAtom(tree$, rdsStore);
23
+ const isLoading$ = atom(false);
24
+ const isLoading = makeGridAtom(isLoading$, rdsStore);
25
+ const error$ = atom();
26
+ const loadError = makeGridAtom(error$, rdsStore);
27
+ const nodesWithError = atom(new Map());
28
+ const initialized = atom(false);
29
+ const model$ = atom({
30
+ sorts: [],
31
+ filters: {},
32
+ filtersIn: {},
33
+ quickSearch: null,
34
+ group: [],
35
+ groupExpansions: {},
36
+ aggregations: {},
37
+ pivotGroupExpansions: {},
38
+ pivotMode: false,
39
+ pivotModel: {
40
+ columns: [],
41
+ filters: {},
42
+ filtersIn: {},
43
+ rows: [],
44
+ sorts: [],
45
+ values: [],
46
+ },
47
+ });
48
+ const model = makeGridAtom(model$, rdsStore);
49
+ const pivotGroupExpansions = atom((g) => g(model$).pivotGroupExpansions);
50
+ const rowGroupExpansions = atom((g) => g(model$).groupExpansions);
51
+ const pivotMode = atom((g) => g(model$).pivotMode);
52
+ const topData = atom([]);
53
+ const botData = atom([]);
54
+ const seenRequests = new Set();
55
+ const dataResponseHandler = (res) => {
56
+ const t = tree.get();
57
+ const dataResponses = res.filter((r) => {
58
+ return !("kind" in r && (r.kind === "top" || r.kind === "bottom"));
40
59
  });
41
- const model = makeGridAtom(model$, rdsStore);
42
- const pivotGroupExpansions = atom((g) => g(model$).pivotGroupExpansions);
43
- const rowGroupExpansions = atom((g) => g(model$).groupExpansions);
44
- const pivotMode = atom((g) => g(model$).pivotMode);
45
- const topData = atom([]);
46
- const botData = atom([]);
47
- const seenRequests = new Set();
48
- const dataResponseHandler = (res) => {
49
- const t = tree.get();
50
- const dataResponses = res.filter((r) => {
51
- return !("kind" in r && (r.kind === "top" || r.kind === "bottom"));
52
- });
53
- dataResponses.sort((l, r) => l.path.length - r.path.length);
54
- const pinResponses = res.filter((r) => {
55
- return "kind" in r && (r.kind === "top" || r.kind === "bottom");
56
- });
57
- pinResponses.forEach((p) => {
58
- if (p.kind === "top") {
59
- rdsStore.set(topData, p.data);
60
- }
61
- else {
62
- rdsStore.set(botData, p.data);
63
- }
64
- });
65
- dataResponses.forEach((r) => {
66
- t.set({
67
- path: r.path,
68
- items: r.data.map((c, i) => {
69
- if (c.kind === "leaf") {
70
- return {
71
- kind: "leaf",
72
- data: c,
73
- relIndex: r.start + i,
74
- };
75
- }
76
- else {
77
- return {
78
- kind: "parent",
79
- data: c,
80
- path: c.key,
81
- relIndex: r.start + i,
82
- size: c.childCount,
83
- };
84
- }
85
- }),
86
- size: r.size,
87
- });
88
- });
89
- };
90
- const dataRequestHandler = async (p, force = false, onSuccess, onFailure) => {
91
- if (!grid)
92
- return;
93
- const unseen = p.filter((x) => force || !seenRequests.has(x.id));
94
- unseen.forEach((x) => seenRequests.add(x.id));
95
- if (unseen.length === 0) {
96
- onSuccess?.();
97
- return;
60
+ dataResponses.sort((l, r) => l.path.length - r.path.length);
61
+ const pinResponses = res.filter((r) => {
62
+ return "kind" in r && (r.kind === "top" || r.kind === "bottom");
63
+ });
64
+ pinResponses.forEach((p) => {
65
+ if (p.kind === "top") {
66
+ rdsStore.set(topData, p.data);
67
+ } else {
68
+ rdsStore.set(botData, p.data);
69
+ }
70
+ });
71
+ dataResponses.forEach((r) => {
72
+ t.set({
73
+ path: r.path,
74
+ items: r.data.map((c, i) => {
75
+ if (c.kind === "leaf") {
76
+ return {
77
+ kind: "leaf",
78
+ data: c,
79
+ relIndex: r.start + i,
80
+ };
81
+ } else {
82
+ return {
83
+ kind: "parent",
84
+ data: c,
85
+ path: c.key,
86
+ relIndex: r.start + i,
87
+ size: c.childCount,
88
+ };
89
+ }
90
+ }),
91
+ size: r.size,
92
+ });
93
+ });
94
+ };
95
+ const dataRequestHandler = async (p, force = false, onSuccess, onFailure) => {
96
+ if (!grid) return;
97
+ const unseen = p.filter((x) => force || !seenRequests.has(x.id));
98
+ unseen.forEach((x) => seenRequests.add(x.id));
99
+ if (unseen.length === 0) {
100
+ onSuccess?.();
101
+ return;
102
+ }
103
+ rdsStore.set(nodesWithError, (prev) => {
104
+ const next = new Map(prev);
105
+ p.forEach((r) => {
106
+ for (let i = r.rowStartIndex; i < r.rowEndIndex; i++) {
107
+ next.delete(i);
108
+ }
109
+ });
110
+ return prev;
111
+ });
112
+ try {
113
+ const res = await dataFetcher({
114
+ grid: grid,
115
+ model: model.get(),
116
+ reqTime: Date.now(),
117
+ requests: p,
118
+ });
119
+ dataResponseHandler(res);
120
+ onSuccess?.();
121
+ } catch (e) {
122
+ // Mark them as unseen since the request failed.
123
+ unseen.forEach((x) => seenRequests.delete(x.id));
124
+ onFailure?.(e);
125
+ console.error(e);
126
+ } finally {
127
+ rdsStore.set(snapshot$, Date.now());
128
+ grid.state.rowDataStore.rowClearCache();
129
+ }
130
+ };
131
+ const viewChange = () => {
132
+ if (!grid) return;
133
+ const bounds = grid.state.viewBounds.get();
134
+ const f = flat.get();
135
+ const te = bounds.rowTopEnd;
136
+ const seen = new Set();
137
+ const requests = [];
138
+ for (let i = bounds.rowCenterStart - te; i < bounds.rowCenterEnd - te; i++) {
139
+ const ranges = f.rangeTree.findRangesForRowIndex(i);
140
+ ranges.forEach((c) => {
141
+ if (c.parent.kind === "root") {
142
+ const blockIndex = Math.floor(i / blockSize);
143
+ const start = blockIndex * blockSize;
144
+ const end = Math.min(start + blockSize, c.parent.size);
145
+ const reqId = getRequestId([], start, end);
146
+ if (seen.has(reqId)) return;
147
+ seen.add(reqId);
148
+ const size = start + blockSize > c.parent.size ? c.parent.size - start : blockSize;
149
+ requests.push({
150
+ id: reqId,
151
+ path: [],
152
+ start,
153
+ end,
154
+ rowStartIndex: i,
155
+ rowEndIndex: i + size,
156
+ });
157
+ } else {
158
+ const blockIndex = Math.floor(c.parent.relIndex / blockSize);
159
+ const start = blockIndex * blockSize;
160
+ const end = Math.min(start + blockSize, c.parent.size);
161
+ const path = getNodePath(c.parent);
162
+ const reqId = getRequestId(path, start, end);
163
+ if (seen.has(reqId)) return;
164
+ seen.add(reqId);
165
+ const size = start + blockSize > c.parent.size ? c.parent.size - start : blockSize;
166
+ requests.push({
167
+ id: reqId,
168
+ path,
169
+ start,
170
+ end,
171
+ rowStartIndex: i,
172
+ rowEndIndex: i + size,
173
+ });
98
174
  }
175
+ });
176
+ }
177
+ dataRequestHandler(
178
+ requests,
179
+ false,
180
+ () => {},
181
+ (e) => {
99
182
  rdsStore.set(nodesWithError, (prev) => {
100
- const next = new Map(prev);
101
- p.forEach((r) => {
102
- for (let i = r.rowStartIndex; i < r.rowEndIndex; i++) {
103
- next.delete(i);
104
- }
105
- });
106
- return prev;
183
+ const next = new Map(prev);
184
+ requests.forEach((r) => {
185
+ for (let i = r.rowStartIndex; i < r.rowEndIndex; i++) {
186
+ next.set(i, e);
187
+ }
188
+ });
189
+ return prev;
107
190
  });
108
- try {
109
- const res = await dataFetcher({
110
- grid: grid,
111
- model: model.get(),
112
- reqTime: Date.now(),
113
- requests: p,
114
- });
115
- dataResponseHandler(res);
116
- onSuccess?.();
117
- }
118
- catch (e) {
119
- // Mark them as unseen since the request failed.
120
- unseen.forEach((x) => seenRequests.delete(x.id));
121
- onFailure?.(e);
122
- console.error(e);
123
- }
124
- finally {
125
- rdsStore.set(snapshot$, Date.now());
126
- grid.state.rowDataStore.rowClearCache();
127
- }
191
+ },
192
+ );
193
+ };
194
+ const resetRequest = async () => {
195
+ seenRequests.clear();
196
+ tree.set(makeAsyncTree());
197
+ rdsStore.set(nodesWithError, new Map());
198
+ // Initialize the grid.
199
+ const initialDataRequest = {
200
+ path: [],
201
+ id: getRequestId([], 0, blockSize),
202
+ rowStartIndex: 0,
203
+ rowEndIndex: blockSize,
204
+ start: 0,
205
+ end: blockSize,
128
206
  };
129
- const viewChange = () => {
130
- if (!grid)
131
- return;
132
- const bounds = grid.state.viewBounds.get();
133
- const f = flat.get();
134
- const te = bounds.rowTopEnd;
135
- const seen = new Set();
136
- const requests = [];
137
- for (let i = bounds.rowCenterStart - te; i < bounds.rowCenterEnd - te; i++) {
138
- const ranges = f.rangeTree.findRangesForRowIndex(i);
139
- ranges.forEach((c) => {
140
- if (c.parent.kind === "root") {
141
- const blockIndex = Math.floor(i / blockSize);
142
- const start = blockIndex * blockSize;
143
- const end = Math.min(start + blockSize, c.parent.size);
144
- const reqId = getRequestId([], start, end);
145
- if (seen.has(reqId))
146
- return;
147
- seen.add(reqId);
148
- const size = start + blockSize > c.parent.size ? c.parent.size - start : blockSize;
149
- requests.push({
150
- id: reqId,
151
- path: [],
152
- start,
153
- end,
154
- rowStartIndex: i,
155
- rowEndIndex: i + size,
156
- });
157
- }
158
- else {
159
- const blockIndex = Math.floor(c.parent.relIndex / blockSize);
160
- const start = blockIndex * blockSize;
161
- const end = Math.min(start + blockSize, c.parent.size);
162
- const path = getNodePath(c.parent);
163
- const reqId = getRequestId(path, start, end);
164
- if (seen.has(reqId))
165
- return;
166
- seen.add(reqId);
167
- const size = start + blockSize > c.parent.size ? c.parent.size - start : blockSize;
168
- requests.push({
169
- id: reqId,
170
- path,
171
- start,
172
- end,
173
- rowStartIndex: i,
174
- rowEndIndex: i + size,
175
- });
176
- }
177
- });
207
+ loadError.set(null);
208
+ isLoading.set(true);
209
+ await dataRequestHandler(
210
+ [initialDataRequest],
211
+ false,
212
+ () => {},
213
+ (e) => {
214
+ loadError.set(e);
215
+ },
216
+ );
217
+ isLoading.set(false);
218
+ };
219
+ const flat$ = atom((g) => {
220
+ g(snapshot$);
221
+ const mode = rdsStore.get(pivotMode);
222
+ const expansions = mode ? g(pivotGroupExpansions) : g(rowGroupExpansions);
223
+ const t = g(tree$);
224
+ const rowIdToRow = new Map();
225
+ const rowIndexToRow = new Map();
226
+ const rowIdToRowIndex = new Map();
227
+ const ranges = [];
228
+ function processParent(node, start) {
229
+ const rows = [...node.byIndex.values()].sort((l, r) => l.relIndex - r.relIndex);
230
+ // Track the additional rows added by expanded groups
231
+ let offset = 0;
232
+ for (let i = 0; i < rows.length; i++) {
233
+ const row = rows[i];
234
+ const rowIndex = row.relIndex + start + offset;
235
+ rowIndexToRow.set(rowIndex, row);
236
+ rowIdToRowIndex.set(row.data.id, rowIndex);
237
+ rowIdToRow.set(row.data.id, row);
238
+ if (row.kind === "parent" && expansions[row.data.id]) {
239
+ offset += processParent(row, rowIndex + 1);
178
240
  }
179
- dataRequestHandler(requests, false, () => { }, (e) => {
180
- rdsStore.set(nodesWithError, (prev) => {
181
- const next = new Map(prev);
182
- requests.forEach((r) => {
183
- for (let i = r.rowStartIndex; i < r.rowEndIndex; i++) {
184
- next.set(i, e);
185
- }
186
- });
187
- return prev;
188
- });
189
- });
241
+ }
242
+ ranges.push({ rowStart: start, rowEnd: offset + node.size + start, parent: node });
243
+ return offset + node.size;
244
+ }
245
+ const size = processParent(t, 0);
246
+ const rangeTree = new RangeTree(ranges);
247
+ return {
248
+ size,
249
+ rowIndexToRow,
250
+ rowIdToRow,
251
+ rowIdToRowIndex,
252
+ rangeTree,
190
253
  };
191
- const resetRequest = async () => {
192
- seenRequests.clear();
193
- tree.set(makeAsyncTree());
194
- rdsStore.set(nodesWithError, new Map());
195
- // Initialize the grid.
196
- const initialDataRequest = {
197
- path: [],
198
- id: getRequestId([], 0, blockSize),
199
- rowStartIndex: 0,
200
- rowEndIndex: blockSize,
201
- start: 0,
202
- end: blockSize,
203
- };
204
- loadError.set(null);
205
- isLoading.set(true);
206
- await dataRequestHandler([initialDataRequest], false, () => { }, (e) => {
207
- loadError.set(e);
208
- });
209
- isLoading.set(false);
254
+ });
255
+ const flat = makeGridAtom(flat$, rdsStore);
256
+ const cleanup = [];
257
+ const init = (g) => {
258
+ grid = g;
259
+ const sorts = g.state.sortModel.get();
260
+ const filters = g.state.filterModel.get();
261
+ const filtersIn = g.state.filterInModel.get();
262
+ const quickSearch = g.state.quickSearch.get();
263
+ const group = g.state.rowGroupModel.get();
264
+ const groupExpansions = g.state.rowGroupExpansions.get();
265
+ const aggregations = g.state.aggModel.get();
266
+ const pivotMode = g.state.columnPivotMode.get();
267
+ const pivotModel = g.state.columnPivotModel.get();
268
+ const pivotGroupExpansions = g.state.columnPivotRowGroupExpansions.get();
269
+ rdsStore.set(model$, {
270
+ sorts,
271
+ filters,
272
+ filtersIn,
273
+ quickSearch,
274
+ aggregations,
275
+ group,
276
+ groupExpansions,
277
+ pivotMode,
278
+ pivotModel,
279
+ pivotGroupExpansions,
280
+ });
281
+ rdsStore.set(initialized, true);
282
+ // Handle row count changes
283
+ const f = flat.get();
284
+ g.state.rowDataStore.rowCenterCount.set(f.size);
285
+ g.state.rowDataStore.rowBottomCount.set(rdsStore.get(botData).length);
286
+ g.state.rowDataStore.rowTopCount.set(rdsStore.get(topData).length);
287
+ rdsStore.sub(flat$, () => {
288
+ const f = flat.get();
289
+ g.state.rowDataStore.rowCenterCount.set(f.size);
290
+ viewChange();
291
+ });
292
+ rdsStore.sub(topData, () => {
293
+ g.state.rowDataStore.rowTopCount.set(rdsStore.get(topData).length);
294
+ g.state.rowDataStore.rowClearCache();
295
+ });
296
+ rdsStore.sub(botData, () => {
297
+ g.state.rowDataStore.rowBottomCount.set(rdsStore.get(botData).length);
298
+ g.state.rowDataStore.rowClearCache();
299
+ });
300
+ resetRequest();
301
+ // Watch the view bound changes.
302
+ g.state.viewBounds.watch(() => {
303
+ viewChange();
304
+ });
305
+ let prevPivotColumnModel = pivotModel.columns;
306
+ let prevPivotColumnValues = pivotModel.values;
307
+ const updatePivotColumns = async (mdl, ignoreEqualCheck = false) => {
308
+ if (
309
+ !ignoreEqualCheck &&
310
+ equal(prevPivotColumnModel, mdl.columns) &&
311
+ equal(prevPivotColumnValues, mdl.values)
312
+ )
313
+ return;
314
+ const cols = await dataColumnPivotFetcher?.({
315
+ grid: grid,
316
+ model: model.get(),
317
+ reqTime: Date.now(),
318
+ });
319
+ if (cols) grid?.state.columnPivotColumns.set(cols);
320
+ resetRequest();
321
+ prevPivotColumnModel = mdl.columns;
322
+ prevPivotColumnValues = mdl.values;
210
323
  };
211
- const flat$ = atom((g) => {
212
- g(snapshot$);
213
- const mode = rdsStore.get(pivotMode);
214
- const expansions = mode ? g(pivotGroupExpansions) : g(rowGroupExpansions);
215
- const t = g(tree$);
216
- const rowIdToRow = new Map();
217
- const rowIndexToRow = new Map();
218
- const rowIdToRowIndex = new Map();
219
- const ranges = [];
220
- function processParent(node, start) {
221
- const rows = [...node.byIndex.values()].sort((l, r) => l.relIndex - r.relIndex);
222
- // Track the additional rows added by expanded groups
223
- let offset = 0;
224
- for (let i = 0; i < rows.length; i++) {
225
- const row = rows[i];
226
- const rowIndex = row.relIndex + start + offset;
227
- rowIndexToRow.set(rowIndex, row);
228
- rowIdToRowIndex.set(row.data.id, rowIndex);
229
- rowIdToRow.set(row.data.id, row);
230
- if (row.kind === "parent" && expansions[row.data.id]) {
231
- offset += processParent(row, rowIndex + 1);
232
- }
233
- }
234
- ranges.push({ rowStart: start, rowEnd: offset + node.size + start, parent: node });
235
- return offset + node.size;
236
- }
237
- const size = processParent(t, 0);
238
- const rangeTree = new RangeTree(ranges);
239
- return {
240
- size,
241
- rowIndexToRow,
242
- rowIdToRow,
243
- rowIdToRowIndex,
244
- rangeTree,
245
- };
324
+ if (pivotMode) updatePivotColumns(pivotModel);
325
+ // Make these deep equality checks
326
+ cleanup.push(
327
+ g.state.columnPivotMode.watch(() => {
328
+ const model = g.state.columnPivotModel.get();
329
+ updatePivotColumns(model, true);
330
+ rdsStore.set(model$, (prev) => ({ ...prev, pivotMode: g.state.columnPivotMode.get() }));
331
+ g.state.rowDataStore.rowClearCache();
332
+ }),
333
+ );
334
+ cleanup.push(
335
+ g.state.columnPivotModel.watch(() => {
336
+ const model = g.state.columnPivotModel.get();
337
+ updatePivotColumns(model);
338
+ rdsStore.set(model$, (prev) => ({
339
+ ...prev,
340
+ pivotModel: model,
341
+ }));
342
+ g.state.rowDataStore.rowClearCache();
343
+ }),
344
+ );
345
+ g.state.columnPivotRowGroupExpansions.watch(() => {
346
+ rdsStore.set(model$, (prev) => ({
347
+ ...prev,
348
+ columnPivotGroupExpansions: g.state.columnPivotRowGroupExpansions.get(),
349
+ }));
350
+ grid?.state.rowDataStore.rowClearCache();
246
351
  });
247
- const flat = makeGridAtom(flat$, rdsStore);
248
- const cleanup = [];
249
- const init = (g) => {
250
- grid = g;
251
- const sorts = g.state.sortModel.get();
252
- const filters = g.state.filterModel.get();
253
- const filtersIn = g.state.filterInModel.get();
254
- const quickSearch = g.state.quickSearch.get();
255
- const group = g.state.rowGroupModel.get();
256
- const groupExpansions = g.state.rowGroupExpansions.get();
257
- const aggregations = g.state.aggModel.get();
258
- const pivotMode = g.state.columnPivotMode.get();
259
- const pivotModel = g.state.columnPivotModel.get();
260
- const pivotGroupExpansions = g.state.columnPivotRowGroupExpansions.get();
261
- rdsStore.set(model$, {
262
- sorts,
263
- filters,
264
- filtersIn,
265
- quickSearch,
266
- aggregations,
267
- group,
268
- groupExpansions,
269
- pivotMode,
270
- pivotModel,
271
- pivotGroupExpansions,
272
- });
273
- rdsStore.set(initialized, true);
274
- // Handle row count changes
275
- const f = flat.get();
276
- g.state.rowDataStore.rowCenterCount.set(f.size);
277
- g.state.rowDataStore.rowBottomCount.set(rdsStore.get(botData).length);
278
- g.state.rowDataStore.rowTopCount.set(rdsStore.get(topData).length);
279
- rdsStore.sub(flat$, () => {
280
- const f = flat.get();
281
- g.state.rowDataStore.rowCenterCount.set(f.size);
282
- viewChange();
283
- });
284
- rdsStore.sub(topData, () => {
285
- g.state.rowDataStore.rowTopCount.set(rdsStore.get(topData).length);
286
- g.state.rowDataStore.rowClearCache();
287
- });
288
- rdsStore.sub(botData, () => {
289
- g.state.rowDataStore.rowBottomCount.set(rdsStore.get(botData).length);
290
- g.state.rowDataStore.rowClearCache();
291
- });
352
+ // Sort model monitoring
353
+ cleanup.push(
354
+ g.state.sortModel.watch(() => {
355
+ rdsStore.set(model$, (prev) => ({ ...prev, sorts: g.state.sortModel.get() }));
292
356
  resetRequest();
293
- // Watch the view bound changes.
294
- g.state.viewBounds.watch(() => {
295
- viewChange();
296
- });
297
- let prevPivotColumnModel = pivotModel.columns;
298
- let prevPivotColumnValues = pivotModel.values;
299
- const updatePivotColumns = async (mdl, ignoreEqualCheck = false) => {
300
- if (!ignoreEqualCheck &&
301
- equal(prevPivotColumnModel, mdl.columns) &&
302
- equal(prevPivotColumnValues, mdl.values))
303
- return;
304
- const cols = await dataColumnPivotFetcher?.({
305
- grid: grid,
306
- model: model.get(),
307
- reqTime: Date.now(),
308
- });
309
- if (cols)
310
- grid?.state.columnPivotColumns.set(cols);
311
- resetRequest();
312
- prevPivotColumnModel = mdl.columns;
313
- prevPivotColumnValues = mdl.values;
314
- };
315
- if (pivotMode)
316
- updatePivotColumns(pivotModel);
317
- // Make these deep equality checks
318
- cleanup.push(g.state.columnPivotMode.watch(() => {
319
- const model = g.state.columnPivotModel.get();
320
- updatePivotColumns(model, true);
321
- rdsStore.set(model$, (prev) => ({ ...prev, pivotMode: g.state.columnPivotMode.get() }));
322
- g.state.rowDataStore.rowClearCache();
323
- }));
324
- cleanup.push(g.state.columnPivotModel.watch(() => {
325
- const model = g.state.columnPivotModel.get();
326
- updatePivotColumns(model);
327
- rdsStore.set(model$, (prev) => ({
328
- ...prev,
329
- pivotModel: model,
330
- }));
331
- g.state.rowDataStore.rowClearCache();
332
- }));
333
- g.state.columnPivotRowGroupExpansions.watch(() => {
334
- rdsStore.set(model$, (prev) => ({
335
- ...prev,
336
- columnPivotGroupExpansions: g.state.columnPivotRowGroupExpansions.get(),
337
- }));
338
- grid?.state.rowDataStore.rowClearCache();
339
- });
340
- // Sort model monitoring
341
- cleanup.push(g.state.sortModel.watch(() => {
342
- rdsStore.set(model$, (prev) => ({ ...prev, sorts: g.state.sortModel.get() }));
343
- resetRequest();
344
- }));
345
- // Filter model monitoring
346
- cleanup.push(g.state.filterModel.watch(() => {
347
- rdsStore.set(model$, (prev) => ({ ...prev, filters: g.state.filterModel.get() }));
348
- resetRequest();
349
- }));
350
- cleanup.push(g.state.quickSearch.watch(() => {
351
- rdsStore.set(model$, (prev) => ({ ...prev, quickSearch: g.state.quickSearch.get() }));
352
- resetRequest();
353
- }));
354
- cleanup.push(g.state.filterInModel.watch(() => {
355
- rdsStore.set(model$, (prev) => ({ ...prev, filtersIn: g.state.filterInModel.get() }));
356
- resetRequest();
357
- }));
358
- // Row group model monitoring
359
- cleanup.push(g.state.rowGroupModel.watch(() => {
360
- rdsStore.set(model$, (prev) => ({ ...prev, group: g.state.rowGroupModel.get() }));
361
- resetRequest();
362
- }));
363
- // Row group expansions monitoring
364
- cleanup.push(g.state.rowGroupExpansions.watch(() => {
365
- rdsStore.set(model$, (prev) => ({
366
- ...prev,
367
- groupExpansions: g.state.rowGroupExpansions.get(),
368
- }));
369
- grid?.state.rowDataStore.rowClearCache();
370
- }));
371
- // Agg model monitoring
372
- cleanup.push(g.state.aggModel.watch(() => {
373
- rdsStore.set(model$, (prev) => ({ ...prev, agg: g.state.aggModel.get() }));
374
- resetRequest();
357
+ }),
358
+ );
359
+ // Filter model monitoring
360
+ cleanup.push(
361
+ g.state.filterModel.watch(() => {
362
+ rdsStore.set(model$, (prev) => ({ ...prev, filters: g.state.filterModel.get() }));
363
+ resetRequest();
364
+ }),
365
+ );
366
+ cleanup.push(
367
+ g.state.quickSearch.watch(() => {
368
+ rdsStore.set(model$, (prev) => ({ ...prev, quickSearch: g.state.quickSearch.get() }));
369
+ resetRequest();
370
+ }),
371
+ );
372
+ cleanup.push(
373
+ g.state.filterInModel.watch(() => {
374
+ rdsStore.set(model$, (prev) => ({ ...prev, filtersIn: g.state.filterInModel.get() }));
375
+ resetRequest();
376
+ }),
377
+ );
378
+ // Row group model monitoring
379
+ cleanup.push(
380
+ g.state.rowGroupModel.watch(() => {
381
+ rdsStore.set(model$, (prev) => ({ ...prev, group: g.state.rowGroupModel.get() }));
382
+ resetRequest();
383
+ }),
384
+ );
385
+ // Row group expansions monitoring
386
+ cleanup.push(
387
+ g.state.rowGroupExpansions.watch(() => {
388
+ rdsStore.set(model$, (prev) => ({
389
+ ...prev,
390
+ groupExpansions: g.state.rowGroupExpansions.get(),
375
391
  }));
392
+ grid?.state.rowDataStore.rowClearCache();
393
+ }),
394
+ );
395
+ // Agg model monitoring
396
+ cleanup.push(
397
+ g.state.aggModel.watch(() => {
398
+ rdsStore.set(model$, (prev) => ({ ...prev, agg: g.state.aggModel.get() }));
399
+ resetRequest();
400
+ }),
401
+ );
402
+ };
403
+ const rowById = (id) => {
404
+ const f = flat.get();
405
+ const node = f.rowIdToRow.get(id);
406
+ if (!node) {
407
+ {
408
+ const top = rdsStore.get(topData);
409
+ const node = top.find((c) => c.id === id);
410
+ if (node) return { kind: "leaf", data: node.data, id: node.id };
411
+ }
412
+ {
413
+ const bot = rdsStore.get(topData);
414
+ const node = bot.find((c) => c.id === id);
415
+ if (node) return { kind: "leaf", data: node.data, id: node.id };
416
+ }
417
+ return null;
418
+ }
419
+ if (node.kind === "parent") {
420
+ return {
421
+ kind: "branch",
422
+ data: node.data.data,
423
+ id: node.data.id,
424
+ key: node.path,
425
+ depth: getNodeDepth(node),
426
+ };
427
+ }
428
+ return {
429
+ kind: "leaf",
430
+ data: node.data.data,
431
+ id: node.data.id,
376
432
  };
377
- const rowById = (id) => {
378
- const f = flat.get();
379
- const node = f.rowIdToRow.get(id);
380
- if (!node) {
381
- {
382
- const top = rdsStore.get(topData);
383
- const node = top.find((c) => c.id === id);
384
- if (node)
385
- return { kind: "leaf", data: node.data, id: node.id };
386
- }
387
- {
388
- const bot = rdsStore.get(topData);
389
- const node = bot.find((c) => c.id === id);
390
- if (node)
391
- return { kind: "leaf", data: node.data, id: node.id };
392
- }
393
- return null;
394
- }
395
- if (node.kind === "parent") {
396
- return {
397
- kind: "branch",
398
- data: node.data.data,
399
- id: node.data.id,
400
- key: node.path,
401
- depth: getNodeDepth(node),
402
- };
403
- }
404
- return {
405
- kind: "leaf",
406
- data: node.data.data,
407
- id: node.data.id,
408
- };
409
- };
410
- const rowAllChildIds = (rowId) => {
411
- const f = flat.get();
412
- const row = f.rowIdToRow.get(rowId);
413
- if (!row || row.kind === "leaf")
414
- return [];
415
- const ids = new Set();
416
- const stack = [...row.byPath.values()];
417
- while (stack.length) {
418
- const item = stack.pop();
419
- if (item.kind === "leaf") {
420
- ids.add(item.data.id);
421
- }
422
- else {
423
- stack.push(...item.byPath.values());
424
- ids.add(item.data.id);
425
- }
426
- }
427
- return [...ids];
433
+ };
434
+ const rowAllChildIds = (rowId) => {
435
+ const f = flat.get();
436
+ const row = f.rowIdToRow.get(rowId);
437
+ if (!row || row.kind === "leaf") return [];
438
+ const ids = new Set();
439
+ const stack = [...row.byPath.values()];
440
+ while (stack.length) {
441
+ const item = stack.pop();
442
+ if (item.kind === "leaf") {
443
+ ids.add(item.data.id);
444
+ } else {
445
+ stack.push(...item.byPath.values());
446
+ ids.add(item.data.id);
447
+ }
448
+ }
449
+ return [...ids];
450
+ };
451
+ const rowByIndex = (ri) => {
452
+ const f = flat.get();
453
+ const top = rdsStore.get(topData);
454
+ const bot = rdsStore.get(botData);
455
+ const errors = rdsStore.get(nodesWithError);
456
+ const error = errors.get(ri);
457
+ if (ri == null || ri < 0 || ri >= f.size + top.length + bot.length) return null;
458
+ // Top node
459
+ if (ri < top.length) {
460
+ const row = top[ri];
461
+ if (!row) return null;
462
+ return { kind: "leaf", data: row.data, id: row.id, error };
463
+ }
464
+ if (ri >= f.size + top.length) {
465
+ const i = ri - f.size - top.length;
466
+ const row = bot[i];
467
+ if (!row) return null;
468
+ return { kind: "leaf", data: row.data, id: row.id, error };
469
+ }
470
+ const node = f.rowIndexToRow.get(ri - top.length);
471
+ if (!node && error)
472
+ return { kind: "leaf", data: null, id: `error-${ri}`, loading: false, error };
473
+ if (!node) return { kind: "leaf", data: null, id: `loading-${ri}`, loading: true, error: null };
474
+ if (node.kind === "parent") {
475
+ return {
476
+ kind: "branch",
477
+ data: node.data.data,
478
+ id: node.data.id,
479
+ key: node.path,
480
+ depth: getNodeDepth(node),
481
+ error,
482
+ };
483
+ }
484
+ return {
485
+ kind: "leaf",
486
+ data: node.data.data,
487
+ id: node.data.id,
488
+ error,
428
489
  };
429
- const rowByIndex = (ri) => {
430
- const f = flat.get();
431
- const top = rdsStore.get(topData);
432
- const bot = rdsStore.get(botData);
433
- const errors = rdsStore.get(nodesWithError);
434
- const error = errors.get(ri);
435
- if (ri == null || ri < 0 || ri >= f.size + top.length + bot.length)
436
- return null;
437
- // Top node
438
- if (ri < top.length) {
439
- const row = top[ri];
440
- if (!row)
441
- return null;
442
- return { kind: "leaf", data: row.data, id: row.id, error };
443
- }
444
- if (ri >= f.size + top.length) {
445
- const i = ri - f.size - top.length;
446
- const row = bot[i];
447
- if (!row)
448
- return null;
449
- return { kind: "leaf", data: row.data, id: row.id, error };
450
- }
451
- const node = f.rowIndexToRow.get(ri - top.length);
452
- if (!node && error)
453
- return { kind: "leaf", data: null, id: `error-${ri}`, loading: false, error };
454
- if (!node)
455
- return { kind: "leaf", data: null, id: `loading-${ri}`, loading: true, error: null };
456
- if (node.kind === "parent") {
457
- return {
458
- kind: "branch",
459
- data: node.data.data,
460
- id: node.data.id,
461
- key: node.path,
462
- depth: getNodeDepth(node),
463
- error,
464
- };
465
- }
490
+ };
491
+ const rowExpand = (p) => {
492
+ const f = flat.get();
493
+ const rowIndices = [];
494
+ const requests = Object.entries(p)
495
+ .map(([rowId, state]) => {
496
+ if (!state) return null;
497
+ const rowIndex = rowToIndex(rowId);
498
+ if (rowIndex == null) return null;
499
+ const row = f.rowIndexToRow.get(rowIndex);
500
+ if (!row || row.kind === "leaf") return null;
501
+ const path = getNodePath(row);
502
+ rowIndices.push(rowIndex);
466
503
  return {
467
- kind: "leaf",
468
- data: node.data.data,
469
- id: node.data.id,
470
- error,
504
+ id: getRequestId(path, 0, Math.min(blockSize, row.size)),
505
+ start: 0,
506
+ end: Math.min(blockSize, row.size),
507
+ path,
508
+ rowStartIndex: rowIndex + 1,
509
+ rowEndIndex: Math.min(row.size, rowIndex + blockSize + 1),
471
510
  };
472
- };
473
- const rowExpand = (p) => {
474
- const f = flat.get();
475
- const rowIndices = [];
476
- const requests = Object.entries(p)
477
- .map(([rowId, state]) => {
478
- if (!state)
479
- return null;
480
- const rowIndex = rowToIndex(rowId);
481
- if (rowIndex == null)
482
- return null;
483
- const row = f.rowIndexToRow.get(rowIndex);
484
- if (!row || row.kind === "leaf")
485
- return null;
486
- const path = getNodePath(row);
487
- rowIndices.push(rowIndex);
488
- return {
489
- id: getRequestId(path, 0, Math.min(blockSize, row.size)),
490
- start: 0,
491
- end: Math.min(blockSize, row.size),
492
- path,
493
- rowStartIndex: rowIndex + 1,
494
- rowEndIndex: Math.min(row.size, rowIndex + blockSize + 1),
495
- };
496
- })
497
- .filter((c) => !!c);
498
- const mode = rdsStore.get(pivotMode);
499
- // Remove the errors before requesting.
500
- const errorRows = rdsStore.get(nodesWithError);
501
- if (rowIndices.some((c) => errorRows.has(c))) {
502
- rdsStore.set(nodesWithError, (prev) => {
503
- const n = new Map(prev);
504
- rowIndices.forEach((c) => n.delete(c));
505
- return prev;
506
- });
507
- }
508
- dataRequestHandler(requests, false, () => {
509
- if (mode)
510
- grid?.state.columnPivotColumnGroupExpansions.set((prev) => ({ ...prev, ...p }));
511
- else
512
- grid?.state.rowGroupExpansions.set((prev) => ({ ...prev, ...p }));
513
- }, (error) => {
514
- rdsStore.set(nodesWithError, (prev) => {
515
- const n = new Map(prev);
516
- rowIndices.forEach((c) => n.set(c, error));
517
- return prev;
518
- });
511
+ })
512
+ .filter((c) => !!c);
513
+ const mode = rdsStore.get(pivotMode);
514
+ // Remove the errors before requesting.
515
+ const errorRows = rdsStore.get(nodesWithError);
516
+ if (rowIndices.some((c) => errorRows.has(c))) {
517
+ rdsStore.set(nodesWithError, (prev) => {
518
+ const n = new Map(prev);
519
+ rowIndices.forEach((c) => n.delete(c));
520
+ return prev;
521
+ });
522
+ }
523
+ dataRequestHandler(
524
+ requests,
525
+ false,
526
+ () => {
527
+ if (mode) grid?.state.columnPivotColumnGroupExpansions.set((prev) => ({ ...prev, ...p }));
528
+ else grid?.state.rowGroupExpansions.set((prev) => ({ ...prev, ...p }));
529
+ },
530
+ (error) => {
531
+ rdsStore.set(nodesWithError, (prev) => {
532
+ const n = new Map(prev);
533
+ rowIndices.forEach((c) => n.set(c, error));
534
+ return prev;
519
535
  });
520
- };
521
- const rowToIndex = (rowId) => {
522
- const f = flat.get();
523
- return f.rowIdToRowIndex.get(rowId) ?? null;
524
- };
525
- const rowSelect = (params) => {
526
- if (!grid || params.mode === "none")
527
- return;
528
- if (params.mode === "single") {
529
- if (params.deselect) {
530
- grid.state.rowSelectedIds.set(new Set());
531
- }
532
- else {
533
- grid.state.rowSelectedIds.set(new Set([params.startId]));
534
- }
535
- return;
536
- }
537
- const ids = new Set();
538
- if (params.startId === params.endId) {
539
- ids.add(params.startId);
540
- if (params.selectChildren) {
541
- rowAllChildIds(params.startId).forEach((c) => ids.add(c));
542
- }
543
- }
544
- else {
545
- const first = rowToIndex(params.startId);
546
- const last = rowToIndex(params.endId);
547
- if (first == null || last == null)
548
- return;
549
- const start = Math.min(first, last);
550
- const end = Math.max(first, last);
551
- for (let i = start; i <= end; i++) {
552
- const row = rowByIndex(i);
553
- if (!row)
554
- continue;
555
- if (params.selectChildren) {
556
- rowAllChildIds(row.id).forEach((c) => ids.add(c));
557
- }
558
- if (row?.id)
559
- ids.add(row.id);
560
- }
561
- }
562
- if (params.deselect) {
563
- const current = grid.state.rowSelectedIds.get();
564
- const next = current.difference(ids);
565
- grid.state.rowSelectedIds.set(next);
566
- }
567
- else {
568
- const current = grid.state.rowSelectedIds.get();
569
- const next = current.union(ids);
570
- grid.state.rowSelectedIds.set(next);
571
- }
572
- };
573
- const rowSelectAll = (params) => {
574
- if (!grid)
575
- return;
576
- if (params.deselect) {
577
- grid.state.rowSelectedIds.set(new Set());
578
- return;
536
+ },
537
+ );
538
+ };
539
+ const rowToIndex = (rowId) => {
540
+ const f = flat.get();
541
+ return f.rowIdToRowIndex.get(rowId) ?? null;
542
+ };
543
+ const rowSelect = (params) => {
544
+ if (!grid || params.mode === "none") return;
545
+ if (params.mode === "single") {
546
+ if (params.deselect) {
547
+ grid.state.rowSelectedIds.set(new Set());
548
+ } else {
549
+ grid.state.rowSelectedIds.set(new Set([params.startId]));
550
+ }
551
+ return;
552
+ }
553
+ const ids = new Set();
554
+ if (params.startId === params.endId) {
555
+ ids.add(params.startId);
556
+ if (params.selectChildren) {
557
+ rowAllChildIds(params.startId).forEach((c) => ids.add(c));
558
+ }
559
+ } else {
560
+ const first = rowToIndex(params.startId);
561
+ const last = rowToIndex(params.endId);
562
+ if (first == null || last == null) return;
563
+ const start = Math.min(first, last);
564
+ const end = Math.max(first, last);
565
+ for (let i = start; i <= end; i++) {
566
+ const row = rowByIndex(i);
567
+ if (!row) continue;
568
+ if (params.selectChildren) {
569
+ rowAllChildIds(row.id).forEach((c) => ids.add(c));
579
570
  }
580
- const t = flat.get();
581
- grid.state.rowSelectedIds.set(new Set(t.rowIdToRow.keys()));
582
- };
583
- const rowSetBotData = () => {
584
- throw new Error(`Server data source does not support directly setting pinned rows. Instead send a DataResponsePinned object via the pushData method`);
585
- };
586
- const rowSetTopData = () => {
587
- throw new Error(`Server data source does not support directly setting pinned rows. Instead send a DataResponsePinned object via the pushData method`);
588
- };
589
- // CRUD ops
590
- const rowAdd = () => {
591
- throw new Error(`Server data source does not support adding rows directly. Instead push updates via the pushResponses or pushRequests method`);
592
- };
593
- const rowDelete = () => {
594
- throw new Error(`Server data source does not support deleting rows directly. Instead push updates via the pushResponses or pushRequests method`);
595
- };
596
- const rowUpdate = (updates) => {
597
- const f = flat.get();
598
- const top = rdsStore.get(topData);
599
- const bot = rdsStore.get(botData);
600
- const firstBot = f.size + top.length;
601
- const idMap = new Map([...updates.entries()]
602
- .map(([key, data]) => {
603
- if (typeof key === "string")
604
- return [key, data];
605
- const row = rowByIndex(key);
606
- if (!row)
607
- return null;
608
- return [row.id, data];
571
+ if (row?.id) ids.add(row.id);
572
+ }
573
+ }
574
+ if (params.deselect) {
575
+ const current = grid.state.rowSelectedIds.get();
576
+ const next = current.difference(ids);
577
+ grid.state.rowSelectedIds.set(next);
578
+ } else {
579
+ const current = grid.state.rowSelectedIds.get();
580
+ const next = current.union(ids);
581
+ grid.state.rowSelectedIds.set(next);
582
+ }
583
+ };
584
+ const rowSelectAll = (params) => {
585
+ if (!grid) return;
586
+ if (params.deselect) {
587
+ grid.state.rowSelectedIds.set(new Set());
588
+ return;
589
+ }
590
+ const t = flat.get();
591
+ grid.state.rowSelectedIds.set(new Set(t.rowIdToRow.keys()));
592
+ };
593
+ const rowSetBotData = () => {
594
+ throw new Error(
595
+ `Server data source does not support directly setting pinned rows. Instead send a DataResponsePinned object via the pushData method`,
596
+ );
597
+ };
598
+ const rowSetTopData = () => {
599
+ throw new Error(
600
+ `Server data source does not support directly setting pinned rows. Instead send a DataResponsePinned object via the pushData method`,
601
+ );
602
+ };
603
+ // CRUD ops
604
+ const rowAdd = () => {
605
+ throw new Error(
606
+ `Server data source does not support adding rows directly. Instead push updates via the pushResponses or pushRequests method`,
607
+ );
608
+ };
609
+ const rowDelete = () => {
610
+ throw new Error(
611
+ `Server data source does not support deleting rows directly. Instead push updates via the pushResponses or pushRequests method`,
612
+ );
613
+ };
614
+ const rowUpdate = (updates) => {
615
+ const f = flat.get();
616
+ const top = rdsStore.get(topData);
617
+ const bot = rdsStore.get(botData);
618
+ const firstBot = f.size + top.length;
619
+ const idMap = new Map(
620
+ [...updates.entries()]
621
+ .map(([key, data]) => {
622
+ if (typeof key === "string") return [key, data];
623
+ const row = rowByIndex(key);
624
+ if (!row) return null;
625
+ return [row.id, data];
609
626
  })
610
- .filter((n) => n != null));
611
- cellUpdateHandler?.(idMap);
612
- if (!cellUpdateOptimistically)
613
- return;
614
- for (const [key, data] of updates.entries()) {
615
- const rowIndex = typeof key === "number" ? key : rowToIndex(key);
616
- const row = rowByIndex(rowIndex);
617
- if (!row || !grid) {
618
- console.error(`Failed to find the row at index ${rowIndex} which is being updated.`);
619
- continue;
620
- }
621
- if (rowIndex < top.length) {
622
- top[rowIndex].data = data;
623
- }
624
- else if (rowIndex >= firstBot) {
625
- bot[rowIndex].data = data;
626
- }
627
- else {
628
- const node = f.rowIndexToRow.get(rowIndex - top.length);
629
- if (node)
630
- node.data.data = data;
631
- }
632
- grid.state.rowDataStore.rowInvalidateIndex(rowIndex);
633
- }
634
- };
635
- const inFilterItems = (c) => {
636
- if (!dataInFilterItemFetcher || !grid)
637
- return [];
638
- return dataInFilterItemFetcher({ column: c, grid, reqTime: Date.now() });
639
- };
640
- const rowAreAllSelected = () => {
641
- return false;
642
- };
643
- return {
644
- init,
645
- rowAdd,
646
- rowById,
647
- rowAllChildIds,
648
- rowByIndex,
649
- rowDelete,
650
- rowExpand,
651
- rowSelect,
652
- rowSelectAll,
653
- rowSetBotData,
654
- rowSetTopData,
655
- rowToIndex,
656
- rowUpdate,
657
- inFilterItems,
658
- rowAreAllSelected,
659
- isLoading,
660
- loadError,
661
- pushResponses: (res) => {
662
- dataResponseHandler(res);
663
- },
664
- pushRequests: (req, onSuccess, onFailure) => {
665
- dataRequestHandler(req, true, onSuccess, onFailure);
666
- },
667
- reset: resetRequest,
668
- retry: () => {
669
- viewChange();
670
- },
671
- };
627
+ .filter((n) => n != null),
628
+ );
629
+ cellUpdateHandler?.(idMap);
630
+ if (!cellUpdateOptimistically) return;
631
+ for (const [key, data] of updates.entries()) {
632
+ const rowIndex = typeof key === "number" ? key : rowToIndex(key);
633
+ const row = rowByIndex(rowIndex);
634
+ if (!row || !grid) {
635
+ console.error(`Failed to find the row at index ${rowIndex} which is being updated.`);
636
+ continue;
637
+ }
638
+ if (rowIndex < top.length) {
639
+ top[rowIndex].data = data;
640
+ } else if (rowIndex >= firstBot) {
641
+ bot[rowIndex].data = data;
642
+ } else {
643
+ const node = f.rowIndexToRow.get(rowIndex - top.length);
644
+ if (node) node.data.data = data;
645
+ }
646
+ grid.state.rowDataStore.rowInvalidateIndex(rowIndex);
647
+ }
648
+ };
649
+ const inFilterItems = (c) => {
650
+ if (!dataInFilterItemFetcher || !grid) return [];
651
+ return dataInFilterItemFetcher({ column: c, grid, reqTime: Date.now() });
652
+ };
653
+ const rowAreAllSelected = () => {
654
+ return false;
655
+ };
656
+ return {
657
+ init,
658
+ rowAdd,
659
+ rowById,
660
+ rowAllChildIds,
661
+ rowByIndex,
662
+ rowDelete,
663
+ rowExpand,
664
+ rowSelect,
665
+ rowSelectAll,
666
+ rowSetBotData,
667
+ rowSetTopData,
668
+ rowToIndex,
669
+ rowUpdate,
670
+ inFilterItems,
671
+ rowAreAllSelected,
672
+ isLoading,
673
+ loadError,
674
+ pushResponses: (res) => {
675
+ dataResponseHandler(res);
676
+ },
677
+ pushRequests: (req, onSuccess, onFailure) => {
678
+ dataRequestHandler(req, true, onSuccess, onFailure);
679
+ },
680
+ reset: resetRequest,
681
+ retry: () => {
682
+ viewChange();
683
+ },
684
+ };
672
685
  }
673
686
  export function useServerDataSource(p) {
674
- const ds = useRef(null);
675
- if (!ds.current) {
676
- ds.current = makeServerDataSource(p);
677
- }
678
- return ds.current;
687
+ const ds = useRef(null);
688
+ if (!ds.current) {
689
+ ds.current = makeServerDataSource(p);
690
+ }
691
+ return ds.current;
679
692
  }