@vuu-ui/vuu-data-test 0.13.7 → 0.13.8

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 (205) hide show
  1. package/cjs/index.js +3047 -46
  2. package/cjs/index.js.map +1 -1
  3. package/esm/index.js +3019 -14
  4. package/esm/index.js.map +1 -1
  5. package/package.json +6 -6
  6. package/cjs/ArrayProxy.js +0 -72
  7. package/cjs/ArrayProxy.js.map +0 -1
  8. package/cjs/RuntimeVisualLink.js +0 -89
  9. package/cjs/RuntimeVisualLink.js.map +0 -1
  10. package/cjs/Table.js +0 -184
  11. package/cjs/Table.js.map +0 -1
  12. package/cjs/TickingArrayDataSource.js +0 -208
  13. package/cjs/TickingArrayDataSource.js.map +0 -1
  14. package/cjs/UpdateGenerator.js +0 -94
  15. package/cjs/UpdateGenerator.js.map +0 -1
  16. package/cjs/VuuModule.js +0 -370
  17. package/cjs/VuuModule.js.map +0 -1
  18. package/cjs/basket/basket-module.js +0 -255
  19. package/cjs/basket/basket-module.js.map +0 -1
  20. package/cjs/basket/basket-schemas.js +0 -123
  21. package/cjs/basket/basket-schemas.js.map +0 -1
  22. package/cjs/basket/reference-data/constituents.js +0 -40
  23. package/cjs/basket/reference-data/constituents.js.map +0 -1
  24. package/cjs/basket/reference-data/ftse100.js +0 -105
  25. package/cjs/basket/reference-data/ftse100.js.map +0 -1
  26. package/cjs/basket/reference-data/hsi.js +0 -87
  27. package/cjs/basket/reference-data/hsi.js.map +0 -1
  28. package/cjs/basket/reference-data/nasdaq100.js +0 -108
  29. package/cjs/basket/reference-data/nasdaq100.js.map +0 -1
  30. package/cjs/basket/reference-data/prices.js +0 -54
  31. package/cjs/basket/reference-data/prices.js.map +0 -1
  32. package/cjs/basket/reference-data/sp500.js +0 -46
  33. package/cjs/basket/reference-data/sp500.js.map +0 -1
  34. package/cjs/data-utils.js +0 -57
  35. package/cjs/data-utils.js.map +0 -1
  36. package/cjs/local-datasource-provider/LocalDatasourceProvider.js +0 -84
  37. package/cjs/local-datasource-provider/LocalDatasourceProvider.js.map +0 -1
  38. package/cjs/makeSuggestions.js +0 -43
  39. package/cjs/makeSuggestions.js.map +0 -1
  40. package/cjs/schemas.js +0 -28
  41. package/cjs/schemas.js.map +0 -1
  42. package/cjs/simul/SimulModule.js +0 -24
  43. package/cjs/simul/SimulModule.js.map +0 -1
  44. package/cjs/simul/reference-data/accounts.js +0 -27
  45. package/cjs/simul/reference-data/accounts.js.map +0 -1
  46. package/cjs/simul/reference-data/algos.js +0 -6
  47. package/cjs/simul/reference-data/algos.js.map +0 -1
  48. package/cjs/simul/reference-data/currencies.js +0 -6
  49. package/cjs/simul/reference-data/currencies.js.map +0 -1
  50. package/cjs/simul/reference-data/instruments-extended.js +0 -18
  51. package/cjs/simul/reference-data/instruments-extended.js.map +0 -1
  52. package/cjs/simul/reference-data/instruments.js +0 -77
  53. package/cjs/simul/reference-data/instruments.js.map +0 -1
  54. package/cjs/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js +0 -6
  55. package/cjs/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js.map +0 -1
  56. package/cjs/simul/reference-data/isin-generator/fixtures/alphabet.js +0 -31
  57. package/cjs/simul/reference-data/isin-generator/fixtures/alphabet.js.map +0 -1
  58. package/cjs/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js +0 -9
  59. package/cjs/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js.map +0 -1
  60. package/cjs/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js +0 -17
  61. package/cjs/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js.map +0 -1
  62. package/cjs/simul/reference-data/isin-generator/generate-cusip-check-code.js +0 -24
  63. package/cjs/simul/reference-data/isin-generator/generate-cusip-check-code.js.map +0 -1
  64. package/cjs/simul/reference-data/isin-generator/generate-cusip-without-check-code.js +0 -13
  65. package/cjs/simul/reference-data/isin-generator/generate-cusip-without-check-code.js.map +0 -1
  66. package/cjs/simul/reference-data/isin-generator/generate-cusip.js +0 -13
  67. package/cjs/simul/reference-data/isin-generator/generate-cusip.js.map +0 -1
  68. package/cjs/simul/reference-data/isin-generator/generate-random-alphanumeric.js +0 -8
  69. package/cjs/simul/reference-data/isin-generator/generate-random-alphanumeric.js.map +0 -1
  70. package/cjs/simul/reference-data/isin-generator/generate-random-base-ten-number.js +0 -6
  71. package/cjs/simul/reference-data/isin-generator/generate-random-base-ten-number.js.map +0 -1
  72. package/cjs/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js +0 -14
  73. package/cjs/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js.map +0 -1
  74. package/cjs/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js +0 -14
  75. package/cjs/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js.map +0 -1
  76. package/cjs/simul/reference-data/isin-generator/index.js +0 -295
  77. package/cjs/simul/reference-data/isin-generator/index.js.map +0 -1
  78. package/cjs/simul/reference-data/isin-generator/is-odd.js +0 -6
  79. package/cjs/simul/reference-data/isin-generator/is-odd.js.map +0 -1
  80. package/cjs/simul/reference-data/locations.js +0 -17
  81. package/cjs/simul/reference-data/locations.js.map +0 -1
  82. package/cjs/simul/reference-data/lotsizes.js +0 -28
  83. package/cjs/simul/reference-data/lotsizes.js.map +0 -1
  84. package/cjs/simul/reference-data/orderStatus.js +0 -6
  85. package/cjs/simul/reference-data/orderStatus.js.map +0 -1
  86. package/cjs/simul/reference-data/orders.js +0 -54
  87. package/cjs/simul/reference-data/orders.js.map +0 -1
  88. package/cjs/simul/reference-data/parent-child-orders.js +0 -122
  89. package/cjs/simul/reference-data/parent-child-orders.js.map +0 -1
  90. package/cjs/simul/reference-data/prices.js +0 -71
  91. package/cjs/simul/reference-data/prices.js.map +0 -1
  92. package/cjs/simul/reference-data/sides.js +0 -6
  93. package/cjs/simul/reference-data/sides.js.map +0 -1
  94. package/cjs/simul/simul-module.js +0 -126
  95. package/cjs/simul/simul-module.js.map +0 -1
  96. package/cjs/simul/simul-schemas.js +0 -142
  97. package/cjs/simul/simul-schemas.js.map +0 -1
  98. package/cjs/test/test-module.js +0 -26
  99. package/cjs/test/test-module.js.map +0 -1
  100. package/cjs/test/test-schemas.js +0 -17
  101. package/cjs/test/test-schemas.js.map +0 -1
  102. package/cjs/vuu-modules.js +0 -15
  103. package/cjs/vuu-modules.js.map +0 -1
  104. package/cjs/vuu-row-generator.js +0 -74
  105. package/cjs/vuu-row-generator.js.map +0 -1
  106. package/esm/ArrayProxy.js +0 -70
  107. package/esm/ArrayProxy.js.map +0 -1
  108. package/esm/RuntimeVisualLink.js +0 -87
  109. package/esm/RuntimeVisualLink.js.map +0 -1
  110. package/esm/Table.js +0 -179
  111. package/esm/Table.js.map +0 -1
  112. package/esm/TickingArrayDataSource.js +0 -206
  113. package/esm/TickingArrayDataSource.js.map +0 -1
  114. package/esm/UpdateGenerator.js +0 -92
  115. package/esm/UpdateGenerator.js.map +0 -1
  116. package/esm/VuuModule.js +0 -366
  117. package/esm/VuuModule.js.map +0 -1
  118. package/esm/basket/basket-module.js +0 -251
  119. package/esm/basket/basket-module.js.map +0 -1
  120. package/esm/basket/basket-schemas.js +0 -120
  121. package/esm/basket/basket-schemas.js.map +0 -1
  122. package/esm/basket/reference-data/constituents.js +0 -38
  123. package/esm/basket/reference-data/constituents.js.map +0 -1
  124. package/esm/basket/reference-data/ftse100.js +0 -103
  125. package/esm/basket/reference-data/ftse100.js.map +0 -1
  126. package/esm/basket/reference-data/hsi.js +0 -85
  127. package/esm/basket/reference-data/hsi.js.map +0 -1
  128. package/esm/basket/reference-data/nasdaq100.js +0 -106
  129. package/esm/basket/reference-data/nasdaq100.js.map +0 -1
  130. package/esm/basket/reference-data/prices.js +0 -52
  131. package/esm/basket/reference-data/prices.js.map +0 -1
  132. package/esm/basket/reference-data/sp500.js +0 -44
  133. package/esm/basket/reference-data/sp500.js.map +0 -1
  134. package/esm/data-utils.js +0 -52
  135. package/esm/data-utils.js.map +0 -1
  136. package/esm/local-datasource-provider/LocalDatasourceProvider.js +0 -82
  137. package/esm/local-datasource-provider/LocalDatasourceProvider.js.map +0 -1
  138. package/esm/makeSuggestions.js +0 -41
  139. package/esm/makeSuggestions.js.map +0 -1
  140. package/esm/schemas.js +0 -24
  141. package/esm/schemas.js.map +0 -1
  142. package/esm/simul/SimulModule.js +0 -22
  143. package/esm/simul/SimulModule.js.map +0 -1
  144. package/esm/simul/reference-data/accounts.js +0 -25
  145. package/esm/simul/reference-data/accounts.js.map +0 -1
  146. package/esm/simul/reference-data/algos.js +0 -4
  147. package/esm/simul/reference-data/algos.js.map +0 -1
  148. package/esm/simul/reference-data/currencies.js +0 -4
  149. package/esm/simul/reference-data/currencies.js.map +0 -1
  150. package/esm/simul/reference-data/instruments-extended.js +0 -16
  151. package/esm/simul/reference-data/instruments-extended.js.map +0 -1
  152. package/esm/simul/reference-data/instruments.js +0 -72
  153. package/esm/simul/reference-data/instruments.js.map +0 -1
  154. package/esm/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js +0 -4
  155. package/esm/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js.map +0 -1
  156. package/esm/simul/reference-data/isin-generator/fixtures/alphabet.js +0 -29
  157. package/esm/simul/reference-data/isin-generator/fixtures/alphabet.js.map +0 -1
  158. package/esm/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js +0 -7
  159. package/esm/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js.map +0 -1
  160. package/esm/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js +0 -15
  161. package/esm/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js.map +0 -1
  162. package/esm/simul/reference-data/isin-generator/generate-cusip-check-code.js +0 -22
  163. package/esm/simul/reference-data/isin-generator/generate-cusip-check-code.js.map +0 -1
  164. package/esm/simul/reference-data/isin-generator/generate-cusip-without-check-code.js +0 -11
  165. package/esm/simul/reference-data/isin-generator/generate-cusip-without-check-code.js.map +0 -1
  166. package/esm/simul/reference-data/isin-generator/generate-cusip.js +0 -11
  167. package/esm/simul/reference-data/isin-generator/generate-cusip.js.map +0 -1
  168. package/esm/simul/reference-data/isin-generator/generate-random-alphanumeric.js +0 -6
  169. package/esm/simul/reference-data/isin-generator/generate-random-alphanumeric.js.map +0 -1
  170. package/esm/simul/reference-data/isin-generator/generate-random-base-ten-number.js +0 -4
  171. package/esm/simul/reference-data/isin-generator/generate-random-base-ten-number.js.map +0 -1
  172. package/esm/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js +0 -12
  173. package/esm/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js.map +0 -1
  174. package/esm/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js +0 -12
  175. package/esm/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js.map +0 -1
  176. package/esm/simul/reference-data/isin-generator/index.js +0 -293
  177. package/esm/simul/reference-data/isin-generator/index.js.map +0 -1
  178. package/esm/simul/reference-data/isin-generator/is-odd.js +0 -4
  179. package/esm/simul/reference-data/isin-generator/is-odd.js.map +0 -1
  180. package/esm/simul/reference-data/locations.js +0 -14
  181. package/esm/simul/reference-data/locations.js.map +0 -1
  182. package/esm/simul/reference-data/lotsizes.js +0 -26
  183. package/esm/simul/reference-data/lotsizes.js.map +0 -1
  184. package/esm/simul/reference-data/orderStatus.js +0 -4
  185. package/esm/simul/reference-data/orderStatus.js.map +0 -1
  186. package/esm/simul/reference-data/orders.js +0 -51
  187. package/esm/simul/reference-data/orders.js.map +0 -1
  188. package/esm/simul/reference-data/parent-child-orders.js +0 -117
  189. package/esm/simul/reference-data/parent-child-orders.js.map +0 -1
  190. package/esm/simul/reference-data/prices.js +0 -68
  191. package/esm/simul/reference-data/prices.js.map +0 -1
  192. package/esm/simul/reference-data/sides.js +0 -4
  193. package/esm/simul/reference-data/sides.js.map +0 -1
  194. package/esm/simul/simul-module.js +0 -124
  195. package/esm/simul/simul-module.js.map +0 -1
  196. package/esm/simul/simul-schemas.js +0 -139
  197. package/esm/simul/simul-schemas.js.map +0 -1
  198. package/esm/test/test-module.js +0 -24
  199. package/esm/test/test-module.js.map +0 -1
  200. package/esm/test/test-schemas.js +0 -15
  201. package/esm/test/test-schemas.js.map +0 -1
  202. package/esm/vuu-modules.js +0 -13
  203. package/esm/vuu-modules.js.map +0 -1
  204. package/esm/vuu-row-generator.js +0 -68
  205. package/esm/vuu-row-generator.js.map +0 -1
@@ -1,87 +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", (selection) => {
21
- if (__privateGet(this, _childDataSource)) {
22
- const selectedValues = this.pickUniqueSelectedValues(selection);
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(selection) {
52
- const data = __privateGet(this, _parentDataSource).currentData;
53
- const selectedRows = selection.reduce(
54
- (rows, selected) => {
55
- if (Array.isArray(selected)) {
56
- for (let i = selected[0]; i <= selected[1]; i++) {
57
- const row = data[i];
58
- if (row) {
59
- rows.push(row);
60
- }
61
- }
62
- } else {
63
- const row = data[selected];
64
- if (row) {
65
- rows.push(row);
66
- }
67
- }
68
- return rows;
69
- },
70
- []
71
- );
72
- const map = buildColumnMap(__privateGet(this, _parentDataSource).columns);
73
- const set = /* @__PURE__ */ new Set();
74
- const colIndex = map[__privateGet(this, _parentColumnName)];
75
- for (const row of selectedRows) {
76
- set.add(row[colIndex]);
77
- }
78
- return Array.from(set);
79
- }
80
- }
81
- _childColumnName = new WeakMap();
82
- _childDataSource = new WeakMap();
83
- _parentColumnName = new WeakMap();
84
- _parentDataSource = new WeakMap();
85
-
86
- export { RuntimeVisualLink };
87
- //# sourceMappingURL=RuntimeVisualLink.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RuntimeVisualLink.js","sources":["../src/RuntimeVisualLink.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceRow,\n RowSelectionEventHandler,\n Selection,\n SelectionItem,\n} from \"@vuu-ui/vuu-data-types\";\nimport { buildColumnMap } from \"@vuu-ui/vuu-utils\";\nimport { TickingArrayDataSource } from \"./TickingArrayDataSource\";\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 = (selection) => {\n if (this.#childDataSource) {\n const selectedValues = this.pickUniqueSelectedValues(selection);\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(selection: Selection) {\n const data = (this.#parentDataSource as TickingArrayDataSource).currentData;\n const selectedRows = selection.reduce<DataSourceRow[]>(\n (rows, selected: SelectionItem) => {\n if (Array.isArray(selected)) {\n for (let i = selected[0]; i <= selected[1]; i++) {\n const row = data[i];\n if (row) {\n rows.push(row);\n }\n }\n } else {\n const row = data[selected];\n if (row) {\n rows.push(row);\n }\n }\n return rows;\n },\n [],\n );\n\n const map = buildColumnMap(this.#parentDataSource.columns);\n const set = new Set();\n const colIndex = map[this.#parentColumnName];\n for (const row of selectedRows) {\n set.add(row[colIndex]);\n }\n return Array.from(set) as string[];\n }\n}\n"],"names":[],"mappings":"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"}
package/esm/Table.js DELETED
@@ -1,179 +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
- insert(row) {
43
- const index = __privateGet(this, _data).length;
44
- __privateGet(this, _data).push(row);
45
- const key = row[__privateGet(this, _indexOfKey)];
46
- __privateGet(this, _index).set(key, index);
47
- this.emit("insert", row);
48
- }
49
- findByKey(key) {
50
- const index = __privateGet(this, _index).get(key) ?? -1;
51
- return __privateGet(this, _data)[index];
52
- }
53
- update(key, columnName, value) {
54
- const rowIndex = __privateGet(this, _data).findIndex(
55
- (row) => row[__privateGet(this, _indexOfKey)] === key
56
- );
57
- const colIndex = __privateGet(this, _dataMap)[columnName];
58
- if (rowIndex !== -1) {
59
- const row = __privateGet(this, _data)[rowIndex];
60
- const newRow = row.slice();
61
- newRow[colIndex] = value;
62
- __privateGet(this, _data)[rowIndex] = newRow;
63
- this.emit("update", newRow, columnName);
64
- }
65
- }
66
- updateRow(row) {
67
- const key = row[__privateGet(this, _indexOfKey)];
68
- const rowIndex = __privateGet(this, _data).findIndex(
69
- (row2) => row2[__privateGet(this, _indexOfKey)] === key
70
- );
71
- if (rowIndex !== -1) {
72
- __privateGet(this, _data)[rowIndex] = row;
73
- this.emit("update", row);
74
- }
75
- }
76
- }
77
- _data = new WeakMap();
78
- _dataMap = new WeakMap();
79
- _indexOfKey = new WeakMap();
80
- _index = new WeakMap();
81
- _schema = new WeakMap();
82
- function buildDataColumnMapFromSchema(schema) {
83
- return Object.values(schema.columns).reduce(
84
- (map, col, index) => ({
85
- ...map,
86
- [col.name]: index
87
- }),
88
- {}
89
- );
90
- }
91
- function buildDataColumnMap(schemas, tableName) {
92
- return buildDataColumnMapFromSchema(schemas[tableName]);
93
- }
94
- const getServerDataType = (columnName, { columns: cols1, table: t1 }, { columns: cols2, table: t2 }) => {
95
- const col1 = cols1.find((col) => col.name === columnName);
96
- const col2 = cols2.find((col) => col.name === columnName);
97
- if (col1 && col2) {
98
- if (col1.serverDataType === col2.serverDataType) {
99
- return col1.serverDataType;
100
- } else {
101
- throw Error(
102
- `both tables ${t1.table} and ${t2.table} implement column ${columnName}, but with types differ`
103
- );
104
- }
105
- } else if (col1) {
106
- return col1.serverDataType;
107
- } else if (col2) {
108
- return col2.serverDataType;
109
- } else {
110
- throw Error(`WTF how is this possible`);
111
- }
112
- };
113
- const joinTables = (joinTable, table1, table2, joinColumn) => {
114
- const { map: m1, schema: schema1 } = table1;
115
- const { map: m2, schema: schema2 } = table2;
116
- const k1 = m1[joinColumn];
117
- const k2 = m2[joinColumn];
118
- const combinedColumns = new Set(
119
- [...schema1.columns, ...schema2.columns].map((col) => col.name).sort()
120
- );
121
- const combinedSchema = {
122
- key: joinColumn,
123
- table: joinTable,
124
- columns: Array.from(combinedColumns).map((columnName) => ({
125
- name: columnName,
126
- serverDataType: getServerDataType(columnName, schema1, schema2)
127
- }))
128
- };
129
- const data = [];
130
- const combinedColumnMap = buildDataColumnMapFromSchema(combinedSchema);
131
- for (const row of table1.data) {
132
- const row2 = table2.findByKey(String(row[k1]));
133
- if (row2) {
134
- const out = [];
135
- for (const column of table1.schema.columns) {
136
- const value = row[m1[column.name]];
137
- out[combinedColumnMap[column.name]] = value;
138
- }
139
- for (const column of table2.schema.columns) {
140
- const value = row2[m2[column.name]];
141
- out[combinedColumnMap[column.name]] = value;
142
- }
143
- data.push(out);
144
- }
145
- }
146
- const newTable = new Table(combinedSchema, data, combinedColumnMap);
147
- table1.on("insert", (row) => {
148
- const row2 = table2.findByKey(String(row[k1]));
149
- if (row2) {
150
- const out = [];
151
- for (const column of table1.schema.columns) {
152
- const value = row[m1[column.name]];
153
- out[combinedColumnMap[column.name]] = value;
154
- }
155
- for (const column of table2.schema.columns) {
156
- const value = row2[m2[column.name]];
157
- out[combinedColumnMap[column.name]] = value;
158
- }
159
- newTable.insert(out);
160
- }
161
- });
162
- table2.on("update", (row) => {
163
- const keyValue = row[k2];
164
- const targetRow = newTable.findByKey(keyValue);
165
- if (targetRow) {
166
- const updatedRow = targetRow.slice();
167
- for (const { name } of table2.schema.columns) {
168
- if (row[m2[name]] !== updatedRow[combinedColumnMap[name]]) {
169
- updatedRow[combinedColumnMap[name]] = row[m2[name]];
170
- }
171
- }
172
- newTable.updateRow(updatedRow);
173
- }
174
- });
175
- return newTable;
176
- };
177
-
178
- export { Table, buildDataColumnMap, buildDataColumnMapFromSchema, joinTables };
179
- //# sourceMappingURL=Table.js.map
package/esm/Table.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"Table.js","sources":["../src/Table.ts"],"sourcesContent":["import { SchemaColumn, TableSchema } from \"@vuu-ui/vuu-data-types\";\nimport { VuuRowDataItemType, VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap, EventEmitter } from \"@vuu-ui/vuu-utils\";\nimport { UpdateGenerator } from \"./rowUpdates\";\n\nexport type TableEvents = {\n delete: (row: VuuRowDataItemType[]) => void;\n insert: (row: VuuRowDataItemType[]) => void;\n update: (row: VuuRowDataItemType[], columnName?: string) => 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 insert(row: VuuRowDataItemType[]) {\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 this.emit(\"insert\", row);\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 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 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\nconst getServerDataType = (\n columnName: string,\n { columns: cols1, table: t1 }: TableSchema,\n { columns: cols2, table: t2 }: TableSchema,\n) => {\n const col1 = cols1.find((col) => col.name === columnName);\n const col2 = cols2.find((col) => col.name === columnName);\n if (col1 && col2) {\n if (col1.serverDataType === col2.serverDataType) {\n return col1.serverDataType;\n } else {\n throw Error(\n `both tables ${t1.table} and ${t2.table} implement column ${columnName}, but with types differ`,\n );\n }\n } else if (col1) {\n return col1.serverDataType;\n } else if (col2) {\n return col2.serverDataType;\n } else {\n throw Error(`WTF how is this possible`);\n }\n};\n\n// Just copies source tables, then registers update listeners.\n// Not terribly efficient, but good enough for showcase\nexport const joinTables = (\n joinTable: VuuTable,\n table1: Table,\n table2: Table,\n joinColumn: string,\n) => {\n const { map: m1, schema: schema1 } = table1;\n const { map: m2, schema: schema2 } = table2;\n const k1 = m1[joinColumn];\n const k2 = m2[joinColumn];\n\n const combinedColumns = new Set(\n [...schema1.columns, ...schema2.columns].map((col) => col.name).sort(),\n );\n\n const combinedSchema: TableSchema = {\n key: joinColumn,\n table: joinTable,\n columns: Array.from(combinedColumns).map<SchemaColumn>((columnName) => ({\n name: columnName,\n serverDataType: getServerDataType(columnName, schema1, schema2),\n })),\n };\n\n const data: VuuRowDataItemType[][] = [];\n const combinedColumnMap = buildDataColumnMapFromSchema(combinedSchema);\n // const start = performance.now();\n for (const row of table1.data) {\n const row2 = table2.findByKey(String(row[k1]));\n if (row2) {\n const out = [];\n for (const column of table1.schema.columns) {\n const value = row[m1[column.name]];\n out[combinedColumnMap[column.name]] = value;\n }\n for (const column of table2.schema.columns) {\n const value = row2[m2[column.name]];\n out[combinedColumnMap[column.name]] = value;\n }\n\n data.push(out);\n }\n }\n // const end = performance.now();\n // console.log(`took ${end - start} ms to create join table ${joinTable.table}`);\n\n const newTable = new Table(combinedSchema, data, combinedColumnMap);\n\n table1.on(\"insert\", (row) => {\n const row2 = table2.findByKey(String(row[k1]));\n if (row2) {\n const out = [];\n for (const column of table1.schema.columns) {\n const value = row[m1[column.name]];\n out[combinedColumnMap[column.name]] = value;\n }\n for (const column of table2.schema.columns) {\n const value = row2[m2[column.name]];\n out[combinedColumnMap[column.name]] = value;\n }\n newTable.insert(out);\n }\n });\n\n table2.on(\"update\", (row) => {\n const keyValue = row[k2] as string;\n const targetRow = newTable.findByKey(keyValue);\n if (targetRow) {\n const updatedRow = targetRow.slice();\n for (const { name } of table2.schema.columns) {\n if (row[m2[name]] !== updatedRow[combinedColumnMap[name]]) {\n updatedRow[combinedColumnMap[name]] = row[m2[name]];\n }\n }\n newTable.updateRow(updatedRow);\n }\n });\n\n return newTable;\n};\n"],"names":["row"],"mappings":"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"}
@@ -1,206 +0,0 @@
1
- import { ArrayDataSource } from '@vuu-ui/vuu-data-local';
2
- import { isViewportRpcRequest, isVuuMenuRpcRequest, metadataKeys } from '@vuu-ui/vuu-utils';
3
- import { makeSuggestions } from './makeSuggestions.js';
4
-
5
- var __typeError = (msg) => {
6
- throw TypeError(msg);
7
- };
8
- var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
9
- var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), member.get(obj));
10
- 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);
11
- var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
12
- var _menuRpcServices, _pendingVisualLink, _rpcServices, _sessionTables, _table, _selectionLinkSubscribers, _visualLinkService, _getVisualLinks;
13
- const { KEY } = metadataKeys;
14
- class TickingArrayDataSource extends ArrayDataSource {
15
- constructor({
16
- data,
17
- getVisualLinks,
18
- menuRpcServices,
19
- rpcServices,
20
- sessionTables,
21
- table,
22
- menu,
23
- visualLink,
24
- visualLinkService,
25
- ...arrayDataSourceProps
26
- }) {
27
- if (data === void 0 && table === void 0) {
28
- throw Error("TickingArrayDataSource must be constructed with data");
29
- }
30
- super({
31
- ...arrayDataSourceProps,
32
- data: data ?? table?.data ?? []
33
- });
34
- __privateAdd(this, _menuRpcServices);
35
- __privateAdd(this, _pendingVisualLink);
36
- __privateAdd(this, _rpcServices);
37
- // A reference to session tables hosted within client side module
38
- __privateAdd(this, _sessionTables);
39
- __privateAdd(this, _table);
40
- __privateAdd(this, _selectionLinkSubscribers);
41
- __privateAdd(this, _visualLinkService);
42
- __privateAdd(this, _getVisualLinks);
43
- this._menu = menu;
44
- __privateSet(this, _menuRpcServices, menuRpcServices);
45
- __privateSet(this, _pendingVisualLink, visualLink);
46
- __privateSet(this, _rpcServices, rpcServices);
47
- __privateSet(this, _sessionTables, sessionTables);
48
- __privateSet(this, _table, table);
49
- __privateSet(this, _visualLinkService, visualLinkService);
50
- __privateSet(this, _getVisualLinks, getVisualLinks);
51
- if (table) {
52
- this.tableSchema = table.schema;
53
- table.on("insert", this.insert);
54
- table.on("update", this.updateRow);
55
- }
56
- }
57
- async subscribe(subscribeProps, callback) {
58
- const subscription = super.subscribe(subscribeProps, callback);
59
- if (__privateGet(this, _pendingVisualLink)) {
60
- this.visualLink = __privateGet(this, _pendingVisualLink);
61
- __privateSet(this, _pendingVisualLink, void 0);
62
- }
63
- return subscription;
64
- }
65
- unsubscribe() {
66
- super.unsubscribe();
67
- __privateSet(this, _table, void 0);
68
- }
69
- set range(range) {
70
- super.range = range;
71
- }
72
- get range() {
73
- return super.range;
74
- }
75
- set links(links) {
76
- super.links = links;
77
- }
78
- get links() {
79
- var _a;
80
- return (_a = __privateGet(this, _getVisualLinks)) == null ? void 0 : _a.call(this, this.table.table);
81
- }
82
- getSelectedRowIds() {
83
- return this.selectedRows.reduce(
84
- (rowIds, selection) => {
85
- if (Array.isArray(selection)) {
86
- for (let i = selection[0]; i <= selection[1]; i++) {
87
- const row = this.data[i];
88
- if (row) {
89
- rowIds.push(row[KEY]);
90
- }
91
- }
92
- } else {
93
- const row = this.data[selection];
94
- if (row) {
95
- rowIds.push(row[KEY]);
96
- }
97
- }
98
- return rowIds;
99
- },
100
- []
101
- );
102
- }
103
- applyEdit(rowKey, columnName, value) {
104
- __privateGet(this, _table)?.update(rowKey, columnName, value);
105
- return Promise.resolve(true);
106
- }
107
- async rpcCall(rpcRequest) {
108
- if (isViewportRpcRequest(rpcRequest)) {
109
- const rpcService = __privateGet(this, _rpcServices)?.find(
110
- (service) => service.rpcName === rpcRequest.rpcName
111
- );
112
- if (rpcService && isViewportRpcRequest(rpcRequest)) {
113
- switch (rpcRequest.rpcName) {
114
- case "VP_BULK_EDIT_COLUMN_CELLS_RPC": {
115
- return rpcService.service({
116
- ...rpcRequest,
117
- vpId: this.viewport
118
- });
119
- }
120
- }
121
- return rpcService.service({
122
- ...rpcRequest,
123
- namedParams: {
124
- selectedRowIds: this.getSelectedRowIds(),
125
- table: this.tableSchema.table
126
- },
127
- vpId: this.viewport
128
- });
129
- }
130
- }
131
- throw Error(`no implementation for PRC service ${rpcRequest.type}`);
132
- }
133
- async menuRpcCall(rpcRequest) {
134
- const rpcService = __privateGet(this, _rpcServices)?.find(
135
- (service) => service.rpcName === rpcRequest.rpcName
136
- );
137
- if (isVuuMenuRpcRequest(rpcRequest)) {
138
- return rpcService?.service({
139
- ...rpcRequest,
140
- namedParams: {
141
- selectedRowIds: this.getSelectedRowIds(),
142
- table: this.tableSchema.table
143
- },
144
- vpId: this.viewport
145
- });
146
- }
147
- return super.menuRpcCall(rpcRequest);
148
- }
149
- getTypeaheadSuggestions(column, pattern) {
150
- if (__privateGet(this, _table)) {
151
- return makeSuggestions(__privateGet(this, _table), column, pattern);
152
- } else {
153
- throw Error(
154
- "cannot call getTypeaheadSuggestions on TickingDataSource if table has not been provided"
155
- );
156
- }
157
- }
158
- get visualLink() {
159
- return this._config.visualLink;
160
- }
161
- set visualLink(visualLink) {
162
- var _a, _b;
163
- this._config = {
164
- ...this._config,
165
- visualLink
166
- };
167
- if (visualLink) {
168
- const {
169
- parentClientVpId,
170
- link: { fromColumn, toColumn }
171
- } = visualLink;
172
- if (this.viewport) {
173
- (_a = __privateGet(this, _visualLinkService)) == null ? void 0 : _a.call(this, {
174
- childVpId: this.viewport,
175
- childColumnName: fromColumn,
176
- type: "CREATE_VISUAL_LINK",
177
- parentVpId: parentClientVpId,
178
- parentColumnName: toColumn
179
- }).then((response) => {
180
- this.emit(
181
- "visual-link-created",
182
- response
183
- );
184
- });
185
- }
186
- } else {
187
- (_b = __privateGet(this, _visualLinkService)) == null ? void 0 : _b.call(this, {
188
- childVpId: this.viewport,
189
- type: "REMOVE_VISUAL_LINK"
190
- }).then(() => {
191
- this.emit("visual-link-removed");
192
- });
193
- }
194
- }
195
- }
196
- _menuRpcServices = new WeakMap();
197
- _pendingVisualLink = new WeakMap();
198
- _rpcServices = new WeakMap();
199
- _sessionTables = new WeakMap();
200
- _table = new WeakMap();
201
- _selectionLinkSubscribers = new WeakMap();
202
- _visualLinkService = new WeakMap();
203
- _getVisualLinks = new WeakMap();
204
-
205
- export { TickingArrayDataSource };
206
- //# sourceMappingURL=TickingArrayDataSource.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TickingArrayDataSource.js","sources":["../src/TickingArrayDataSource.ts"],"sourcesContent":["import {\n ArrayDataSource,\n ArrayDataSourceConstructorProps,\n} from \"@vuu-ui/vuu-data-local\";\nimport type {\n DataSourceVisualLinkCreatedMessage,\n SelectionItem,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n VuuRpcMenuRequest,\n LinkDescriptorWithLabel,\n RpcNamedParams,\n VuuMenu,\n VuuRowDataItemType,\n VuuRpcResponse,\n VuuRpcMenuResponse,\n VuuRpcRequest,\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n isViewportRpcRequest,\n isVuuMenuRpcRequest,\n metadataKeys,\n Range,\n} from \"@vuu-ui/vuu-utils\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport { Table } from \"./Table\";\nimport { RpcService, SessionTableMap } from \"./VuuModule\";\n\nconst { KEY } = metadataKeys;\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 menuRpcServices?: RpcService[];\n rpcServices?: RpcService[];\n sessionTables?: SessionTableMap;\n table?: Table;\n visualLinkService?: VisualLinkHandler;\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 #rpcServices: RpcService[] | undefined;\n // A reference to session tables hosted within client side module\n #sessionTables: SessionTableMap | undefined;\n #table?: Table;\n #selectionLinkSubscribers: Map<string, LinkSubscription> | undefined;\n #visualLinkService?: VisualLinkHandler;\n #getVisualLinks?: (\n tableName: string,\n ) => LinkDescriptorWithLabel[] | undefined;\n\n constructor({\n data,\n getVisualLinks,\n menuRpcServices,\n rpcServices,\n sessionTables,\n table,\n menu,\n visualLink,\n visualLinkService,\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 });\n this._menu = menu;\n\n this.#menuRpcServices = menuRpcServices;\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\n if (table) {\n this.tableSchema = table.schema;\n table.on(\"insert\", this.insert);\n table.on(\"update\", this.updateRow);\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 private getSelectedRowIds() {\n return this.selectedRows.reduce<string[]>(\n (rowIds: string[], selection: SelectionItem) => {\n if (Array.isArray(selection)) {\n for (let i = selection[0]; i <= selection[1]; i++) {\n const row = this.data[i];\n if (row) {\n rowIds.push(row[KEY]);\n }\n }\n } else {\n const row = this.data[selection];\n if (row) {\n rowIds.push(row[KEY]);\n }\n }\n return rowIds;\n },\n [],\n );\n }\n\n applyEdit(\n rowKey: string,\n columnName: string,\n value: VuuRowDataItemType,\n ): Promise<true> {\n this.#table?.update(rowKey, columnName, value);\n return Promise.resolve(true);\n }\n\n async rpcCall<T extends VuuRpcResponse = VuuRpcResponse>(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">,\n ): Promise<T> {\n if (isViewportRpcRequest(rpcRequest)) {\n const rpcService = this.#rpcServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n if (rpcService && isViewportRpcRequest(rpcRequest)) {\n switch (rpcRequest.rpcName) {\n case \"VP_BULK_EDIT_COLUMN_CELLS_RPC\": {\n return rpcService.service({\n ...rpcRequest,\n vpId: this.viewport,\n }) as Promise<T>;\n }\n }\n return rpcService.service({\n ...rpcRequest,\n namedParams: {\n selectedRowIds: this.getSelectedRowIds(),\n table: this.tableSchema.table,\n },\n vpId: this.viewport,\n }) as Promise<T>;\n }\n }\n throw Error(`no implementation for PRC service ${rpcRequest.type}`);\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\"> & {\n namedParams?: RpcNamedParams;\n },\n ): Promise<VuuRpcResponse> {\n const rpcService = this.#rpcServices?.find(\n (service) =>\n service.rpcName === (rpcRequest as VuuRpcMenuRequest).rpcName,\n );\n\n if (isVuuMenuRpcRequest(rpcRequest)) {\n return rpcService?.service({\n ...rpcRequest,\n namedParams: {\n selectedRowIds: this.getSelectedRowIds(),\n table: this.tableSchema.table,\n },\n vpId: this.viewport,\n }) as Promise<VuuRpcMenuResponse>;\n }\n\n return super.menuRpcCall(rpcRequest);\n }\n\n getTypeaheadSuggestions(column: string, pattern?: string): Promise<string[]> {\n if (this.#table) {\n return makeSuggestions(this.#table, column, pattern);\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"],"names":[],"mappings":"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"}
@@ -1,92 +0,0 @@
1
- import { random, generateNextBidAsk, nextRandomDouble } from './data-utils.js';
2
-
3
- var __defProp = Object.defineProperty;
4
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
6
- const getNewValue = (value) => {
7
- const multiplier = random(0, 100) / 1e3;
8
- const direction = random(0, 10) >= 5 ? 1 : -1;
9
- return value + value * multiplier * direction;
10
- };
11
- class BaseUpdateGenerator {
12
- constructor(tickingColumns) {
13
- __publicField(this, "table");
14
- __publicField(this, "range");
15
- __publicField(this, "updating", false);
16
- __publicField(this, "timer");
17
- __publicField(this, "tickingColumns");
18
- __publicField(this, "update", () => {
19
- if (this.range && this.table) {
20
- const data = this.table?.data;
21
- const { bid, ask, last, ...rest } = this.tickingColumns;
22
- if (data && data?.length > 0) {
23
- const maxRange = Math.min(this.range.to, data.length);
24
- for (let rowIndex = this.range.from; rowIndex < maxRange; rowIndex++) {
25
- let updateCount = 0;
26
- const shallUpdateRow = random(0, 10) < 2;
27
- if (shallUpdateRow) {
28
- const rowUpdates = this.table.data[rowIndex];
29
- const row = data[rowIndex];
30
- if (bid !== void 0 && ask !== void 0) {
31
- const { [bid]: currentBid, [ask]: currentAsk } = row;
32
- const [newBid, newAsk] = generateNextBidAsk(
33
- currentBid,
34
- currentAsk,
35
- 10,
36
- 5,
37
- nextRandomDouble
38
- );
39
- rowUpdates[ask] = newAsk;
40
- rowUpdates[bid] = newBid;
41
- if (last !== void 0) {
42
- const newLast = Math.round((currentAsk + (newAsk - currentAsk) / 2) * 100) / 100;
43
- rowUpdates[last] = newLast;
44
- }
45
- }
46
- for (const colIdx of Object.values(rest)) {
47
- const shallUpdateColumn = random(0, 10) < 5;
48
- if (shallUpdateColumn) {
49
- updateCount += 1;
50
- const newValue = getNewValue(row[colIdx]);
51
- if (this.table) {
52
- rowUpdates[colIdx] = newValue;
53
- }
54
- }
55
- }
56
- if (this.table && updateCount > 0) {
57
- this.table.updateRow(rowUpdates);
58
- }
59
- }
60
- }
61
- }
62
- }
63
- if (this.updating) {
64
- this.timer = window.setTimeout(this.update, 500);
65
- }
66
- });
67
- this.tickingColumns = tickingColumns;
68
- }
69
- setRange(range) {
70
- this.range = range;
71
- if (!this.updating && this.table) {
72
- this.startUpdating();
73
- }
74
- }
75
- setTable(table) {
76
- this.table = table;
77
- }
78
- startUpdating() {
79
- this.updating = true;
80
- this.update();
81
- }
82
- stopUpdating() {
83
- this.updating = false;
84
- if (this.timer) {
85
- window.clearTimeout(this.timer);
86
- this.timer = void 0;
87
- }
88
- }
89
- }
90
-
91
- export { BaseUpdateGenerator };
92
- //# sourceMappingURL=UpdateGenerator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UpdateGenerator.js","sources":["../src/UpdateGenerator.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport { generateNextBidAsk, nextRandomDouble, random } from \"./data-utils\";\nimport type { UpdateGenerator } from \"./rowUpdates\";\nimport { Table } from \"./Table\";\n\nconst getNewValue = (value: number) => {\n const multiplier = random(0, 100) / 1000;\n const direction = random(0, 10) >= 5 ? 1 : -1;\n return value + value * multiplier * direction;\n};\n\nexport class BaseUpdateGenerator implements UpdateGenerator {\n private table: Table | undefined;\n private range: VuuRange | undefined;\n private updating = false;\n private timer: number | undefined;\n private tickingColumns: { [key: string]: number };\n\n constructor(tickingColumns: { [key: string]: number }) {\n this.tickingColumns = tickingColumns;\n }\n\n setRange(range: VuuRange) {\n this.range = range;\n if (!this.updating && this.table) {\n this.startUpdating();\n }\n }\n\n setTable(table: Table) {\n this.table = table;\n }\n\n private startUpdating() {\n this.updating = true;\n this.update();\n }\n\n private stopUpdating() {\n this.updating = false;\n if (this.timer) {\n window.clearTimeout(this.timer);\n this.timer = undefined;\n }\n }\n\n update = () => {\n if (this.range && this.table) {\n const data = this.table?.data;\n const { bid, ask, last, ...rest } = this.tickingColumns;\n if (data && data?.length > 0) {\n const maxRange = Math.min(this.range.to, data.length);\n for (let rowIndex = this.range.from; rowIndex < maxRange; rowIndex++) {\n let updateCount = 0;\n const shallUpdateRow = random(0, 10) < 2;\n if (shallUpdateRow) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const rowUpdates = this.table.data[rowIndex];\n const row = data[rowIndex];\n\n if (bid !== undefined && ask !== undefined) {\n const { [bid]: currentBid, [ask]: currentAsk } = row as number[];\n const [newBid, newAsk] = generateNextBidAsk(\n currentBid,\n currentAsk,\n 10,\n 5,\n nextRandomDouble,\n );\n rowUpdates[ask] = newAsk;\n rowUpdates[bid] = newBid;\n if (last !== undefined) {\n const newLast =\n Math.round((currentAsk + (newAsk - currentAsk) / 2) * 100) /\n 100.0;\n rowUpdates[last] = newLast;\n }\n }\n\n for (const colIdx of Object.values(rest)) {\n const shallUpdateColumn = random(0, 10) < 5;\n if (shallUpdateColumn) {\n updateCount += 1;\n const newValue = getNewValue(row[colIdx] as number);\n if (this.table) {\n rowUpdates[colIdx] = newValue;\n }\n }\n }\n if (this.table && updateCount > 0) {\n this.table.updateRow(rowUpdates);\n }\n }\n }\n }\n }\n\n if (this.updating) {\n this.timer = window.setTimeout(this.update, 500);\n }\n };\n}\n"],"names":[],"mappings":"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"}