@vuu-ui/vuu-data-test 2.1.18 → 2.1.19-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (277) hide show
  1. package/package.json +10 -13
  2. package/src/ArrayProxy.js +38 -0
  3. package/src/RuntimeVisualLink.js +45 -0
  4. package/src/SessionTable.js +49 -0
  5. package/src/Table.js +96 -0
  6. package/src/TickingArrayDataSource.js +208 -0
  7. package/src/UpdateGenerator.js +72 -0
  8. package/src/basket/BasketModule.js +272 -0
  9. package/src/basket/basket-schemas.js +355 -0
  10. package/src/basket/index.js +2 -0
  11. package/src/basket/reference-data/constituents.js +76 -0
  12. package/src/basket/reference-data/ftse100.js +686 -0
  13. package/src/basket/reference-data/hsi.js +1047 -0
  14. package/src/basket/reference-data/nasdaq100.js +812 -0
  15. package/src/basket/reference-data/prices.js +43 -0
  16. package/src/basket/reference-data/sp500.js +315 -0
  17. package/src/core/module/ModuleContainer.js +21 -0
  18. package/src/core/module/VuuModule.js +476 -0
  19. package/src/core/table/TableContainer.js +97 -0
  20. package/src/data-utils.js +53 -0
  21. package/src/index.js +13 -0
  22. package/src/local-datasource-provider/LocalDatasourceProvider.js +44 -0
  23. package/src/makeSuggestions.js +20 -0
  24. package/src/rowUpdates.js +0 -0
  25. package/src/schemas.js +19 -0
  26. package/src/session-table-utils.js +16 -0
  27. package/src/simul/SimulModule.js +175 -0
  28. package/src/simul/index.js +2 -0
  29. package/src/simul/reference-data/accounts.js +23 -0
  30. package/src/simul/reference-data/algos.js +9 -0
  31. package/src/simul/reference-data/currencies.js +8 -0
  32. package/src/simul/reference-data/index.js +5 -0
  33. package/src/simul/reference-data/instrument-prices.js +48 -0
  34. package/src/simul/reference-data/instruments-extended.js +12 -0
  35. package/src/simul/reference-data/instruments.js +67 -0
  36. package/src/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js +2 -0
  37. package/src/simul/reference-data/isin-generator/fixtures/alphabet.js +27 -0
  38. package/src/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js +7 -0
  39. package/src/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js +13 -0
  40. package/src/simul/reference-data/isin-generator/generate-cusip-check-code.js +17 -0
  41. package/src/simul/reference-data/isin-generator/generate-cusip-without-check-code.js +8 -0
  42. package/src/simul/reference-data/isin-generator/generate-cusip.js +8 -0
  43. package/src/simul/reference-data/isin-generator/generate-random-alphanumeric.js +3 -0
  44. package/src/simul/reference-data/isin-generator/generate-random-base-ten-number.js +2 -0
  45. package/src/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js +7 -0
  46. package/src/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js +7 -0
  47. package/src/simul/reference-data/isin-generator/index.js +280 -0
  48. package/src/simul/reference-data/isin-generator/is-odd.js +2 -0
  49. package/src/simul/reference-data/locations.js +45 -0
  50. package/src/simul/reference-data/lotsizes.js +24 -0
  51. package/src/simul/reference-data/orderStatus.js +6 -0
  52. package/src/simul/reference-data/orders.js +64 -0
  53. package/src/simul/reference-data/parent-child-orders.js +117 -0
  54. package/src/simul/reference-data/priceStrategies.js +8 -0
  55. package/src/simul/reference-data/prices.js +78 -0
  56. package/src/simul/reference-data/sides.js +5 -0
  57. package/src/simul/simul-schemas.js +428 -0
  58. package/src/test/TestModule.js +95 -0
  59. package/src/test/index.js +1 -0
  60. package/src/test/test-schemas.js +74 -0
  61. package/src/vuu-row-generator.js +71 -0
  62. package/types/TickingArrayDataSource.d.ts +1 -1
  63. package/types/basket/BasketModule.d.ts +9 -9
  64. package/types/basket/reference-data/prices.d.ts +1 -1
  65. package/types/simul/reference-data/instruments-extended.d.ts +1 -1
  66. package/types/simul/reference-data/instruments.d.ts +1 -1
  67. package/types/simul/reference-data/orders.d.ts +1 -1
  68. package/types/simul/reference-data/parent-child-orders.d.ts +2 -2
  69. package/types/simul/reference-data/prices.d.ts +1 -1
  70. package/cjs/ArrayProxy.js +0 -72
  71. package/cjs/ArrayProxy.js.map +0 -1
  72. package/cjs/RuntimeVisualLink.js +0 -73
  73. package/cjs/RuntimeVisualLink.js.map +0 -1
  74. package/cjs/SessionTable.js +0 -68
  75. package/cjs/SessionTable.js.map +0 -1
  76. package/cjs/Table.js +0 -128
  77. package/cjs/Table.js.map +0 -1
  78. package/cjs/TickingArrayDataSource.js +0 -316
  79. package/cjs/TickingArrayDataSource.js.map +0 -1
  80. package/cjs/UpdateGenerator.js +0 -94
  81. package/cjs/UpdateGenerator.js.map +0 -1
  82. package/cjs/basket/BasketModule.js +0 -282
  83. package/cjs/basket/BasketModule.js.map +0 -1
  84. package/cjs/basket/basket-schemas.js +0 -123
  85. package/cjs/basket/basket-schemas.js.map +0 -1
  86. package/cjs/basket/reference-data/constituents.js +0 -40
  87. package/cjs/basket/reference-data/constituents.js.map +0 -1
  88. package/cjs/basket/reference-data/ftse100.js +0 -105
  89. package/cjs/basket/reference-data/ftse100.js.map +0 -1
  90. package/cjs/basket/reference-data/hsi.js +0 -87
  91. package/cjs/basket/reference-data/hsi.js.map +0 -1
  92. package/cjs/basket/reference-data/nasdaq100.js +0 -108
  93. package/cjs/basket/reference-data/nasdaq100.js.map +0 -1
  94. package/cjs/basket/reference-data/sp500.js +0 -46
  95. package/cjs/basket/reference-data/sp500.js.map +0 -1
  96. package/cjs/core/module/ModuleContainer.js +0 -43
  97. package/cjs/core/module/ModuleContainer.js.map +0 -1
  98. package/cjs/core/module/VuuModule.js +0 -660
  99. package/cjs/core/module/VuuModule.js.map +0 -1
  100. package/cjs/core/table/TableContainer.js +0 -139
  101. package/cjs/core/table/TableContainer.js.map +0 -1
  102. package/cjs/data-utils.js +0 -47
  103. package/cjs/data-utils.js.map +0 -1
  104. package/cjs/index.js +0 -46
  105. package/cjs/index.js.map +0 -1
  106. package/cjs/local-datasource-provider/LocalDatasourceProvider.js +0 -70
  107. package/cjs/local-datasource-provider/LocalDatasourceProvider.js.map +0 -1
  108. package/cjs/makeSuggestions.js +0 -26
  109. package/cjs/makeSuggestions.js.map +0 -1
  110. package/cjs/schemas.js +0 -28
  111. package/cjs/schemas.js.map +0 -1
  112. package/cjs/session-table-utils.js +0 -12
  113. package/cjs/session-table-utils.js.map +0 -1
  114. package/cjs/simul/SimulModule.js +0 -187
  115. package/cjs/simul/SimulModule.js.map +0 -1
  116. package/cjs/simul/reference-data/accounts.js +0 -27
  117. package/cjs/simul/reference-data/accounts.js.map +0 -1
  118. package/cjs/simul/reference-data/algos.js +0 -6
  119. package/cjs/simul/reference-data/algos.js.map +0 -1
  120. package/cjs/simul/reference-data/currencies.js +0 -6
  121. package/cjs/simul/reference-data/currencies.js.map +0 -1
  122. package/cjs/simul/reference-data/instruments-extended.js +0 -19
  123. package/cjs/simul/reference-data/instruments-extended.js.map +0 -1
  124. package/cjs/simul/reference-data/instruments.js +0 -85
  125. package/cjs/simul/reference-data/instruments.js.map +0 -1
  126. package/cjs/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js +0 -6
  127. package/cjs/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js.map +0 -1
  128. package/cjs/simul/reference-data/isin-generator/fixtures/alphabet.js +0 -31
  129. package/cjs/simul/reference-data/isin-generator/fixtures/alphabet.js.map +0 -1
  130. package/cjs/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js +0 -9
  131. package/cjs/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js.map +0 -1
  132. package/cjs/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js +0 -17
  133. package/cjs/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js.map +0 -1
  134. package/cjs/simul/reference-data/isin-generator/generate-cusip-check-code.js +0 -24
  135. package/cjs/simul/reference-data/isin-generator/generate-cusip-check-code.js.map +0 -1
  136. package/cjs/simul/reference-data/isin-generator/generate-cusip-without-check-code.js +0 -13
  137. package/cjs/simul/reference-data/isin-generator/generate-cusip-without-check-code.js.map +0 -1
  138. package/cjs/simul/reference-data/isin-generator/generate-cusip.js +0 -13
  139. package/cjs/simul/reference-data/isin-generator/generate-cusip.js.map +0 -1
  140. package/cjs/simul/reference-data/isin-generator/generate-random-alphanumeric.js +0 -8
  141. package/cjs/simul/reference-data/isin-generator/generate-random-alphanumeric.js.map +0 -1
  142. package/cjs/simul/reference-data/isin-generator/generate-random-base-ten-number.js +0 -6
  143. package/cjs/simul/reference-data/isin-generator/generate-random-base-ten-number.js.map +0 -1
  144. package/cjs/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js +0 -14
  145. package/cjs/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js.map +0 -1
  146. package/cjs/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js +0 -14
  147. package/cjs/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js.map +0 -1
  148. package/cjs/simul/reference-data/isin-generator/index.js +0 -295
  149. package/cjs/simul/reference-data/isin-generator/index.js.map +0 -1
  150. package/cjs/simul/reference-data/isin-generator/is-odd.js +0 -6
  151. package/cjs/simul/reference-data/isin-generator/is-odd.js.map +0 -1
  152. package/cjs/simul/reference-data/locations.js +0 -17
  153. package/cjs/simul/reference-data/locations.js.map +0 -1
  154. package/cjs/simul/reference-data/lotsizes.js +0 -28
  155. package/cjs/simul/reference-data/lotsizes.js.map +0 -1
  156. package/cjs/simul/reference-data/orderStatus.js +0 -6
  157. package/cjs/simul/reference-data/orderStatus.js.map +0 -1
  158. package/cjs/simul/reference-data/orders.js +0 -55
  159. package/cjs/simul/reference-data/orders.js.map +0 -1
  160. package/cjs/simul/reference-data/parent-child-orders.js +0 -144
  161. package/cjs/simul/reference-data/parent-child-orders.js.map +0 -1
  162. package/cjs/simul/reference-data/prices.js +0 -89
  163. package/cjs/simul/reference-data/prices.js.map +0 -1
  164. package/cjs/simul/reference-data/sides.js +0 -6
  165. package/cjs/simul/reference-data/sides.js.map +0 -1
  166. package/cjs/simul/simul-schemas.js +0 -150
  167. package/cjs/simul/simul-schemas.js.map +0 -1
  168. package/cjs/test/TestModule.js +0 -86
  169. package/cjs/test/TestModule.js.map +0 -1
  170. package/cjs/test/test-schemas.js +0 -52
  171. package/cjs/test/test-schemas.js.map +0 -1
  172. package/cjs/vuu-row-generator.js +0 -74
  173. package/cjs/vuu-row-generator.js.map +0 -1
  174. package/esm/ArrayProxy.js +0 -70
  175. package/esm/ArrayProxy.js.map +0 -1
  176. package/esm/RuntimeVisualLink.js +0 -71
  177. package/esm/RuntimeVisualLink.js.map +0 -1
  178. package/esm/SessionTable.js +0 -65
  179. package/esm/SessionTable.js.map +0 -1
  180. package/esm/Table.js +0 -124
  181. package/esm/Table.js.map +0 -1
  182. package/esm/TickingArrayDataSource.js +0 -314
  183. package/esm/TickingArrayDataSource.js.map +0 -1
  184. package/esm/UpdateGenerator.js +0 -92
  185. package/esm/UpdateGenerator.js.map +0 -1
  186. package/esm/basket/BasketModule.js +0 -278
  187. package/esm/basket/BasketModule.js.map +0 -1
  188. package/esm/basket/basket-schemas.js +0 -120
  189. package/esm/basket/basket-schemas.js.map +0 -1
  190. package/esm/basket/reference-data/constituents.js +0 -38
  191. package/esm/basket/reference-data/constituents.js.map +0 -1
  192. package/esm/basket/reference-data/ftse100.js +0 -103
  193. package/esm/basket/reference-data/ftse100.js.map +0 -1
  194. package/esm/basket/reference-data/hsi.js +0 -85
  195. package/esm/basket/reference-data/hsi.js.map +0 -1
  196. package/esm/basket/reference-data/nasdaq100.js +0 -106
  197. package/esm/basket/reference-data/nasdaq100.js.map +0 -1
  198. package/esm/basket/reference-data/sp500.js +0 -44
  199. package/esm/basket/reference-data/sp500.js.map +0 -1
  200. package/esm/core/module/ModuleContainer.js +0 -41
  201. package/esm/core/module/ModuleContainer.js.map +0 -1
  202. package/esm/core/module/VuuModule.js +0 -658
  203. package/esm/core/module/VuuModule.js.map +0 -1
  204. package/esm/core/table/TableContainer.js +0 -137
  205. package/esm/core/table/TableContainer.js.map +0 -1
  206. package/esm/data-utils.js +0 -43
  207. package/esm/data-utils.js.map +0 -1
  208. package/esm/index.js +0 -16
  209. package/esm/index.js.map +0 -1
  210. package/esm/local-datasource-provider/LocalDatasourceProvider.js +0 -68
  211. package/esm/local-datasource-provider/LocalDatasourceProvider.js.map +0 -1
  212. package/esm/makeSuggestions.js +0 -24
  213. package/esm/makeSuggestions.js.map +0 -1
  214. package/esm/schemas.js +0 -24
  215. package/esm/schemas.js.map +0 -1
  216. package/esm/session-table-utils.js +0 -10
  217. package/esm/session-table-utils.js.map +0 -1
  218. package/esm/simul/SimulModule.js +0 -184
  219. package/esm/simul/SimulModule.js.map +0 -1
  220. package/esm/simul/reference-data/accounts.js +0 -25
  221. package/esm/simul/reference-data/accounts.js.map +0 -1
  222. package/esm/simul/reference-data/algos.js +0 -4
  223. package/esm/simul/reference-data/algos.js.map +0 -1
  224. package/esm/simul/reference-data/currencies.js +0 -4
  225. package/esm/simul/reference-data/currencies.js.map +0 -1
  226. package/esm/simul/reference-data/instruments-extended.js +0 -17
  227. package/esm/simul/reference-data/instruments-extended.js.map +0 -1
  228. package/esm/simul/reference-data/instruments.js +0 -80
  229. package/esm/simul/reference-data/instruments.js.map +0 -1
  230. package/esm/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js +0 -4
  231. package/esm/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js.map +0 -1
  232. package/esm/simul/reference-data/isin-generator/fixtures/alphabet.js +0 -29
  233. package/esm/simul/reference-data/isin-generator/fixtures/alphabet.js.map +0 -1
  234. package/esm/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js +0 -7
  235. package/esm/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js.map +0 -1
  236. package/esm/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js +0 -15
  237. package/esm/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js.map +0 -1
  238. package/esm/simul/reference-data/isin-generator/generate-cusip-check-code.js +0 -22
  239. package/esm/simul/reference-data/isin-generator/generate-cusip-check-code.js.map +0 -1
  240. package/esm/simul/reference-data/isin-generator/generate-cusip-without-check-code.js +0 -11
  241. package/esm/simul/reference-data/isin-generator/generate-cusip-without-check-code.js.map +0 -1
  242. package/esm/simul/reference-data/isin-generator/generate-cusip.js +0 -11
  243. package/esm/simul/reference-data/isin-generator/generate-cusip.js.map +0 -1
  244. package/esm/simul/reference-data/isin-generator/generate-random-alphanumeric.js +0 -6
  245. package/esm/simul/reference-data/isin-generator/generate-random-alphanumeric.js.map +0 -1
  246. package/esm/simul/reference-data/isin-generator/generate-random-base-ten-number.js +0 -4
  247. package/esm/simul/reference-data/isin-generator/generate-random-base-ten-number.js.map +0 -1
  248. package/esm/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js +0 -12
  249. package/esm/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js.map +0 -1
  250. package/esm/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js +0 -12
  251. package/esm/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js.map +0 -1
  252. package/esm/simul/reference-data/isin-generator/index.js +0 -293
  253. package/esm/simul/reference-data/isin-generator/index.js.map +0 -1
  254. package/esm/simul/reference-data/isin-generator/is-odd.js +0 -4
  255. package/esm/simul/reference-data/isin-generator/is-odd.js.map +0 -1
  256. package/esm/simul/reference-data/locations.js +0 -14
  257. package/esm/simul/reference-data/locations.js.map +0 -1
  258. package/esm/simul/reference-data/lotsizes.js +0 -26
  259. package/esm/simul/reference-data/lotsizes.js.map +0 -1
  260. package/esm/simul/reference-data/orderStatus.js +0 -4
  261. package/esm/simul/reference-data/orderStatus.js.map +0 -1
  262. package/esm/simul/reference-data/orders.js +0 -52
  263. package/esm/simul/reference-data/orders.js.map +0 -1
  264. package/esm/simul/reference-data/parent-child-orders.js +0 -139
  265. package/esm/simul/reference-data/parent-child-orders.js.map +0 -1
  266. package/esm/simul/reference-data/prices.js +0 -86
  267. package/esm/simul/reference-data/prices.js.map +0 -1
  268. package/esm/simul/reference-data/sides.js +0 -4
  269. package/esm/simul/reference-data/sides.js.map +0 -1
  270. package/esm/simul/simul-schemas.js +0 -147
  271. package/esm/simul/simul-schemas.js.map +0 -1
  272. package/esm/test/TestModule.js +0 -84
  273. package/esm/test/TestModule.js.map +0 -1
  274. package/esm/test/test-schemas.js +0 -50
  275. package/esm/test/test-schemas.js.map +0 -1
  276. package/esm/vuu-row-generator.js +0 -68
  277. package/esm/vuu-row-generator.js.map +0 -1
@@ -1,71 +0,0 @@
1
- import { buildColumnMap } from '@vuu-ui/vuu-utils';
2
-
3
- var __defProp = Object.defineProperty;
4
- var __typeError = (msg) => {
5
- throw TypeError(msg);
6
- };
7
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
- var __publicField = (obj, key, value) => __defNormalProp(obj, key + "" , value);
9
- var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
10
- var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), member.get(obj));
11
- var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
12
- var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
13
- var _childColumnName, _childDataSource, _parentColumnName, _parentDataSource;
14
- class RuntimeVisualLink {
15
- constructor(childDataSource, parentDataSource, childColumnName, parentColumnName) {
16
- __privateAdd(this, _childColumnName);
17
- __privateAdd(this, _childDataSource);
18
- __privateAdd(this, _parentColumnName);
19
- __privateAdd(this, _parentDataSource);
20
- __publicField(this, "handleParentSelectEvent", () => {
21
- if (__privateGet(this, _childDataSource)) {
22
- const selectedValues = this.pickUniqueSelectedValues();
23
- if (selectedValues.length === 0) {
24
- __privateGet(this, _childDataSource).baseFilter = void 0;
25
- } else if (selectedValues.length === 1) {
26
- __privateGet(this, _childDataSource).baseFilter = {
27
- filter: `${__privateGet(this, _childColumnName)} = "${selectedValues[0]}"`
28
- };
29
- } else {
30
- __privateGet(this, _childDataSource).baseFilter = {
31
- filter: `${__privateGet(this, _childColumnName)} in ["${selectedValues.join('","')}"]`
32
- };
33
- }
34
- }
35
- });
36
- __privateSet(this, _childColumnName, childColumnName);
37
- __privateSet(this, _childDataSource, childDataSource);
38
- __privateSet(this, _parentColumnName, parentColumnName);
39
- __privateSet(this, _parentDataSource, parentDataSource);
40
- parentDataSource.on("row-selection", this.handleParentSelectEvent);
41
- }
42
- destroy() {
43
- }
44
- remove() {
45
- __privateGet(this, _parentDataSource)?.removeListener(
46
- "row-selection",
47
- this.handleParentSelectEvent
48
- );
49
- __privateGet(this, _childDataSource).baseFilter = { filter: "" };
50
- }
51
- pickUniqueSelectedValues() {
52
- const dataSource = __privateGet(this, _parentDataSource);
53
- const map = buildColumnMap(dataSource.columns);
54
- const colIndex = map[__privateGet(this, _parentColumnName)];
55
- const set = /* @__PURE__ */ new Set();
56
- for (const key of dataSource.getSelectedRowIds()) {
57
- const row = dataSource.getRowByKey(key);
58
- if (row) {
59
- set.add(row[colIndex]);
60
- }
61
- }
62
- return Array.from(set);
63
- }
64
- }
65
- _childColumnName = new WeakMap();
66
- _childDataSource = new WeakMap();
67
- _parentColumnName = new WeakMap();
68
- _parentDataSource = new WeakMap();
69
-
70
- export { RuntimeVisualLink };
71
- //# sourceMappingURL=RuntimeVisualLink.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RuntimeVisualLink.js","sources":["../../../packages/vuu-data-test/src/RuntimeVisualLink.ts"],"sourcesContent":["import { DataSource, RowSelectionEventHandler } from \"@vuu-ui/vuu-data-types\";\nimport { TickingArrayDataSource } from \"./TickingArrayDataSource\";\nimport { buildColumnMap } from \"@vuu-ui/vuu-utils\";\n\nexport class RuntimeVisualLink {\n #childColumnName: string;\n #childDataSource: DataSource;\n #parentColumnName: string;\n #parentDataSource: DataSource;\n\n constructor(\n childDataSource: DataSource,\n parentDataSource: DataSource,\n childColumnName: string,\n parentColumnName: string,\n ) {\n this.#childColumnName = childColumnName;\n this.#childDataSource = childDataSource;\n this.#parentColumnName = parentColumnName;\n this.#parentDataSource = parentDataSource;\n\n parentDataSource.on(\"row-selection\", this.handleParentSelectEvent);\n }\n\n destroy() {\n // do we need to do anything\n }\n\n remove() {\n this.#parentDataSource?.removeListener(\n \"row-selection\",\n this.handleParentSelectEvent,\n );\n this.#childDataSource.baseFilter = { filter: \"\" };\n }\n\n handleParentSelectEvent: RowSelectionEventHandler = () => {\n if (this.#childDataSource) {\n const selectedValues = this.pickUniqueSelectedValues();\n if (selectedValues.length === 0) {\n this.#childDataSource.baseFilter = undefined;\n } else if (selectedValues.length === 1) {\n this.#childDataSource.baseFilter = {\n filter: `${this.#childColumnName} = \"${selectedValues[0]}\"`,\n };\n } else {\n this.#childDataSource.baseFilter = {\n filter: `${this.#childColumnName} in [\"${selectedValues.join('\",\"')}\"]`,\n };\n }\n }\n };\n\n private pickUniqueSelectedValues() {\n const dataSource = this.#parentDataSource as TickingArrayDataSource;\n const map = buildColumnMap(dataSource.columns);\n const colIndex = map[this.#parentColumnName];\n const set = new Set();\n\n for (const key of dataSource.getSelectedRowIds()) {\n const row = dataSource.getRowByKey(key);\n if (row) {\n set.add(row[colIndex]);\n }\n }\n return Array.from(set) as string[];\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,65 +0,0 @@
1
- import { EventEmitter } from '@vuu-ui/vuu-utils';
2
-
3
- const isProxy = /* @__PURE__ */ Symbol("proxy-session-table");
4
- const isProxySessionTable = (table) => table[isProxy];
5
- const SessionTable = (table, sessionId) => {
6
- const updates = /* @__PURE__ */ new Map();
7
- const eventEmitter = new EventEmitter();
8
- const getSessionUpdates = () => {
9
- return updates;
10
- };
11
- const addEventListener = (event, handler) => {
12
- eventEmitter.on(event, handler);
13
- };
14
- const update = (key, columnName, value) => {
15
- const row = table.findByKey(key);
16
- if (row) {
17
- const tsIndex = table.map.vuuUpdatedTimestamp;
18
- let updatesForRow = updates.get(key);
19
- if (updatesForRow === void 0) {
20
- updatesForRow = {
21
- lastUpdateTimestamp: row[tsIndex],
22
- cellUpdates: {}
23
- };
24
- updates.set(key, updatesForRow);
25
- }
26
- updatesForRow.cellUpdates[columnName] = value;
27
- const newRow = row.slice();
28
- for (const [columnName2, value2] of Object.entries(
29
- updatesForRow.cellUpdates
30
- )) {
31
- const colIndex = table.map[columnName2];
32
- newRow[colIndex] = value2;
33
- }
34
- eventEmitter.emit("update", newRow, columnName, sessionId);
35
- } else {
36
- console.warn(`SessionTable update row ${key} not found`);
37
- }
38
- };
39
- return new Proxy(table, {
40
- get(_obj, prop) {
41
- if (typeof prop === "symbol") {
42
- if (prop === isProxy) {
43
- return true;
44
- }
45
- return void 0;
46
- }
47
- if (prop === "getSessionUpdates") {
48
- return getSessionUpdates;
49
- } else if (prop === "on" || prop === "addEventListener") {
50
- return addEventListener;
51
- } else if (prop === "update") {
52
- return update;
53
- } else if (prop === "isProxy") {
54
- return true;
55
- }
56
- return table[prop];
57
- },
58
- set() {
59
- throw new TypeError("SessionTable is readonly");
60
- }
61
- });
62
- };
63
-
64
- export { SessionTable, isProxySessionTable };
65
- //# sourceMappingURL=SessionTable.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SessionTable.js","sources":["../../../packages/vuu-data-test/src/SessionTable.ts"],"sourcesContent":["import { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { Table, TableEvents } from \"./Table\";\nimport { EventEmitter } from \"@vuu-ui/vuu-utils\";\n\ntype RowUpdates = {\n cellUpdates: Record<string, VuuRowDataItemType>;\n lastUpdateTimestamp?: number;\n};\n\nexport type SessionTable = Table & {\n getSessionUpdates: () => Map<string, RowUpdates>;\n};\n\nconst isProxy = Symbol(\"proxy-session-table\");\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const isProxySessionTable = (table: any): table is SessionTable =>\n table[isProxy];\n\n// This doesn't really work because the session table is still connected to the base table data.\n// This means edits applied at the end of an edit session are then posted to other active sessions.\n\n// How can we ignore these ?\nexport const SessionTable = (table: Table, sessionId: string): SessionTable => {\n const updates = new Map<string, RowUpdates>();\n const eventEmitter = new EventEmitter<TableEvents>();\n\n const getSessionUpdates = () => {\n return updates;\n };\n\n // we need to intercept this as addEventListener accesses a private\n // member, so has to be invoked by table itself.\n const addEventListener = (event: string, handler: unknown) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n //table.on(event, handler);\n eventEmitter.on(event, handler);\n };\n\n const update = (\n key: string,\n columnName: string,\n value: VuuRowDataItemType,\n ) => {\n // we don't actually apply the update to the table, but we emit the updated event, so the bound\n // dataSource will update its own cache\n const row = table.findByKey(key);\n if (row) {\n const tsIndex = table.map.vuuUpdatedTimestamp;\n\n let updatesForRow = updates.get(key);\n if (updatesForRow === undefined) {\n updatesForRow = {\n lastUpdateTimestamp: row[tsIndex] as number | undefined,\n cellUpdates: {},\n };\n updates.set(key, updatesForRow);\n }\n updatesForRow.cellUpdates[columnName] = value;\n\n const newRow = row.slice();\n\n for (const [columnName, value] of Object.entries(\n updatesForRow.cellUpdates,\n )) {\n const colIndex = table.map[columnName];\n newRow[colIndex] = value;\n }\n\n eventEmitter.emit(\"update\", newRow, columnName, sessionId);\n } else {\n console.warn(`SessionTable update row ${key} not found`);\n }\n };\n\n return new Proxy(table, {\n get(_obj, prop: string | symbol) {\n if (typeof prop === \"symbol\") {\n if (prop === isProxy) {\n return true;\n }\n return undefined;\n }\n\n if (prop === \"getSessionUpdates\") {\n return getSessionUpdates;\n } else if (prop === \"on\" || prop === \"addEventListener\") {\n return addEventListener;\n } else if (prop === \"update\") {\n return update;\n } else if (prop === \"isProxy\") {\n return true;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return table[prop];\n },\n\n set() {\n throw new TypeError(\"SessionTable is readonly\");\n },\n }) as SessionTable;\n};\n"],"names":["columnName","value"],"mappings":";;AAaA,MAAM,OAAA,0BAAiB,qBAAqB,CAAA;AAGrC,MAAM,mBAAsB,GAAA,CAAC,KAClC,KAAA,KAAA,CAAM,OAAO;AAMF,MAAA,YAAA,GAAe,CAAC,KAAA,EAAc,SAAoC,KAAA;AAC7E,EAAM,MAAA,OAAA,uBAAc,GAAwB,EAAA;AAC5C,EAAM,MAAA,YAAA,GAAe,IAAI,YAA0B,EAAA;AAEnD,EAAA,MAAM,oBAAoB,MAAM;AAC9B,IAAO,OAAA,OAAA;AAAA,GACT;AAIA,EAAM,MAAA,gBAAA,GAAmB,CAAC,KAAA,EAAe,OAAqB,KAAA;AAI5D,IAAa,YAAA,CAAA,EAAA,CAAG,OAAO,OAAO,CAAA;AAAA,GAChC;AAEA,EAAA,MAAM,MAAS,GAAA,CACb,GACA,EAAA,UAAA,EACA,KACG,KAAA;AAGH,IAAM,MAAA,GAAA,GAAM,KAAM,CAAA,SAAA,CAAU,GAAG,CAAA;AAC/B,IAAA,IAAI,GAAK,EAAA;AACP,MAAM,MAAA,OAAA,GAAU,MAAM,GAAI,CAAA,mBAAA;AAE1B,MAAI,IAAA,aAAA,GAAgB,OAAQ,CAAA,GAAA,CAAI,GAAG,CAAA;AACnC,MAAA,IAAI,kBAAkB,KAAW,CAAA,EAAA;AAC/B,QAAgB,aAAA,GAAA;AAAA,UACd,mBAAA,EAAqB,IAAI,OAAO,CAAA;AAAA,UAChC,aAAa;AAAC,SAChB;AACA,QAAQ,OAAA,CAAA,GAAA,CAAI,KAAK,aAAa,CAAA;AAAA;AAEhC,MAAc,aAAA,CAAA,WAAA,CAAY,UAAU,CAAI,GAAA,KAAA;AAExC,MAAM,MAAA,MAAA,GAAS,IAAI,KAAM,EAAA;AAEzB,MAAA,KAAA,MAAW,CAACA,WAAAA,EAAYC,MAAK,CAAA,IAAK,MAAO,CAAA,OAAA;AAAA,QACvC,aAAc,CAAA;AAAA,OACb,EAAA;AACD,QAAM,MAAA,QAAA,GAAW,KAAM,CAAA,GAAA,CAAID,WAAU,CAAA;AACrC,QAAA,MAAA,CAAO,QAAQ,CAAIC,GAAAA,MAAAA;AAAA;AAGrB,MAAA,YAAA,CAAa,IAAK,CAAA,QAAA,EAAU,MAAQ,EAAA,UAAA,EAAY,SAAS,CAAA;AAAA,KACpD,MAAA;AACL,MAAQ,OAAA,CAAA,IAAA,CAAK,CAA2B,wBAAA,EAAA,GAAG,CAAY,UAAA,CAAA,CAAA;AAAA;AACzD,GACF;AAEA,EAAO,OAAA,IAAI,MAAM,KAAO,EAAA;AAAA,IACtB,GAAA,CAAI,MAAM,IAAuB,EAAA;AAC/B,MAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,QAAA,IAAI,SAAS,OAAS,EAAA;AACpB,UAAO,OAAA,IAAA;AAAA;AAET,QAAO,OAAA,KAAA,CAAA;AAAA;AAGT,MAAA,IAAI,SAAS,mBAAqB,EAAA;AAChC,QAAO,OAAA,iBAAA;AAAA,OACE,MAAA,IAAA,IAAA,KAAS,IAAQ,IAAA,IAAA,KAAS,kBAAoB,EAAA;AACvD,QAAO,OAAA,gBAAA;AAAA,OACT,MAAA,IAAW,SAAS,QAAU,EAAA;AAC5B,QAAO,OAAA,MAAA;AAAA,OACT,MAAA,IAAW,SAAS,SAAW,EAAA;AAC7B,QAAO,OAAA,IAAA;AAAA;AAKT,MAAA,OAAO,MAAM,IAAI,CAAA;AAAA,KACnB;AAAA,IAEA,GAAM,GAAA;AACJ,MAAM,MAAA,IAAI,UAAU,0BAA0B,CAAA;AAAA;AAChD,GACD,CAAA;AACH;;;;"}
package/esm/Table.js DELETED
@@ -1,124 +0,0 @@
1
- import { EventEmitter } from '@vuu-ui/vuu-utils';
2
-
3
- var __typeError = (msg) => {
4
- throw TypeError(msg);
5
- };
6
- var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
7
- var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
8
- var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
9
- var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
10
- var _data, _dataMap, _indexOfKey, _index, _schema;
11
- class Table extends EventEmitter {
12
- constructor(schema, data, dataMap, updateGenerator) {
13
- super();
14
- __privateAdd(this, _data);
15
- __privateAdd(this, _dataMap);
16
- __privateAdd(this, _indexOfKey);
17
- __privateAdd(this, _index, /* @__PURE__ */ new Map());
18
- __privateAdd(this, _schema);
19
- __privateSet(this, _data, data);
20
- __privateSet(this, _dataMap, dataMap);
21
- __privateSet(this, _schema, schema);
22
- __privateSet(this, _indexOfKey, dataMap[schema.key]);
23
- this.buildIndex();
24
- updateGenerator?.setTable(this);
25
- updateGenerator?.setRange({ from: 0, to: 100 });
26
- }
27
- buildIndex() {
28
- for (let i = 0; i < __privateGet(this, _data).length; i++) {
29
- const key = __privateGet(this, _data)[i][__privateGet(this, _indexOfKey)];
30
- __privateGet(this, _index).set(key, i);
31
- }
32
- }
33
- get data() {
34
- return __privateGet(this, _data);
35
- }
36
- get map() {
37
- return __privateGet(this, _dataMap);
38
- }
39
- get schema() {
40
- return __privateGet(this, _schema);
41
- }
42
- get name() {
43
- return __privateGet(this, _schema).table.table;
44
- }
45
- delete(key, emitEvent = true) {
46
- const index = __privateGet(this, _index).get(key) ?? -1;
47
- if (index !== -1) {
48
- __privateGet(this, _index).delete(key);
49
- __privateGet(this, _data).splice(index, 1);
50
- for (let i = index; i < __privateGet(this, _data).length; i++) {
51
- __privateGet(this, _index).set(__privateGet(this, _data)[i][__privateGet(this, _indexOfKey)], i);
52
- }
53
- if (emitEvent) {
54
- this.emit("delete", key);
55
- }
56
- } else {
57
- throw Error(`[Table] delete key ${key} not found`);
58
- }
59
- }
60
- insert(row, emitEvent = true) {
61
- const index = __privateGet(this, _data).length;
62
- __privateGet(this, _data).push(row);
63
- const key = row[__privateGet(this, _indexOfKey)];
64
- __privateGet(this, _index).set(key, index);
65
- if (emitEvent) {
66
- this.emit("insert", row);
67
- }
68
- }
69
- findByKey(key) {
70
- const index = __privateGet(this, _index).get(key) ?? -1;
71
- return __privateGet(this, _data)[index];
72
- }
73
- update(key, columnName, value) {
74
- const rowIndex = __privateGet(this, _data).findIndex(
75
- (row) => row[__privateGet(this, _indexOfKey)] === key
76
- );
77
- const colIndex = __privateGet(this, _dataMap)[columnName];
78
- if (rowIndex !== -1) {
79
- const row = __privateGet(this, _data)[rowIndex];
80
- const newRow = row.slice();
81
- newRow[colIndex] = value;
82
- const tsIndex = __privateGet(this, _dataMap).vuuUpdatedTimestamp;
83
- if (typeof tsIndex === "number") {
84
- const lastUpdated = Date.now();
85
- newRow[tsIndex] = lastUpdated;
86
- }
87
- __privateGet(this, _data)[rowIndex] = newRow;
88
- this.emit("update", newRow, columnName);
89
- }
90
- }
91
- updateRow(row) {
92
- const key = row[__privateGet(this, _indexOfKey)];
93
- const rowIndex = __privateGet(this, _data).findIndex(
94
- (row2) => row2[__privateGet(this, _indexOfKey)] === key
95
- );
96
- if (rowIndex !== -1) {
97
- const tsIndex = __privateGet(this, _dataMap).vuuUpdatedTimestamp;
98
- const lastUpdated = Date.now();
99
- row[tsIndex] = lastUpdated;
100
- __privateGet(this, _data)[rowIndex] = row;
101
- this.emit("update", row);
102
- }
103
- }
104
- }
105
- _data = new WeakMap();
106
- _dataMap = new WeakMap();
107
- _indexOfKey = new WeakMap();
108
- _index = new WeakMap();
109
- _schema = new WeakMap();
110
- function buildDataColumnMapFromSchema(schema) {
111
- return Object.values(schema.columns).reduce(
112
- (map, col, index) => ({
113
- ...map,
114
- [col.name]: index
115
- }),
116
- {}
117
- );
118
- }
119
- function buildDataColumnMap(schemas, tableName) {
120
- return buildDataColumnMapFromSchema(schemas[tableName]);
121
- }
122
-
123
- export { Table, buildDataColumnMap, buildDataColumnMapFromSchema };
124
- //# sourceMappingURL=Table.js.map
package/esm/Table.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"Table.js","sources":["../../../packages/vuu-data-test/src/Table.ts"],"sourcesContent":["import { TableSchema } from \"@vuu-ui/vuu-data-types\";\nimport { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap, EventEmitter } from \"@vuu-ui/vuu-utils\";\nimport { UpdateGenerator } from \"./rowUpdates\";\n\nexport type TableEvents = {\n delete: (key: string) => void;\n insert: (row: VuuRowDataItemType[]) => void;\n update: (\n row: VuuRowDataItemType[],\n columnName?: string,\n sessionId?: string,\n ) => void;\n};\n\nexport class Table extends EventEmitter<TableEvents> {\n #data: VuuRowDataItemType[][];\n #dataMap: ColumnMap;\n #indexOfKey: number;\n #index = new Map<string, number>();\n #schema: TableSchema;\n\n constructor(\n schema: TableSchema,\n data: VuuRowDataItemType[][],\n dataMap: ColumnMap,\n updateGenerator?: UpdateGenerator,\n ) {\n super();\n this.#data = data;\n this.#dataMap = dataMap;\n this.#schema = schema;\n this.#indexOfKey = dataMap[schema.key];\n this.buildIndex();\n updateGenerator?.setTable(this);\n updateGenerator?.setRange({ from: 0, to: 100 });\n }\n\n private buildIndex() {\n for (let i = 0; i < this.#data.length; i++) {\n const key = this.#data[i][this.#indexOfKey] as string;\n this.#index.set(key, i);\n }\n }\n\n get data() {\n return this.#data;\n }\n\n get map() {\n return this.#dataMap;\n }\n\n get schema() {\n return this.#schema;\n }\n\n get name() {\n return this.#schema.table.table;\n }\n\n delete(key: string, emitEvent = true) {\n const index = this.#index.get(key) ?? -1;\n if (index !== -1) {\n this.#index.delete(key);\n this.#data.splice(index, 1);\n\n for (let i = index; i < this.#data.length; i++) {\n this.#index.set(this.#data[i][this.#indexOfKey] as string, i);\n }\n\n if (emitEvent) {\n this.emit(\"delete\", key);\n }\n } else {\n throw Error(`[Table] delete key ${key} not found`);\n }\n }\n\n insert(row: VuuRowDataItemType[], emitEvent = true) {\n const index = this.#data.length;\n this.#data.push(row);\n const key = row[this.#indexOfKey] as string;\n this.#index.set(key, index);\n if (emitEvent) {\n this.emit(\"insert\", row);\n }\n }\n\n findByKey(key: string) {\n const index = this.#index.get(key) ?? -1;\n return this.#data[index];\n }\n\n update(key: string, columnName: string, value: VuuRowDataItemType) {\n const rowIndex = this.#data.findIndex(\n (row) => row[this.#indexOfKey] === key,\n );\n const colIndex = this.#dataMap[columnName];\n if (rowIndex !== -1) {\n const row = this.#data[rowIndex];\n const newRow = row.slice();\n newRow[colIndex] = value;\n\n const tsIndex = this.#dataMap.vuuUpdatedTimestamp;\n if (typeof tsIndex === \"number\") {\n const lastUpdated = Date.now();\n newRow[tsIndex] = lastUpdated;\n }\n\n this.#data[rowIndex] = newRow;\n this.emit(\"update\", newRow, columnName);\n }\n }\n updateRow(row: VuuRowDataItemType[]) {\n const key = row[this.#indexOfKey];\n const rowIndex = this.#data.findIndex(\n (row) => row[this.#indexOfKey] === key,\n );\n if (rowIndex !== -1) {\n const tsIndex = this.#dataMap.vuuUpdatedTimestamp;\n const lastUpdated = Date.now();\n row[tsIndex] = lastUpdated;\n this.#data[rowIndex] = row;\n this.emit(\"update\", row);\n }\n }\n}\n\nexport function buildDataColumnMapFromSchema(schema: Readonly<TableSchema>) {\n return Object.values(schema.columns).reduce<ColumnMap>(\n (map, col, index) => ({\n ...map,\n [col.name]: index,\n }),\n {},\n );\n}\n\n/**\n * Build a data ColumnMap for a table in the provided schema.\n * A data ColumnMap is a mapping from a raw data array to a map, keyed\n * by column name with no additional metadata.\n *\n * @param schemas\n * @param tableName\n * @returns\n */\nexport function buildDataColumnMap<TableName extends string = string>(\n schemas: Readonly<Record<TableName, Readonly<TableSchema>>>,\n tableName: TableName,\n) {\n return buildDataColumnMapFromSchema(schemas[tableName]);\n}\n"],"names":["row"],"mappings":";;;;;;;;;AAAA,IAAA,KAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,OAAA;AAeO,MAAM,cAAc,YAA0B,CAAA;AAAA,EAOnD,WACE,CAAA,MAAA,EACA,IACA,EAAA,OAAA,EACA,eACA,EAAA;AACA,IAAM,KAAA,EAAA;AAZR,IAAA,YAAA,CAAA,IAAA,EAAA,KAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,WAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,MAAA,sBAAa,GAAoB,EAAA,CAAA;AACjC,IAAA,YAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AASE,IAAA,YAAA,CAAA,IAAA,EAAK,KAAQ,EAAA,IAAA,CAAA;AACb,IAAA,YAAA,CAAA,IAAA,EAAK,QAAW,EAAA,OAAA,CAAA;AAChB,IAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,MAAA,CAAA;AACf,IAAK,YAAA,CAAA,IAAA,EAAA,WAAA,EAAc,OAAQ,CAAA,MAAA,CAAO,GAAG,CAAA,CAAA;AACrC,IAAA,IAAA,CAAK,UAAW,EAAA;AAChB,IAAA,eAAA,EAAiB,SAAS,IAAI,CAAA;AAC9B,IAAA,eAAA,EAAiB,SAAS,EAAE,IAAA,EAAM,CAAG,EAAA,EAAA,EAAI,KAAK,CAAA;AAAA;AAChD,EAEQ,UAAa,GAAA;AACnB,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,YAAK,CAAA,IAAA,EAAA,KAAA,CAAA,CAAM,QAAQ,CAAK,EAAA,EAAA;AAC1C,MAAA,MAAM,MAAM,YAAK,CAAA,IAAA,EAAA,KAAA,CAAA,CAAM,CAAC,CAAA,CAAE,mBAAK,WAAW,CAAA,CAAA;AAC1C,MAAK,YAAA,CAAA,IAAA,EAAA,MAAA,CAAA,CAAO,GAAI,CAAA,GAAA,EAAK,CAAC,CAAA;AAAA;AACxB;AACF,EAEA,IAAI,IAAO,GAAA;AACT,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,KAAA,CAAA;AAAA;AACd,EAEA,IAAI,GAAM,GAAA;AACR,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,QAAA,CAAA;AAAA;AACd,EAEA,IAAI,MAAS,GAAA;AACX,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,OAAA,CAAA;AAAA;AACd,EAEA,IAAI,IAAO,GAAA;AACT,IAAO,OAAA,YAAA,CAAA,IAAA,EAAK,SAAQ,KAAM,CAAA,KAAA;AAAA;AAC5B,EAEA,MAAA,CAAO,GAAa,EAAA,SAAA,GAAY,IAAM,EAAA;AACpC,IAAA,MAAM,KAAQ,GAAA,YAAA,CAAA,IAAA,EAAK,MAAO,CAAA,CAAA,GAAA,CAAI,GAAG,CAAK,IAAA,CAAA,CAAA;AACtC,IAAA,IAAI,UAAU,CAAI,CAAA,EAAA;AAChB,MAAK,YAAA,CAAA,IAAA,EAAA,MAAA,CAAA,CAAO,OAAO,GAAG,CAAA;AACtB,MAAK,YAAA,CAAA,IAAA,EAAA,KAAA,CAAA,CAAM,MAAO,CAAA,KAAA,EAAO,CAAC,CAAA;AAE1B,MAAA,KAAA,IAAS,IAAI,KAAO,EAAA,CAAA,GAAI,YAAK,CAAA,IAAA,EAAA,KAAA,CAAA,CAAM,QAAQ,CAAK,EAAA,EAAA;AAC9C,QAAK,YAAA,CAAA,IAAA,EAAA,MAAA,CAAA,CAAO,IAAI,YAAK,CAAA,IAAA,EAAA,KAAA,CAAA,CAAM,CAAC,CAAE,CAAA,YAAA,CAAA,IAAA,EAAK,WAAW,CAAA,CAAA,EAAa,CAAC,CAAA;AAAA;AAG9D,MAAA,IAAI,SAAW,EAAA;AACb,QAAK,IAAA,CAAA,IAAA,CAAK,UAAU,GAAG,CAAA;AAAA;AACzB,KACK,MAAA;AACL,MAAM,MAAA,KAAA,CAAM,CAAsB,mBAAA,EAAA,GAAG,CAAY,UAAA,CAAA,CAAA;AAAA;AACnD;AACF,EAEA,MAAA,CAAO,GAA2B,EAAA,SAAA,GAAY,IAAM,EAAA;AAClD,IAAM,MAAA,KAAA,GAAQ,mBAAK,KAAM,CAAA,CAAA,MAAA;AACzB,IAAK,YAAA,CAAA,IAAA,EAAA,KAAA,CAAA,CAAM,KAAK,GAAG,CAAA;AACnB,IAAM,MAAA,GAAA,GAAM,GAAI,CAAA,YAAA,CAAA,IAAA,EAAK,WAAW,CAAA,CAAA;AAChC,IAAK,YAAA,CAAA,IAAA,EAAA,MAAA,CAAA,CAAO,GAAI,CAAA,GAAA,EAAK,KAAK,CAAA;AAC1B,IAAA,IAAI,SAAW,EAAA;AACb,MAAK,IAAA,CAAA,IAAA,CAAK,UAAU,GAAG,CAAA;AAAA;AACzB;AACF,EAEA,UAAU,GAAa,EAAA;AACrB,IAAA,MAAM,KAAQ,GAAA,YAAA,CAAA,IAAA,EAAK,MAAO,CAAA,CAAA,GAAA,CAAI,GAAG,CAAK,IAAA,CAAA,CAAA;AACtC,IAAO,OAAA,YAAA,CAAA,IAAA,EAAK,OAAM,KAAK,CAAA;AAAA;AACzB,EAEA,MAAA,CAAO,GAAa,EAAA,UAAA,EAAoB,KAA2B,EAAA;AACjE,IAAM,MAAA,QAAA,GAAW,mBAAK,KAAM,CAAA,CAAA,SAAA;AAAA,MAC1B,CAAC,GAAA,KAAQ,GAAI,CAAA,YAAA,CAAA,IAAA,EAAK,YAAW,CAAM,KAAA;AAAA,KACrC;AACA,IAAM,MAAA,QAAA,GAAW,YAAK,CAAA,IAAA,EAAA,QAAA,CAAA,CAAS,UAAU,CAAA;AACzC,IAAA,IAAI,aAAa,CAAI,CAAA,EAAA;AACnB,MAAM,MAAA,GAAA,GAAM,YAAK,CAAA,IAAA,EAAA,KAAA,CAAA,CAAM,QAAQ,CAAA;AAC/B,MAAM,MAAA,MAAA,GAAS,IAAI,KAAM,EAAA;AACzB,MAAA,MAAA,CAAO,QAAQ,CAAI,GAAA,KAAA;AAEnB,MAAM,MAAA,OAAA,GAAU,mBAAK,QAAS,CAAA,CAAA,mBAAA;AAC9B,MAAI,IAAA,OAAO,YAAY,QAAU,EAAA;AAC/B,QAAM,MAAA,WAAA,GAAc,KAAK,GAAI,EAAA;AAC7B,QAAA,MAAA,CAAO,OAAO,CAAI,GAAA,WAAA;AAAA;AAGpB,MAAK,YAAA,CAAA,IAAA,EAAA,KAAA,CAAA,CAAM,QAAQ,CAAI,GAAA,MAAA;AACvB,MAAK,IAAA,CAAA,IAAA,CAAK,QAAU,EAAA,MAAA,EAAQ,UAAU,CAAA;AAAA;AACxC;AACF,EACA,UAAU,GAA2B,EAAA;AACnC,IAAM,MAAA,GAAA,GAAM,GAAI,CAAA,YAAA,CAAA,IAAA,EAAK,WAAW,CAAA,CAAA;AAChC,IAAM,MAAA,QAAA,GAAW,mBAAK,KAAM,CAAA,CAAA,SAAA;AAAA,MAC1B,CAACA,IAAAA,KAAQA,IAAI,CAAA,YAAA,CAAA,IAAA,EAAK,YAAW,CAAM,KAAA;AAAA,KACrC;AACA,IAAA,IAAI,aAAa,CAAI,CAAA,EAAA;AACnB,MAAM,MAAA,OAAA,GAAU,mBAAK,QAAS,CAAA,CAAA,mBAAA;AAC9B,MAAM,MAAA,WAAA,GAAc,KAAK,GAAI,EAAA;AAC7B,MAAA,GAAA,CAAI,OAAO,CAAI,GAAA,WAAA;AACf,MAAK,YAAA,CAAA,IAAA,EAAA,KAAA,CAAA,CAAM,QAAQ,CAAI,GAAA,GAAA;AACvB,MAAK,IAAA,CAAA,IAAA,CAAK,UAAU,GAAG,CAAA;AAAA;AACzB;AAEJ;AA/GE,KAAA,GAAA,IAAA,OAAA,EAAA;AACA,QAAA,GAAA,IAAA,OAAA,EAAA;AACA,WAAA,GAAA,IAAA,OAAA,EAAA;AACA,MAAA,GAAA,IAAA,OAAA,EAAA;AACA,OAAA,GAAA,IAAA,OAAA,EAAA;AA6GK,SAAS,6BAA6B,MAA+B,EAAA;AAC1E,EAAA,OAAO,MAAO,CAAA,MAAA,CAAO,MAAO,CAAA,OAAO,CAAE,CAAA,MAAA;AAAA,IACnC,CAAC,GAAK,EAAA,GAAA,EAAK,KAAW,MAAA;AAAA,MACpB,GAAG,GAAA;AAAA,MACH,CAAC,GAAI,CAAA,IAAI,GAAG;AAAA,KACd,CAAA;AAAA,IACA;AAAC,GACH;AACF;AAWgB,SAAA,kBAAA,CACd,SACA,SACA,EAAA;AACA,EAAO,OAAA,4BAAA,CAA6B,OAAQ,CAAA,SAAS,CAAC,CAAA;AACxD;;;;"}
@@ -1,314 +0,0 @@
1
- import { ArrayDataSource } from '@vuu-ui/vuu-data-local';
2
- import { isRpcSuccess, isInlineEditingSession, isTypeaheadRequest } from '@vuu-ui/vuu-utils';
3
- import { makeSuggestions } from './makeSuggestions.js';
4
-
5
- var __defProp = Object.defineProperty;
6
- var __typeError = (msg) => {
7
- throw TypeError(msg);
8
- };
9
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
10
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
11
- var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
12
- var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), member.get(obj));
13
- var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
14
- var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
15
- var _menuRpcServices, _pendingVisualLink, _rpcMenuServices, _rpcServices, _sessionTables, _sessionDataSource, _table, _selectionLinkSubscribers, _visualLinkService, _getVisualLinks, _vuuModule;
16
- class TickingArrayDataSource extends ArrayDataSource {
17
- constructor({
18
- data,
19
- getVisualLinks,
20
- rpcServices,
21
- rpcMenuServices,
22
- sessionTables,
23
- table,
24
- menu,
25
- visualLink,
26
- visualLinkService,
27
- vuuModule,
28
- ...arrayDataSourceProps
29
- }) {
30
- if (data === void 0 && table === void 0) {
31
- throw Error("TickingArrayDataSource must be constructed with data");
32
- }
33
- super({
34
- ...arrayDataSourceProps,
35
- data: data ?? table?.data ?? [],
36
- dataMap: table?.map
37
- });
38
- __privateAdd(this, _menuRpcServices);
39
- __privateAdd(this, _pendingVisualLink);
40
- __privateAdd(this, _rpcMenuServices);
41
- __privateAdd(this, _rpcServices);
42
- // A reference to session tables hosted within client side module
43
- __privateAdd(this, _sessionTables);
44
- __privateAdd(this, _sessionDataSource);
45
- __privateAdd(this, _table);
46
- __privateAdd(this, _selectionLinkSubscribers);
47
- __privateAdd(this, _visualLinkService);
48
- __privateAdd(this, _getVisualLinks);
49
- __privateAdd(this, _vuuModule);
50
- __publicField(this, "updateRowWithSessionCheck", (row, columnName, sessionId) => {
51
- if (sessionId && sessionId === this.viewport) {
52
- this.updateRow(row, columnName);
53
- } else if (sessionId) {
54
- console.warn("THIS IS NEVER EXPECTED TO HAPPEN");
55
- } else if (__privateGet(this, _sessionDataSource)) ; else {
56
- this.updateRow(row, columnName);
57
- }
58
- });
59
- __publicField(this, "handleSessionMessage", (msg) => {
60
- if (msg.type === "subscribed") ; else if (msg.type === "viewport-update") {
61
- if (msg.size !== void 0 && msg.size !== this.size) {
62
- this.emit("resize", msg.size);
63
- }
64
- this.clientCallback?.(msg);
65
- }
66
- });
67
- this._menu = menu;
68
- __privateSet(this, _rpcMenuServices, rpcMenuServices);
69
- __privateSet(this, _pendingVisualLink, visualLink);
70
- __privateSet(this, _rpcServices, rpcServices);
71
- __privateSet(this, _sessionTables, sessionTables);
72
- __privateSet(this, _table, table);
73
- __privateSet(this, _visualLinkService, visualLinkService);
74
- __privateSet(this, _getVisualLinks, getVisualLinks);
75
- __privateSet(this, _vuuModule, vuuModule);
76
- if (table) {
77
- this.tableSchema = table.schema;
78
- table.on("insert", this.insert);
79
- table.on("update", this.updateRowWithSessionCheck);
80
- table.on("delete", this.deleteRow);
81
- }
82
- }
83
- async subscribe(subscribeProps, callback) {
84
- const subscription = super.subscribe(subscribeProps, callback);
85
- if (__privateGet(this, _pendingVisualLink)) {
86
- this.visualLink = __privateGet(this, _pendingVisualLink);
87
- __privateSet(this, _pendingVisualLink, void 0);
88
- }
89
- return subscription;
90
- }
91
- unsubscribe() {
92
- super.unsubscribe();
93
- __privateSet(this, _table, void 0);
94
- }
95
- set range(range) {
96
- super.range = range;
97
- }
98
- get range() {
99
- return super.range;
100
- }
101
- set links(links) {
102
- super.links = links;
103
- }
104
- get links() {
105
- var _a;
106
- return (_a = __privateGet(this, _getVisualLinks)) == null ? void 0 : _a.call(this, this.table.table);
107
- }
108
- getSelectedRowIds() {
109
- return Array.from(this.selectedRows);
110
- }
111
- createSessionDataSource(sessionTable) {
112
- if (__privateGet(this, _vuuModule)) {
113
- return __privateGet(this, _vuuModule)?.createDataSource(
114
- sessionTable.table,
115
- sessionTable.table
116
- );
117
- } else {
118
- throw Error(
119
- `[TickingArrayDataSource] unable to createSessionDataSource, not constructed with VuuModule`
120
- );
121
- }
122
- }
123
- async beginEditSession(editSessionMode = "inline-all-rows") {
124
- const rpcResponse = await this?.rpcRequest?.({
125
- type: "RPC_REQUEST",
126
- rpcName: "beginEditSession",
127
- params: {
128
- editSessionMode
129
- }
130
- });
131
- if (isRpcSuccess(rpcResponse)) {
132
- const { table: sessionTable } = rpcResponse.data;
133
- if (isInlineEditingSession(editSessionMode)) {
134
- __privateSet(this, _sessionDataSource, __privateGet(this, _vuuModule)?.createDataSource(
135
- sessionTable.table,
136
- sessionTable.table,
137
- this.config
138
- ));
139
- __privateGet(this, _sessionDataSource)?.subscribe(
140
- {
141
- range: this.range
142
- },
143
- this.handleSessionMessage
144
- );
145
- } else {
146
- return __privateGet(this, _vuuModule)?.createDataSource(
147
- sessionTable.table,
148
- sessionTable.table,
149
- this.config
150
- );
151
- }
152
- } else {
153
- throw Error(
154
- `[VuuDataSource] beginEditSession ${rpcResponse.errorMessage}`
155
- );
156
- }
157
- }
158
- async editCell(key, column, data) {
159
- console.log(
160
- `[VuuDataSource] editCell ${__privateGet(this, _sessionDataSource)?.viewport} rowKey ${key}, column ${column}, value ${data}`
161
- );
162
- const rpcHost = __privateGet(this, _sessionDataSource) ?? this;
163
- return rpcHost.rpcRequest?.({
164
- type: "RPC_REQUEST",
165
- rpcName: "editCell",
166
- params: {
167
- column,
168
- data,
169
- key
170
- }
171
- });
172
- }
173
- async endEditSession(saveChanges = false) {
174
- const type = "RPC_REQUEST";
175
- const rpcName = "endEditSession";
176
- const sessionDataSource = __privateGet(this, _sessionDataSource);
177
- const rpcHost = sessionDataSource ?? this;
178
- if (sessionDataSource) {
179
- __privateSet(this, _sessionDataSource, void 0);
180
- }
181
- const rpcResponse = await rpcHost.rpcRequest?.(
182
- saveChanges ? { type, rpcName, params: { save: true } } : { type, rpcName, params: {} }
183
- );
184
- if (isRpcSuccess(rpcResponse)) {
185
- sessionDataSource?.unsubscribe();
186
- this.sendRowsToClient(true);
187
- } else {
188
- if (rpcResponse?.errorMessage === "stale update") {
189
- sessionDataSource?.unsubscribe();
190
- this.sendRowsToClient(true);
191
- } else {
192
- throw Error("unknown error");
193
- }
194
- }
195
- }
196
- async rpcRequest(rpcRequest) {
197
- if (isTypeaheadRequest(rpcRequest)) {
198
- const {
199
- params: { column, starts }
200
- } = rpcRequest;
201
- const data = await this.getTypeaheadSuggestions(column, starts);
202
- return {
203
- type: "SUCCESS_RESULT",
204
- data
205
- };
206
- } else {
207
- const rpcService = __privateGet(this, _rpcServices)?.find(
208
- (service) => service.rpcName === rpcRequest.rpcName
209
- );
210
- if (rpcService) {
211
- return rpcService.service({
212
- ...rpcRequest,
213
- context: {
214
- type: "VIEWPORT_CONTEXT",
215
- viewPortId: this.viewport
216
- }
217
- });
218
- } else {
219
- throw Error(
220
- `[TickingArrayDataSource] no service to handle RPC request ${rpcRequest.rpcName}`
221
- );
222
- }
223
- }
224
- }
225
- async menuRpcCall(rpcRequest) {
226
- const rpcService = __privateGet(this, _rpcMenuServices)?.find(
227
- (service) => service.rpcName === rpcRequest.rpcName
228
- );
229
- if (rpcService) {
230
- return rpcService.service({
231
- ...rpcRequest,
232
- vpId: this.viewport
233
- });
234
- } else {
235
- throw Error(
236
- `[TickingArrayDataSource] menuRpcCall no service for ${rpcRequest.rpcName}`
237
- );
238
- }
239
- }
240
- getTypeaheadSuggestions(column, pattern) {
241
- if (__privateGet(this, _table)) {
242
- const columnIndex = this.columnMap[column];
243
- if (columnIndex === void 0) {
244
- console.warn(
245
- `[TickingArrayDataSource] getTypeaheadSuggestions. No column ${column}`
246
- );
247
- return Promise.resolve([]);
248
- } else {
249
- return makeSuggestions(this.currentData, columnIndex, pattern);
250
- }
251
- } else {
252
- throw Error(
253
- "cannot call getTypeaheadSuggestions on TickingDataSource if table has not been provided"
254
- );
255
- }
256
- }
257
- get visualLink() {
258
- return this._config.visualLink;
259
- }
260
- set visualLink(visualLink) {
261
- var _a, _b;
262
- this._config = {
263
- ...this._config,
264
- visualLink
265
- };
266
- if (visualLink) {
267
- const {
268
- parentClientVpId,
269
- link: { fromColumn, toColumn }
270
- } = visualLink;
271
- if (this.viewport) {
272
- (_a = __privateGet(this, _visualLinkService)) == null ? void 0 : _a.call(this, {
273
- childVpId: this.viewport,
274
- childColumnName: fromColumn,
275
- type: "CREATE_VISUAL_LINK",
276
- parentVpId: parentClientVpId,
277
- parentColumnName: toColumn
278
- }).then((response) => {
279
- this.emit(
280
- "visual-link-created",
281
- response
282
- );
283
- });
284
- }
285
- } else {
286
- (_b = __privateGet(this, _visualLinkService)) == null ? void 0 : _b.call(this, {
287
- childVpId: this.viewport,
288
- type: "REMOVE_VISUAL_LINK"
289
- }).then(() => {
290
- this.emit("visual-link-removed");
291
- });
292
- }
293
- }
294
- freeze() {
295
- super.freeze();
296
- }
297
- unfreeze() {
298
- super.unfreeze();
299
- }
300
- }
301
- _menuRpcServices = new WeakMap();
302
- _pendingVisualLink = new WeakMap();
303
- _rpcMenuServices = new WeakMap();
304
- _rpcServices = new WeakMap();
305
- _sessionTables = new WeakMap();
306
- _sessionDataSource = new WeakMap();
307
- _table = new WeakMap();
308
- _selectionLinkSubscribers = new WeakMap();
309
- _visualLinkService = new WeakMap();
310
- _getVisualLinks = new WeakMap();
311
- _vuuModule = new WeakMap();
312
-
313
- export { TickingArrayDataSource };
314
- //# sourceMappingURL=TickingArrayDataSource.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TickingArrayDataSource.js","sources":["../../../packages/vuu-data-test/src/TickingArrayDataSource.ts"],"sourcesContent":["import {\n ArrayDataSource,\n ArrayDataSourceConstructorProps,\n} from \"@vuu-ui/vuu-data-local\";\nimport type {\n DataSource,\n DataSourceCallbackMessage,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n DataSourceVisualLinkCreatedMessage,\n EditSessionMode,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n LinkDescriptorWithLabel,\n RpcResultError,\n RpcResultSuccess,\n VuuCreateVisualLink,\n VuuMenu,\n VuuRemoveVisualLink,\n VuuRowDataItemType,\n VuuRpcMenuRequest,\n VuuRpcMenuResponse,\n VuuRpcServiceRequest,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { isRpcSuccess, isTypeaheadRequest, Range } from \"@vuu-ui/vuu-utils\";\nimport {\n IVuuModule,\n RpcMenuService,\n RpcService,\n SessionTableMap,\n} from \"./core/module/VuuModule\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport { Table } from \"./Table\";\nimport { isInlineEditingSession } from \"@vuu-ui/vuu-utils\";\n\nexport type VisualLinkHandler = (\n message: VuuCreateVisualLink | VuuRemoveVisualLink,\n) => Promise<DataSourceVisualLinkCreatedMessage | void>;\n\nexport interface TickingArrayDataSourceConstructorProps\n extends Omit<ArrayDataSourceConstructorProps, \"data\"> {\n data?: Array<VuuRowDataItemType[]>;\n getVisualLinks?: (tableName: string) => LinkDescriptorWithLabel[] | undefined;\n menu?: VuuMenu;\n rpcMenuServices?: RpcMenuService[];\n rpcServices?: RpcService[];\n sessionTables?: SessionTableMap;\n table?: Table;\n visualLinkService?: VisualLinkHandler;\n vuuModule?: IVuuModule;\n}\n\ntype LinkSubscription = {\n sourceColumnName?: string;\n columnName: string;\n linkType: \"subscribe-link-filter\" | \"subscribe-link-select\";\n};\n\nexport class TickingArrayDataSource extends ArrayDataSource {\n #menuRpcServices: RpcService[] | undefined;\n #pendingVisualLink?: LinkDescriptorWithLabel;\n #rpcMenuServices: RpcMenuService[] | undefined;\n #rpcServices: RpcService[] | undefined;\n // A reference to session tables hosted within client side module\n #sessionTables: SessionTableMap | undefined;\n #sessionDataSource: DataSource | undefined = undefined;\n #table?: Table;\n #selectionLinkSubscribers: Map<string, LinkSubscription> | undefined;\n #visualLinkService?: VisualLinkHandler;\n #getVisualLinks?: (\n tableName: string,\n ) => LinkDescriptorWithLabel[] | undefined;\n #vuuModule?: IVuuModule;\n\n constructor({\n data,\n getVisualLinks,\n rpcServices,\n rpcMenuServices,\n sessionTables,\n table,\n menu,\n visualLink,\n visualLinkService,\n vuuModule,\n ...arrayDataSourceProps\n }: TickingArrayDataSourceConstructorProps) {\n if (data === undefined && table === undefined) {\n throw Error(\"TickingArrayDataSource must be constructed with data\");\n }\n super({\n ...arrayDataSourceProps,\n data: data ?? table?.data ?? [],\n dataMap: table?.map,\n });\n this._menu = menu;\n\n this.#rpcMenuServices = rpcMenuServices;\n this.#pendingVisualLink = visualLink;\n this.#rpcServices = rpcServices;\n this.#sessionTables = sessionTables;\n this.#table = table;\n this.#visualLinkService = visualLinkService;\n this.#getVisualLinks = getVisualLinks;\n this.#vuuModule = vuuModule;\n\n if (table) {\n this.tableSchema = table.schema;\n table.on(\"insert\", this.insert);\n table.on(\"update\", this.updateRowWithSessionCheck);\n table.on(\"delete\", this.deleteRow);\n }\n }\n\n updateRowWithSessionCheck = (\n row: VuuRowDataItemType[],\n columnName?: string,\n sessionId?: string,\n ) => {\n if (sessionId && sessionId === this.viewport) {\n this.updateRow(row, columnName);\n } else if (sessionId) {\n // will never happen\n console.warn(\"THIS IS NEVER EXPECTED TO HAPPEN\");\n } else if (this.#sessionDataSource) {\n // queue updates for deferred application, issue warnings when edits in progress\n // this.emit(\"remote-update-during-local-edit\", row);\n } else {\n this.updateRow(row, columnName);\n }\n };\n\n async subscribe(\n subscribeProps: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n const subscription = super.subscribe(subscribeProps, callback);\n // if (subscribeProps.range) {\n // this.#updateGenerator?.setRange(subscribeProps.range);\n // }\n if (this.#pendingVisualLink) {\n this.visualLink = this.#pendingVisualLink;\n this.#pendingVisualLink = undefined;\n }\n\n return subscription;\n }\n\n unsubscribe() {\n super.unsubscribe();\n this.#table = undefined;\n }\n\n set range(range: Range) {\n super.range = range;\n // this.#updateGenerator?.setRange(range);\n }\n get range() {\n return super.range;\n }\n\n set links(links: LinkDescriptorWithLabel[] | undefined) {\n super.links = links;\n }\n\n get links() {\n return this.#getVisualLinks?.(this.table.table);\n }\n\n getSelectedRowIds() {\n return Array.from(this.selectedRows);\n }\n\n handleSessionMessage = (msg: DataSourceCallbackMessage) => {\n if (msg.type === \"subscribed\") {\n // console.log(`[VuuDataSource subscribed to session table]`);\n } else if (msg.type === \"viewport-update\") {\n if (msg.size !== undefined && msg.size !== this.size) {\n this.emit(\"resize\", msg.size);\n }\n this.clientCallback?.(msg);\n }\n };\n\n createSessionDataSource(sessionTable: VuuTable) {\n if (this.#vuuModule) {\n return this.#vuuModule?.createDataSource(\n sessionTable.table,\n sessionTable.table,\n );\n } else {\n throw Error(\n `[TickingArrayDataSource] unable to createSessionDataSource, not constructed with VuuModule`,\n );\n }\n }\n\n async beginEditSession(editSessionMode: EditSessionMode = \"inline-all-rows\") {\n const rpcResponse = await this?.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"beginEditSession\",\n params: {\n editSessionMode,\n },\n });\n\n if (isRpcSuccess(rpcResponse)) {\n const { table: sessionTable } = rpcResponse.data as { table: VuuTable };\n\n if (isInlineEditingSession(editSessionMode)) {\n this.#sessionDataSource = this.#vuuModule?.createDataSource(\n sessionTable.table,\n sessionTable.table,\n this.config,\n );\n\n this.#sessionDataSource?.subscribe(\n {\n range: this.range,\n },\n this.handleSessionMessage,\n );\n } else {\n return this.#vuuModule?.createDataSource(\n sessionTable.table,\n sessionTable.table,\n this.config,\n );\n }\n\n // we need to route messages from the session datasource to listening\n // client whilst still monitoring responses on the source table to which\n // we are currently subscribed.\n } else {\n throw Error(\n `[VuuDataSource] beginEditSession ${rpcResponse.errorMessage}`,\n );\n ///\n }\n }\n\n async editCell(key: string, column: string, data: VuuRowDataItemType) {\n console.log(\n `[VuuDataSource] editCell ${this.#sessionDataSource?.viewport} rowKey ${key}, column ${column}, value ${data}`,\n );\n\n const rpcHost = this.#sessionDataSource ?? this;\n\n return rpcHost.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"editCell\",\n params: {\n column,\n data,\n key,\n },\n });\n }\n\n async endEditSession(saveChanges = false) {\n const type = \"RPC_REQUEST\";\n const rpcName = \"endEditSession\";\n\n const sessionDataSource = this.#sessionDataSource;\n\n const rpcHost = sessionDataSource ?? this;\n\n if (sessionDataSource) {\n // timing is important here. By breaking this reference before\n // we send the endEdit RPC call, the application of session edits\n // to the source table will be handled correctly.\n this.#sessionDataSource = undefined;\n }\n\n const rpcResponse = await rpcHost.rpcRequest?.(\n saveChanges\n ? { type, rpcName, params: { save: true } }\n : { type, rpcName, params: {} },\n );\n\n if (isRpcSuccess(rpcResponse)) {\n sessionDataSource?.unsubscribe();\n this.sendRowsToClient(true);\n } else {\n // TODO do we reinstate the sessionDataSource ?\n if (rpcResponse?.errorMessage === \"stale update\") {\n sessionDataSource?.unsubscribe();\n this.sendRowsToClient(true);\n } else {\n throw Error(\"unknown error\");\n }\n }\n }\n\n async rpcRequest(\n rpcRequest: Omit<VuuRpcServiceRequest, \"context\">,\n ): Promise<RpcResultSuccess | RpcResultError> {\n if (isTypeaheadRequest(rpcRequest)) {\n const {\n params: { column, starts },\n } = rpcRequest;\n const data = await this.getTypeaheadSuggestions(column, starts);\n return {\n type: \"SUCCESS_RESULT\",\n data,\n } as RpcResultSuccess;\n } else {\n const rpcService = this.#rpcServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n if (rpcService) {\n return rpcService.service({\n ...rpcRequest,\n context: {\n type: \"VIEWPORT_CONTEXT\",\n viewPortId: this.viewport,\n },\n });\n } else {\n throw Error(\n `[TickingArrayDataSource] no service to handle RPC request ${rpcRequest.rpcName}`,\n );\n }\n }\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcMenuRequest, \"vpId\">,\n ): Promise<VuuRpcMenuResponse> {\n const rpcService = this.#rpcMenuServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n\n if (rpcService) {\n return rpcService.service({\n ...rpcRequest,\n vpId: this.viewport,\n } as VuuRpcMenuRequest);\n } else {\n throw Error(\n `[TickingArrayDataSource] menuRpcCall no service for ${rpcRequest.rpcName}`,\n );\n }\n }\n\n getTypeaheadSuggestions(column: string, pattern?: string): Promise<string[]> {\n if (this.#table) {\n const columnIndex = this.columnMap[column];\n if (columnIndex === undefined) {\n console.warn(\n `[TickingArrayDataSource] getTypeaheadSuggestions. No column ${column}`,\n );\n return Promise.resolve([]);\n } else {\n return makeSuggestions(this.currentData, columnIndex, pattern);\n }\n } else {\n throw Error(\n \"cannot call getTypeaheadSuggestions on TickingDataSource if table has not been provided\",\n );\n }\n }\n\n get visualLink() {\n return this._config.visualLink;\n }\n\n set visualLink(visualLink: LinkDescriptorWithLabel | undefined) {\n this._config = {\n ...this._config,\n visualLink,\n };\n\n if (visualLink) {\n const {\n parentClientVpId,\n link: { fromColumn, toColumn },\n } = visualLink;\n\n if (this.viewport) {\n this.#visualLinkService?.({\n childVpId: this.viewport,\n childColumnName: fromColumn,\n type: \"CREATE_VISUAL_LINK\",\n parentVpId: parentClientVpId,\n parentColumnName: toColumn,\n }).then((response) => {\n this.emit(\n \"visual-link-created\",\n response as DataSourceVisualLinkCreatedMessage,\n );\n });\n }\n } else {\n this.#visualLinkService?.({\n childVpId: this.viewport,\n type: \"REMOVE_VISUAL_LINK\",\n }).then((/* response */) => {\n this.emit(\"visual-link-removed\");\n });\n }\n }\n\n freeze() {\n super.freeze();\n }\n\n unfreeze() {\n super.unfreeze();\n }\n}\n"],"names":[],"mappings":"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"}