@vuu-ui/vuu-data-test 0.13.9 → 0.13.11

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/ArrayProxy.js +72 -0
  2. package/cjs/ArrayProxy.js.map +1 -0
  3. package/cjs/RuntimeVisualLink.js +89 -0
  4. package/cjs/RuntimeVisualLink.js.map +1 -0
  5. package/cjs/Table.js +184 -0
  6. package/cjs/Table.js.map +1 -0
  7. package/cjs/TickingArrayDataSource.js +208 -0
  8. package/cjs/TickingArrayDataSource.js.map +1 -0
  9. package/cjs/UpdateGenerator.js +94 -0
  10. package/cjs/UpdateGenerator.js.map +1 -0
  11. package/cjs/VuuModule.js +370 -0
  12. package/cjs/VuuModule.js.map +1 -0
  13. package/cjs/basket/basket-module.js +255 -0
  14. package/cjs/basket/basket-module.js.map +1 -0
  15. package/cjs/basket/basket-schemas.js +123 -0
  16. package/cjs/basket/basket-schemas.js.map +1 -0
  17. package/cjs/basket/reference-data/constituents.js +40 -0
  18. package/cjs/basket/reference-data/constituents.js.map +1 -0
  19. package/cjs/basket/reference-data/ftse100.js +105 -0
  20. package/cjs/basket/reference-data/ftse100.js.map +1 -0
  21. package/cjs/basket/reference-data/hsi.js +87 -0
  22. package/cjs/basket/reference-data/hsi.js.map +1 -0
  23. package/cjs/basket/reference-data/nasdaq100.js +108 -0
  24. package/cjs/basket/reference-data/nasdaq100.js.map +1 -0
  25. package/cjs/basket/reference-data/prices.js +54 -0
  26. package/cjs/basket/reference-data/prices.js.map +1 -0
  27. package/cjs/basket/reference-data/sp500.js +46 -0
  28. package/cjs/basket/reference-data/sp500.js.map +1 -0
  29. package/cjs/data-utils.js +57 -0
  30. package/cjs/data-utils.js.map +1 -0
  31. package/cjs/index.js +46 -3047
  32. package/cjs/index.js.map +1 -1
  33. package/cjs/local-datasource-provider/LocalDatasourceProvider.js +84 -0
  34. package/cjs/local-datasource-provider/LocalDatasourceProvider.js.map +1 -0
  35. package/cjs/makeSuggestions.js +43 -0
  36. package/cjs/makeSuggestions.js.map +1 -0
  37. package/cjs/schemas.js +28 -0
  38. package/cjs/schemas.js.map +1 -0
  39. package/cjs/simul/SimulModule.js +24 -0
  40. package/cjs/simul/SimulModule.js.map +1 -0
  41. package/cjs/simul/reference-data/accounts.js +27 -0
  42. package/cjs/simul/reference-data/accounts.js.map +1 -0
  43. package/cjs/simul/reference-data/algos.js +6 -0
  44. package/cjs/simul/reference-data/algos.js.map +1 -0
  45. package/cjs/simul/reference-data/currencies.js +6 -0
  46. package/cjs/simul/reference-data/currencies.js.map +1 -0
  47. package/cjs/simul/reference-data/instruments-extended.js +18 -0
  48. package/cjs/simul/reference-data/instruments-extended.js.map +1 -0
  49. package/cjs/simul/reference-data/instruments.js +77 -0
  50. package/cjs/simul/reference-data/instruments.js.map +1 -0
  51. package/cjs/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js +6 -0
  52. package/cjs/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js.map +1 -0
  53. package/cjs/simul/reference-data/isin-generator/fixtures/alphabet.js +31 -0
  54. package/cjs/simul/reference-data/isin-generator/fixtures/alphabet.js.map +1 -0
  55. package/cjs/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js +9 -0
  56. package/cjs/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js.map +1 -0
  57. package/cjs/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js +17 -0
  58. package/cjs/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js.map +1 -0
  59. package/cjs/simul/reference-data/isin-generator/generate-cusip-check-code.js +24 -0
  60. package/cjs/simul/reference-data/isin-generator/generate-cusip-check-code.js.map +1 -0
  61. package/cjs/simul/reference-data/isin-generator/generate-cusip-without-check-code.js +13 -0
  62. package/cjs/simul/reference-data/isin-generator/generate-cusip-without-check-code.js.map +1 -0
  63. package/cjs/simul/reference-data/isin-generator/generate-cusip.js +13 -0
  64. package/cjs/simul/reference-data/isin-generator/generate-cusip.js.map +1 -0
  65. package/cjs/simul/reference-data/isin-generator/generate-random-alphanumeric.js +8 -0
  66. package/cjs/simul/reference-data/isin-generator/generate-random-alphanumeric.js.map +1 -0
  67. package/cjs/simul/reference-data/isin-generator/generate-random-base-ten-number.js +6 -0
  68. package/cjs/simul/reference-data/isin-generator/generate-random-base-ten-number.js.map +1 -0
  69. package/cjs/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js +14 -0
  70. package/cjs/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js.map +1 -0
  71. package/cjs/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js +14 -0
  72. package/cjs/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js.map +1 -0
  73. package/cjs/simul/reference-data/isin-generator/index.js +295 -0
  74. package/cjs/simul/reference-data/isin-generator/index.js.map +1 -0
  75. package/cjs/simul/reference-data/isin-generator/is-odd.js +6 -0
  76. package/cjs/simul/reference-data/isin-generator/is-odd.js.map +1 -0
  77. package/cjs/simul/reference-data/locations.js +17 -0
  78. package/cjs/simul/reference-data/locations.js.map +1 -0
  79. package/cjs/simul/reference-data/lotsizes.js +28 -0
  80. package/cjs/simul/reference-data/lotsizes.js.map +1 -0
  81. package/cjs/simul/reference-data/orderStatus.js +6 -0
  82. package/cjs/simul/reference-data/orderStatus.js.map +1 -0
  83. package/cjs/simul/reference-data/orders.js +54 -0
  84. package/cjs/simul/reference-data/orders.js.map +1 -0
  85. package/cjs/simul/reference-data/parent-child-orders.js +122 -0
  86. package/cjs/simul/reference-data/parent-child-orders.js.map +1 -0
  87. package/cjs/simul/reference-data/prices.js +71 -0
  88. package/cjs/simul/reference-data/prices.js.map +1 -0
  89. package/cjs/simul/reference-data/sides.js +6 -0
  90. package/cjs/simul/reference-data/sides.js.map +1 -0
  91. package/cjs/simul/simul-module.js +126 -0
  92. package/cjs/simul/simul-module.js.map +1 -0
  93. package/cjs/simul/simul-schemas.js +142 -0
  94. package/cjs/simul/simul-schemas.js.map +1 -0
  95. package/cjs/test/test-module.js +26 -0
  96. package/cjs/test/test-module.js.map +1 -0
  97. package/cjs/test/test-schemas.js +17 -0
  98. package/cjs/test/test-schemas.js.map +1 -0
  99. package/cjs/vuu-modules.js +15 -0
  100. package/cjs/vuu-modules.js.map +1 -0
  101. package/cjs/vuu-row-generator.js +74 -0
  102. package/cjs/vuu-row-generator.js.map +1 -0
  103. package/esm/ArrayProxy.js +70 -0
  104. package/esm/ArrayProxy.js.map +1 -0
  105. package/esm/RuntimeVisualLink.js +87 -0
  106. package/esm/RuntimeVisualLink.js.map +1 -0
  107. package/esm/Table.js +179 -0
  108. package/esm/Table.js.map +1 -0
  109. package/esm/TickingArrayDataSource.js +206 -0
  110. package/esm/TickingArrayDataSource.js.map +1 -0
  111. package/esm/UpdateGenerator.js +92 -0
  112. package/esm/UpdateGenerator.js.map +1 -0
  113. package/esm/VuuModule.js +366 -0
  114. package/esm/VuuModule.js.map +1 -0
  115. package/esm/basket/basket-module.js +251 -0
  116. package/esm/basket/basket-module.js.map +1 -0
  117. package/esm/basket/basket-schemas.js +120 -0
  118. package/esm/basket/basket-schemas.js.map +1 -0
  119. package/esm/basket/reference-data/constituents.js +38 -0
  120. package/esm/basket/reference-data/constituents.js.map +1 -0
  121. package/esm/basket/reference-data/ftse100.js +103 -0
  122. package/esm/basket/reference-data/ftse100.js.map +1 -0
  123. package/esm/basket/reference-data/hsi.js +85 -0
  124. package/esm/basket/reference-data/hsi.js.map +1 -0
  125. package/esm/basket/reference-data/nasdaq100.js +106 -0
  126. package/esm/basket/reference-data/nasdaq100.js.map +1 -0
  127. package/esm/basket/reference-data/prices.js +52 -0
  128. package/esm/basket/reference-data/prices.js.map +1 -0
  129. package/esm/basket/reference-data/sp500.js +44 -0
  130. package/esm/basket/reference-data/sp500.js.map +1 -0
  131. package/esm/data-utils.js +52 -0
  132. package/esm/data-utils.js.map +1 -0
  133. package/esm/index.js +14 -3019
  134. package/esm/index.js.map +1 -1
  135. package/esm/local-datasource-provider/LocalDatasourceProvider.js +82 -0
  136. package/esm/local-datasource-provider/LocalDatasourceProvider.js.map +1 -0
  137. package/esm/makeSuggestions.js +41 -0
  138. package/esm/makeSuggestions.js.map +1 -0
  139. package/esm/schemas.js +24 -0
  140. package/esm/schemas.js.map +1 -0
  141. package/esm/simul/SimulModule.js +22 -0
  142. package/esm/simul/SimulModule.js.map +1 -0
  143. package/esm/simul/reference-data/accounts.js +25 -0
  144. package/esm/simul/reference-data/accounts.js.map +1 -0
  145. package/esm/simul/reference-data/algos.js +4 -0
  146. package/esm/simul/reference-data/algos.js.map +1 -0
  147. package/esm/simul/reference-data/currencies.js +4 -0
  148. package/esm/simul/reference-data/currencies.js.map +1 -0
  149. package/esm/simul/reference-data/instruments-extended.js +16 -0
  150. package/esm/simul/reference-data/instruments-extended.js.map +1 -0
  151. package/esm/simul/reference-data/instruments.js +72 -0
  152. package/esm/simul/reference-data/instruments.js.map +1 -0
  153. package/esm/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js +4 -0
  154. package/esm/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js.map +1 -0
  155. package/esm/simul/reference-data/isin-generator/fixtures/alphabet.js +29 -0
  156. package/esm/simul/reference-data/isin-generator/fixtures/alphabet.js.map +1 -0
  157. package/esm/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js +7 -0
  158. package/esm/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js.map +1 -0
  159. package/esm/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js +15 -0
  160. package/esm/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js.map +1 -0
  161. package/esm/simul/reference-data/isin-generator/generate-cusip-check-code.js +22 -0
  162. package/esm/simul/reference-data/isin-generator/generate-cusip-check-code.js.map +1 -0
  163. package/esm/simul/reference-data/isin-generator/generate-cusip-without-check-code.js +11 -0
  164. package/esm/simul/reference-data/isin-generator/generate-cusip-without-check-code.js.map +1 -0
  165. package/esm/simul/reference-data/isin-generator/generate-cusip.js +11 -0
  166. package/esm/simul/reference-data/isin-generator/generate-cusip.js.map +1 -0
  167. package/esm/simul/reference-data/isin-generator/generate-random-alphanumeric.js +6 -0
  168. package/esm/simul/reference-data/isin-generator/generate-random-alphanumeric.js.map +1 -0
  169. package/esm/simul/reference-data/isin-generator/generate-random-base-ten-number.js +4 -0
  170. package/esm/simul/reference-data/isin-generator/generate-random-base-ten-number.js.map +1 -0
  171. package/esm/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js +12 -0
  172. package/esm/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js.map +1 -0
  173. package/esm/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js +12 -0
  174. package/esm/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js.map +1 -0
  175. package/esm/simul/reference-data/isin-generator/index.js +293 -0
  176. package/esm/simul/reference-data/isin-generator/index.js.map +1 -0
  177. package/esm/simul/reference-data/isin-generator/is-odd.js +4 -0
  178. package/esm/simul/reference-data/isin-generator/is-odd.js.map +1 -0
  179. package/esm/simul/reference-data/locations.js +14 -0
  180. package/esm/simul/reference-data/locations.js.map +1 -0
  181. package/esm/simul/reference-data/lotsizes.js +26 -0
  182. package/esm/simul/reference-data/lotsizes.js.map +1 -0
  183. package/esm/simul/reference-data/orderStatus.js +4 -0
  184. package/esm/simul/reference-data/orderStatus.js.map +1 -0
  185. package/esm/simul/reference-data/orders.js +51 -0
  186. package/esm/simul/reference-data/orders.js.map +1 -0
  187. package/esm/simul/reference-data/parent-child-orders.js +117 -0
  188. package/esm/simul/reference-data/parent-child-orders.js.map +1 -0
  189. package/esm/simul/reference-data/prices.js +68 -0
  190. package/esm/simul/reference-data/prices.js.map +1 -0
  191. package/esm/simul/reference-data/sides.js +4 -0
  192. package/esm/simul/reference-data/sides.js.map +1 -0
  193. package/esm/simul/simul-module.js +124 -0
  194. package/esm/simul/simul-module.js.map +1 -0
  195. package/esm/simul/simul-schemas.js +139 -0
  196. package/esm/simul/simul-schemas.js.map +1 -0
  197. package/esm/test/test-module.js +24 -0
  198. package/esm/test/test-module.js.map +1 -0
  199. package/esm/test/test-schemas.js +15 -0
  200. package/esm/test/test-schemas.js.map +1 -0
  201. package/esm/vuu-modules.js +13 -0
  202. package/esm/vuu-modules.js.map +1 -0
  203. package/esm/vuu-row-generator.js +68 -0
  204. package/esm/vuu-row-generator.js.map +1 -0
  205. package/package.json +6 -6
@@ -0,0 +1,366 @@
1
+ import { uuid, isViewportRpcRequest } from '@vuu-ui/vuu-utils';
2
+ import { Table, buildDataColumnMapFromSchema } from './Table.js';
3
+ import { TickingArrayDataSource } from './TickingArrayDataSource.js';
4
+ import { makeSuggestions } from './makeSuggestions.js';
5
+ import { RuntimeVisualLink } from './RuntimeVisualLink.js';
6
+
7
+ var __defProp = Object.defineProperty;
8
+ var __typeError = (msg) => {
9
+ throw TypeError(msg);
10
+ };
11
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
13
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
14
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
15
+ 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);
16
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
17
+ var _menus, _name, _runtimeVisualLinks, _schemas, _sessionTableMap, _tables, _tableServices, _visualLinks, _subscriptionMap, _moduleServices;
18
+ const withParams = (rpcRequest) => "namedParams" in rpcRequest;
19
+ const withNamedParams = (rpcRequest) => "namedParams" in rpcRequest;
20
+ class VuuModule {
21
+ constructor({
22
+ menus,
23
+ name,
24
+ schemas,
25
+ services,
26
+ tables,
27
+ vuuLinks: visualLinks
28
+ }) {
29
+ __privateAdd(this, _menus);
30
+ __privateAdd(this, _name);
31
+ __privateAdd(this, _runtimeVisualLinks, /* @__PURE__ */ new Map());
32
+ __privateAdd(this, _schemas);
33
+ __privateAdd(this, _sessionTableMap, {});
34
+ __privateAdd(this, _tables);
35
+ __privateAdd(this, _tableServices);
36
+ __privateAdd(this, _visualLinks);
37
+ __privateAdd(this, _subscriptionMap, /* @__PURE__ */ new Map());
38
+ __publicField(this, "unregisterViewport", (viewportId) => {
39
+ for (const [tableName, subscriptions] of __privateGet(this, _subscriptionMap)) {
40
+ if (subscriptions[0].viewportId.toString() === viewportId) {
41
+ __privateGet(this, _subscriptionMap).delete(tableName);
42
+ } else {
43
+ const links = subscriptions[0].dataSource.links;
44
+ if (links) {
45
+ for (let i = 0; i < links?.length; i++) {
46
+ if (links[i].parentClientVpId === viewportId) {
47
+ links.splice(i);
48
+ }
49
+ }
50
+ }
51
+ subscriptions[0].dataSource.links = links;
52
+ }
53
+ }
54
+ });
55
+ __publicField(this, "getLinks", (subscriptionMap, vuuLinks) => {
56
+ const visualLinks = [];
57
+ for (let i = 0; i < vuuLinks.length; i++) {
58
+ const subscriptions = subscriptionMap.get(vuuLinks[i].toTable);
59
+ if (subscriptions) {
60
+ subscriptions.forEach(({ viewportId, dataSource: { status } }) => {
61
+ if (status !== "suspended") {
62
+ const newLink = {
63
+ parentClientVpId: viewportId,
64
+ parentVpId: viewportId,
65
+ link: vuuLinks[i]
66
+ };
67
+ visualLinks.push(newLink);
68
+ }
69
+ });
70
+ }
71
+ }
72
+ return visualLinks;
73
+ });
74
+ __publicField(this, "visualLinkService", (message) => new Promise((resolve) => {
75
+ if (message.type === "CREATE_VISUAL_LINK") {
76
+ const { childColumnName, childVpId, parentColumnName, parentVpId } = message;
77
+ const childDataSource = this.getSubscribedDataSource(childVpId);
78
+ const parentDataSource = this.getSubscribedDataSource(parentVpId);
79
+ const runtimeVisualLink = new RuntimeVisualLink(
80
+ childDataSource,
81
+ parentDataSource,
82
+ childColumnName,
83
+ parentColumnName
84
+ );
85
+ __privateGet(this, _runtimeVisualLinks).set(childVpId, runtimeVisualLink);
86
+ resolve({
87
+ clientViewportId: childVpId,
88
+ colName: childColumnName,
89
+ parentColName: parentColumnName,
90
+ parentViewportId: parentVpId,
91
+ type: "vuu-link-created"
92
+ });
93
+ } else {
94
+ const runtimeVisualLink = __privateGet(this, _runtimeVisualLinks).get(
95
+ message.childVpId
96
+ );
97
+ if (runtimeVisualLink) {
98
+ runtimeVisualLink.remove();
99
+ __privateGet(this, _runtimeVisualLinks).delete(message.childVpId);
100
+ } else {
101
+ throw Error(
102
+ `visualLinkService no visual link found for viewport #${message.childVpId}`
103
+ );
104
+ }
105
+ resolve();
106
+ }
107
+ }));
108
+ __publicField(this, "createDataSource", (tableName, viewport, config) => {
109
+ const getVisualLinks = (tableName2) => {
110
+ const linksForTable = __privateGet(this, _visualLinks)?.[tableName2];
111
+ return linksForTable === void 0 ? void 0 : this.getLinks(__privateGet(this, _subscriptionMap), linksForTable);
112
+ };
113
+ const columnDescriptors = this.getColumnDescriptors(tableName);
114
+ const table = __privateGet(this, _tables)[tableName];
115
+ const sessionTable = __privateGet(this, _sessionTableMap)[tableName];
116
+ const dataSource = new TickingArrayDataSource({
117
+ ...config,
118
+ columnDescriptors,
119
+ getVisualLinks,
120
+ keyColumn: __privateGet(this, _schemas)[tableName] === void 0 ? __privateGet(this, _sessionTableMap)[tableName].schema.key : __privateGet(this, _schemas)[tableName].key,
121
+ table: table || sessionTable,
122
+ menu: __privateGet(this, _menus)?.[tableName],
123
+ rpcServices: this.getServices(tableName),
124
+ sessionTables: __privateGet(this, _sessionTableMap),
125
+ viewport,
126
+ visualLinkService: this.visualLinkService
127
+ });
128
+ dataSource.on("unsubscribed", this.unregisterViewport);
129
+ const existingSubscriptions = __privateGet(this, _subscriptionMap).get(tableName);
130
+ const subscription = {
131
+ viewportId: dataSource.viewport,
132
+ dataSource
133
+ };
134
+ if (existingSubscriptions) {
135
+ existingSubscriptions.push(subscription);
136
+ } else {
137
+ __privateGet(this, _subscriptionMap).set(tableName, [subscription]);
138
+ }
139
+ return dataSource;
140
+ });
141
+ __publicField(this, "suggestionFetcher", ([
142
+ vuuTable,
143
+ column,
144
+ pattern
145
+ ]) => {
146
+ const table = __privateGet(this, _tables)[vuuTable.table];
147
+ if (table) {
148
+ return makeSuggestions(table, column, pattern);
149
+ } else {
150
+ throw Error(
151
+ `${__privateGet(this, _name)} suggestionFetcher, unknown table ${vuuTable.module} ${vuuTable.table}`
152
+ );
153
+ }
154
+ });
155
+ __publicField(this, "openBulkEdits", async (rpcRequest) => {
156
+ if (withParams(rpcRequest)) {
157
+ const { namedParams, vpId } = rpcRequest;
158
+ const selectedRowIds = namedParams.selectedRowIds;
159
+ const table = namedParams.table;
160
+ if (selectedRowIds && table) {
161
+ const dataTable = __privateGet(this, _tables)[table.table];
162
+ if (dataTable) {
163
+ const sessionTable = this.createSessionTableFromSelectedRows(
164
+ dataTable,
165
+ selectedRowIds
166
+ );
167
+ const sessionTableName = `session-${uuid()}`;
168
+ __privateGet(this, _sessionTableMap)[sessionTableName] = sessionTable;
169
+ return {
170
+ action: {
171
+ renderComponent: "grid",
172
+ table: {
173
+ module: table.module,
174
+ table: sessionTableName
175
+ },
176
+ tableSchema: dataTable.schema,
177
+ type: "OPEN_DIALOG_ACTION"
178
+ },
179
+ rpcName: "VP_BULK_EDIT_BEGIN_RPC",
180
+ type: "VIEW_PORT_MENU_RESP",
181
+ vpId
182
+ };
183
+ } else {
184
+ return {
185
+ action: { type: "NO_ACTION" },
186
+ clientViewportId: "na",
187
+ error: "No Table found",
188
+ rpcName: "VP_BULK_EDIT_REJECT",
189
+ type: "VIEW_PORT_MENU_REJ",
190
+ vpId
191
+ };
192
+ }
193
+ }
194
+ }
195
+ throw Error("openBulkEdits expects Table and selectedRowIds");
196
+ });
197
+ __publicField(this, "endEditSession", async (rpcRequest) => {
198
+ if (isViewportRpcRequest(rpcRequest)) {
199
+ const { vpId } = rpcRequest;
200
+ delete __privateGet(this, _sessionTableMap)[vpId];
201
+ return {
202
+ action: { type: "VP_RPC_SUCCESS" },
203
+ method: "???",
204
+ namedParams: {},
205
+ params: [],
206
+ type: "VIEW_PORT_RPC_REPONSE",
207
+ vpId
208
+ };
209
+ } else {
210
+ throw Error("endEditSession invalid request");
211
+ }
212
+ });
213
+ // Bulk-edit with input in session table
214
+ __publicField(this, "applyBulkEdits", async (rpcRequest) => {
215
+ if (withParams(rpcRequest)) {
216
+ const { vpId } = rpcRequest;
217
+ const sessionTable = this.getSessionTable(vpId);
218
+ for (let i = 0; i < sessionTable.data.length; i++) {
219
+ const newRow = sessionTable.data[i];
220
+ const { column, value } = rpcRequest.namedParams;
221
+ const keyIndex = sessionTable.map[sessionTable.schema.key];
222
+ sessionTable.update(
223
+ String(newRow[keyIndex]),
224
+ column,
225
+ value
226
+ );
227
+ }
228
+ return {
229
+ action: {
230
+ type: "NO_ACTION"
231
+ },
232
+ rpcName: "VP_BULK_EDIT_COLUMN_CELLS_RPC",
233
+ type: "VIEW_PORT_MENU_RESP",
234
+ vpId
235
+ };
236
+ }
237
+ throw Error("applyBulkEdits expects column and value as namedParams");
238
+ });
239
+ // Save session table data to main table
240
+ __publicField(this, "saveBulkEdits", async (rpcRequest) => {
241
+ if (withParams(rpcRequest)) {
242
+ const { vpId } = rpcRequest;
243
+ const sessionTable = this.getSessionTable(vpId);
244
+ const { table } = sessionTable.schema.table;
245
+ const baseTable = __privateGet(this, _tables)[table];
246
+ if (baseTable) {
247
+ for (let i = 0; i < sessionTable.data.length; i++) {
248
+ const newRow = sessionTable.data[i];
249
+ baseTable.updateRow(newRow);
250
+ }
251
+ return {
252
+ action: {
253
+ type: "VP_RPC_SUCCESS"
254
+ },
255
+ requestId: "request_id",
256
+ rpcName: "VP_BULK_EDIT_SUBMIT_RPC",
257
+ type: "VIEW_PORT_MENU_RESP",
258
+ vpId
259
+ };
260
+ }
261
+ }
262
+ throw Error("saveBulkEdits base table not found");
263
+ });
264
+ /**
265
+ * These services are available on any table. The client must configure the appropriate
266
+ * menu item(s) on Table(s). The services to implement these RPC calls are built-in to
267
+ * VuuModule
268
+ */
269
+ __privateAdd(this, _moduleServices, [
270
+ {
271
+ rpcName: "VP_BULK_EDIT_BEGIN_RPC",
272
+ service: this.openBulkEdits
273
+ },
274
+ {
275
+ rpcName: "VP_BULK_EDIT_COLUMN_CELLS_RPC",
276
+ service: this.applyBulkEdits
277
+ },
278
+ {
279
+ rpcName: "VP_BULK_EDIT_SUBMIT_RPC",
280
+ service: this.saveBulkEdits
281
+ },
282
+ {
283
+ rpcName: "VP_BULK_EDIT_END_RPC",
284
+ service: this.endEditSession
285
+ }
286
+ ]);
287
+ __privateSet(this, _menus, menus);
288
+ __privateSet(this, _name, name);
289
+ __privateSet(this, _schemas, schemas);
290
+ __privateSet(this, _tableServices, services);
291
+ __privateSet(this, _tables, tables);
292
+ __privateSet(this, _visualLinks, visualLinks);
293
+ }
294
+ getSubscribedDataSource(vpId) {
295
+ for (const subscriptions of __privateGet(this, _subscriptionMap).values()) {
296
+ for (const { viewportId, dataSource } of subscriptions) {
297
+ if (viewportId === vpId) {
298
+ return dataSource;
299
+ }
300
+ }
301
+ }
302
+ throw Error(`getSubscribedDataSource #${vpId} not in subscriptionMap`);
303
+ }
304
+ getServices(tableName) {
305
+ const tableServices = __privateGet(this, _tableServices)?.[tableName];
306
+ if (Array.isArray(tableServices)) {
307
+ return __privateGet(this, _moduleServices).concat(tableServices);
308
+ } else {
309
+ return __privateGet(this, _moduleServices);
310
+ }
311
+ }
312
+ get typeaheadHook() {
313
+ return () => this.suggestionFetcher;
314
+ }
315
+ get sessionTableMap() {
316
+ return __privateGet(this, _sessionTableMap);
317
+ }
318
+ get tables() {
319
+ return __privateGet(this, _tables);
320
+ }
321
+ getSessionTable(sessionTableName) {
322
+ const sessionTable = __privateGet(this, _sessionTableMap)[sessionTableName];
323
+ if (sessionTable) {
324
+ return sessionTable;
325
+ } else {
326
+ throw Error(
327
+ `getSessionTable: no session table with name ${sessionTableName}`
328
+ );
329
+ }
330
+ }
331
+ getColumnDescriptors(tableName) {
332
+ const schema = __privateGet(this, _schemas)[tableName] || this.getSessionTable(tableName)?.schema;
333
+ if (schema) {
334
+ return schema.columns;
335
+ } else {
336
+ throw Error(
337
+ ` no schema found for module ${__privateGet(this, _name)} table ${tableName}`
338
+ );
339
+ }
340
+ }
341
+ createSessionTableFromSelectedRows({ data, map, schema }, selectedRowIds) {
342
+ const keyIndex = map[schema.key];
343
+ const sessionData = [];
344
+ for (let i = 0; i < selectedRowIds.length; i++) {
345
+ for (let j = 0; j < data.length; j++) {
346
+ if (data[j][keyIndex] === selectedRowIds[i]) {
347
+ sessionData.push(data[j]);
348
+ }
349
+ }
350
+ }
351
+ return new Table(schema, sessionData, buildDataColumnMapFromSchema(schema));
352
+ }
353
+ }
354
+ _menus = new WeakMap();
355
+ _name = new WeakMap();
356
+ _runtimeVisualLinks = new WeakMap();
357
+ _schemas = new WeakMap();
358
+ _sessionTableMap = new WeakMap();
359
+ _tables = new WeakMap();
360
+ _tableServices = new WeakMap();
361
+ _visualLinks = new WeakMap();
362
+ _subscriptionMap = new WeakMap();
363
+ _moduleServices = new WeakMap();
364
+
365
+ export { VuuModule, withNamedParams, withParams };
366
+ //# sourceMappingURL=VuuModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VuuModule.js","sources":["../src/VuuModule.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceConfig,\n DataSourceVisualLinkCreatedMessage,\n OpenDialogActionWithSchema,\n SuggestionFetcher,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuRpcMenuRequest,\n VuuRpcViewportRequest,\n TypeaheadParams,\n VuuMenu,\n VuuRowDataItemType,\n VuuTable,\n VuuLink,\n LinkDescriptorWithLabel,\n RpcNamedParams,\n VuuRpcRequest,\n VuuRpcResponse,\n VuuRpcMenuResponse,\n VuuRpcViewportResponse,\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { isViewportRpcRequest, uuid } from \"@vuu-ui/vuu-utils\";\nimport { Table, buildDataColumnMapFromSchema } from \"./Table\";\nimport { TickingArrayDataSource } from \"./TickingArrayDataSource\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport { RuntimeVisualLink } from \"./RuntimeVisualLink\";\n\nexport interface IVuuModule<T extends string = string> {\n createDataSource: (tableName: T) => DataSource;\n typeaheadHook: () => SuggestionFetcher;\n}\n\nexport interface VuuModuleConstructorProps<T extends string = string> {\n menus?: Record<T, VuuMenu | undefined>;\n name: string;\n schemas: Record<T, Readonly<TableSchema>>;\n services?: Record<T, RpcService[] | undefined>;\n tables: Record<T, Table>;\n vuuLinks?: Record<T, VuuLink[] | undefined>;\n}\n\nexport type SessionTableMap = Record<string, Table>;\n\nexport type RpcServiceRequestWithParams = VuuRpcViewportRequest & {\n namedParams: RpcNamedParams;\n};\nexport type RpcServiceRequest =\n | RpcServiceRequestWithParams\n | VuuRpcViewportRequest\n | VuuRpcMenuRequest;\n\nexport const withParams = (\n rpcRequest: VuuRpcRequest,\n): rpcRequest is RpcServiceRequestWithParams => \"namedParams\" in rpcRequest;\n\nexport const withNamedParams = (\n rpcRequest: RpcServiceRequest,\n): rpcRequest is RpcServiceRequestWithParams => \"namedParams\" in rpcRequest;\n\nexport type ServiceHandler = (\n rpcRequest: VuuRpcRequest & {\n namedParams?: RpcNamedParams;\n },\n) => Promise<VuuRpcResponse>;\n\nexport type RpcService = {\n rpcName: string;\n service: ServiceHandler;\n};\n\ntype Subscription = {\n viewportId: string;\n dataSource: DataSource;\n};\nexport class VuuModule<T extends string = string> implements IVuuModule<T> {\n #menus: Record<T, VuuMenu | undefined> | undefined;\n #name: string;\n #runtimeVisualLinks = new Map<string, RuntimeVisualLink>();\n #schemas: Record<T, Readonly<TableSchema>>;\n #sessionTableMap: SessionTableMap = {};\n #tables: Record<T, Table>;\n #tableServices: Record<T, RpcService[] | undefined> | undefined;\n #visualLinks: Record<T, VuuLink[] | undefined> | undefined;\n #subscriptionMap: Map<string, Subscription[]> = new Map();\n\n constructor({\n menus,\n name,\n schemas,\n services,\n tables,\n vuuLinks: visualLinks,\n }: VuuModuleConstructorProps<T>) {\n this.#menus = menus;\n this.#name = name;\n this.#schemas = schemas;\n this.#tableServices = services;\n this.#tables = tables;\n this.#visualLinks = visualLinks;\n }\n\n private unregisterViewport = (viewportId: string) => {\n for (const [tableName, subscriptions] of this.#subscriptionMap) {\n if (subscriptions[0].viewportId.toString() === viewportId) {\n this.#subscriptionMap.delete(tableName);\n } else {\n const links = subscriptions[0].dataSource.links;\n if (links) {\n for (let i = 0; i < links?.length; i++) {\n if (links[i].parentClientVpId === viewportId) {\n links.splice(i);\n }\n }\n }\n subscriptions[0].dataSource.links = links;\n }\n }\n };\n\n getSubscribedDataSource(vpId: string): DataSource {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { viewportId, dataSource } of subscriptions) {\n if (viewportId === vpId) {\n return dataSource;\n }\n }\n }\n throw Error(`getSubscribedDataSource #${vpId} not in subscriptionMap`);\n }\n\n getLinks = (\n subscriptionMap: Map<string, Subscription[]>,\n vuuLinks: VuuLink[],\n ) => {\n const visualLinks: LinkDescriptorWithLabel[] = [];\n for (let i = 0; i < vuuLinks.length; i++) {\n const subscriptions = subscriptionMap.get(vuuLinks[i].toTable);\n if (subscriptions) {\n subscriptions.forEach(({ viewportId, dataSource: { status } }) => {\n if (status !== \"suspended\") {\n const newLink: LinkDescriptorWithLabel = {\n parentClientVpId: viewportId,\n parentVpId: viewportId,\n link: vuuLinks[i],\n };\n visualLinks.push(newLink);\n }\n });\n }\n }\n return visualLinks;\n };\n\n visualLinkService = (\n message: VuuCreateVisualLink | VuuRemoveVisualLink,\n ): Promise<DataSourceVisualLinkCreatedMessage | void> =>\n new Promise((resolve) => {\n if (message.type === \"CREATE_VISUAL_LINK\") {\n const { childColumnName, childVpId, parentColumnName, parentVpId } =\n message;\n const childDataSource = this.getSubscribedDataSource(childVpId);\n const parentDataSource = this.getSubscribedDataSource(parentVpId);\n const runtimeVisualLink = new RuntimeVisualLink(\n childDataSource,\n parentDataSource,\n childColumnName,\n parentColumnName,\n );\n\n this.#runtimeVisualLinks.set(childVpId, runtimeVisualLink);\n\n resolve({\n clientViewportId: childVpId,\n colName: childColumnName,\n parentColName: parentColumnName,\n parentViewportId: parentVpId,\n type: \"vuu-link-created\",\n } as DataSourceVisualLinkCreatedMessage);\n } else {\n const runtimeVisualLink = this.#runtimeVisualLinks.get(\n message.childVpId,\n );\n if (runtimeVisualLink) {\n runtimeVisualLink.remove();\n this.#runtimeVisualLinks.delete(message.childVpId);\n } else {\n throw Error(\n `visualLinkService no visual link found for viewport #${message.childVpId}`,\n );\n }\n resolve();\n }\n });\n\n createDataSource = (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => {\n const getVisualLinks = (tableName: string) => {\n const linksForTable = this.#visualLinks?.[tableName as T] as VuuLink[];\n return linksForTable === undefined\n ? undefined\n : this.getLinks(this.#subscriptionMap, linksForTable);\n };\n\n const columnDescriptors = this.getColumnDescriptors(tableName);\n const table = this.#tables[tableName];\n const sessionTable = this.#sessionTableMap[tableName];\n\n const dataSource: DataSource = new TickingArrayDataSource({\n ...config,\n columnDescriptors,\n getVisualLinks,\n keyColumn:\n this.#schemas[tableName] === undefined\n ? this.#sessionTableMap[tableName].schema.key\n : this.#schemas[tableName].key,\n table: table || sessionTable,\n menu: this.#menus?.[tableName],\n rpcServices: this.getServices(tableName),\n sessionTables: this.#sessionTableMap,\n viewport,\n visualLinkService: this.visualLinkService,\n });\n\n dataSource.on(\"unsubscribed\", this.unregisterViewport);\n\n const existingSubscriptions = this.#subscriptionMap.get(tableName);\n const subscription = {\n viewportId: dataSource.viewport as string,\n dataSource,\n };\n if (existingSubscriptions) {\n existingSubscriptions.push(subscription);\n } else {\n this.#subscriptionMap.set(tableName, [subscription]);\n }\n\n return dataSource;\n };\n\n getServices(tableName: T) {\n const tableServices = this.#tableServices?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleServices.concat(tableServices);\n } else {\n return this.#moduleServices;\n }\n }\n\n get typeaheadHook() {\n return () => this.suggestionFetcher;\n }\n\n protected get sessionTableMap() {\n return this.#sessionTableMap;\n }\n\n protected get tables() {\n return this.#tables;\n }\n\n private getSessionTable(sessionTableName: string) {\n const sessionTable = this.#sessionTableMap[sessionTableName];\n if (sessionTable) {\n return sessionTable;\n } else {\n throw Error(\n `getSessionTable: no session table with name ${sessionTableName}`,\n );\n }\n }\n\n private getColumnDescriptors(tableName: T) {\n const schema =\n this.#schemas[tableName] || this.getSessionTable(tableName)?.schema;\n if (schema) {\n return schema.columns;\n } else {\n throw Error(\n ` no schema found for module ${this.#name} table ${tableName}`,\n );\n }\n }\n\n private suggestionFetcher: SuggestionFetcher = ([\n vuuTable,\n column,\n pattern,\n ]: TypeaheadParams) => {\n const table = this.#tables[vuuTable.table as T];\n if (table) {\n return makeSuggestions(table, column, pattern);\n } else {\n throw Error(\n `${this.#name} suggestionFetcher, unknown table ${vuuTable.module} ${\n vuuTable.table\n }`,\n );\n }\n };\n\n private openBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (withParams(rpcRequest)) {\n const { namedParams, vpId } = rpcRequest;\n const selectedRowIds = namedParams.selectedRowIds as string[];\n const table = namedParams.table as VuuTable;\n\n if (selectedRowIds && table) {\n const dataTable = this.#tables[table.table as T];\n if (dataTable) {\n const sessionTable = this.createSessionTableFromSelectedRows(\n dataTable,\n selectedRowIds,\n );\n const sessionTableName = `session-${uuid()}`;\n this.#sessionTableMap[sessionTableName] = sessionTable;\n\n return {\n action: {\n renderComponent: \"grid\",\n table: {\n module: table.module,\n table: sessionTableName,\n },\n tableSchema: dataTable.schema,\n type: \"OPEN_DIALOG_ACTION\",\n } as OpenDialogActionWithSchema,\n rpcName: \"VP_BULK_EDIT_BEGIN_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId,\n } as VuuRpcMenuResponse;\n } else {\n return {\n action: { type: \"NO_ACTION\" },\n clientViewportId: \"na\",\n error: \"No Table found\",\n rpcName: \"VP_BULK_EDIT_REJECT\",\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n } as VuuRpcMenuResponse;\n }\n }\n }\n throw Error(\"openBulkEdits expects Table and selectedRowIds\");\n };\n\n private endEditSession: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { vpId } = rpcRequest;\n delete this.#sessionTableMap[vpId];\n return {\n action: { type: \"VP_RPC_SUCCESS\" },\n method: \"???\",\n namedParams: {},\n params: [],\n type: \"VIEW_PORT_RPC_REPONSE\",\n vpId,\n } as VuuRpcViewportResponse;\n } else {\n throw Error(\"endEditSession invalid request\");\n }\n };\n\n // Bulk-edit with input in session table\n private applyBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (withParams(rpcRequest)) {\n const { vpId } = rpcRequest;\n const sessionTable = this.getSessionTable(vpId);\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n const { column, value } = rpcRequest.namedParams;\n const keyIndex = sessionTable.map[sessionTable.schema.key];\n sessionTable.update(\n String(newRow[keyIndex]),\n column as string,\n value as VuuRowDataItemType,\n );\n }\n return {\n action: {\n type: \"NO_ACTION\",\n },\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId,\n } as VuuRpcMenuResponse;\n }\n throw Error(\"applyBulkEdits expects column and value as namedParams\");\n };\n\n // Save session table data to main table\n private saveBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (withParams(rpcRequest)) {\n const { vpId } = rpcRequest;\n const sessionTable = this.getSessionTable(vpId);\n const { table } = sessionTable.schema.table;\n const baseTable = this.#tables[table as T];\n if (baseTable) {\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n baseTable.updateRow(newRow);\n }\n\n return {\n action: {\n type: \"VP_RPC_SUCCESS\",\n },\n requestId: \"request_id\",\n rpcName: \"VP_BULK_EDIT_SUBMIT_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId,\n } as unknown as VuuRpcViewportResponse;\n }\n }\n throw Error(\"saveBulkEdits base table not found\");\n };\n\n protected createSessionTableFromSelectedRows(\n { data, map, schema }: Table,\n selectedRowIds: string[],\n ) {\n const keyIndex = map[schema.key];\n const sessionData: VuuRowDataItemType[][] = [];\n for (let i = 0; i < selectedRowIds.length; i++) {\n for (let j = 0; j < data.length; j++) {\n if (data[j][keyIndex] === selectedRowIds[i]) {\n sessionData.push(data[j]);\n }\n }\n }\n return new Table(schema, sessionData, buildDataColumnMapFromSchema(schema));\n }\n\n /**\n * These services are available on any table. The client must configure the appropriate\n * menu item(s) on Table(s). The services to implement these RPC calls are built-in to\n * VuuModule\n */\n #moduleServices: RpcService[] = [\n {\n rpcName: \"VP_BULK_EDIT_BEGIN_RPC\",\n service: this.openBulkEdits,\n },\n {\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n service: this.applyBulkEdits,\n },\n {\n rpcName: \"VP_BULK_EDIT_SUBMIT_RPC\",\n service: this.saveBulkEdits,\n },\n {\n rpcName: \"VP_BULK_EDIT_END_RPC\",\n service: this.endEditSession,\n },\n ];\n}\n"],"names":["tableName"],"mappings":"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"}
@@ -0,0 +1,251 @@
1
+ import { isViewportRpcRequest } from '@vuu-ui/vuu-utils';
2
+ import pricesTable from './reference-data/prices.js';
3
+ import { Table, joinTables } from '../Table.js';
4
+ import { schemas } from './basket-schemas.js';
5
+ import basketConstituentData from './reference-data/constituents.js';
6
+ import { VuuModule } from '../VuuModule.js';
7
+
8
+ const undefinedTables = {
9
+ algoType: void 0,
10
+ basket: void 0,
11
+ basketTrading: void 0,
12
+ basketTradingConstituent: void 0,
13
+ basketConstituent: void 0,
14
+ basketTradingConstituentJoin: void 0,
15
+ priceStrategyType: void 0
16
+ };
17
+ const buildDataColumnMap = (tableName) => Object.values(schemas[tableName].columns).reduce(
18
+ (map, col, index) => {
19
+ map[col.name] = index;
20
+ return map;
21
+ },
22
+ {}
23
+ );
24
+ const tableMaps = {
25
+ algoType: buildDataColumnMap("algoType"),
26
+ basket: buildDataColumnMap("basket"),
27
+ basketTrading: buildDataColumnMap("basketTrading"),
28
+ basketTradingConstituent: buildDataColumnMap("basketTradingConstituent"),
29
+ basketConstituent: buildDataColumnMap("basketConstituent"),
30
+ basketTradingConstituentJoin: buildDataColumnMap(
31
+ "basketTradingConstituentJoin"
32
+ ),
33
+ priceStrategyType: buildDataColumnMap("priceStrategyType")
34
+ };
35
+ const basketConstituent = new Table(
36
+ schemas.basketConstituent,
37
+ basketConstituentData,
38
+ tableMaps.basketConstituent
39
+ );
40
+ const basketTrading = new Table(
41
+ schemas.basketTrading,
42
+ [],
43
+ tableMaps.basketTrading
44
+ );
45
+ let basketIncrement = 1;
46
+ const basketTradingConstituent = new Table(
47
+ schemas.basketTradingConstituent,
48
+ [],
49
+ tableMaps.basketTradingConstituent
50
+ );
51
+ const createBasketTradingRow = (basketId, basketName, side = "BUY", status = "OFF MARKET") => [
52
+ basketId,
53
+ basketName,
54
+ 0,
55
+ 1.25,
56
+ `steve-${basketIncrement++}`,
57
+ side,
58
+ status,
59
+ 1e6,
60
+ 125e4,
61
+ 100
62
+ ];
63
+ function createTradingBasket(basketId, basketName) {
64
+ const basketTradingRow = createBasketTradingRow(basketId, basketName);
65
+ basketTrading.insert(basketTradingRow);
66
+ const { basketId: key } = buildDataColumnMap("basketConstituent");
67
+ const constituents = basketConstituent.data.filter(
68
+ (c) => c[key] === basketId
69
+ );
70
+ const { instanceId } = tableMaps.basketTrading;
71
+ constituents.forEach(([, , description, , ric, , , quantity, weighting]) => {
72
+ const algo = "";
73
+ const algoParams = "";
74
+ const limitPrice = 95;
75
+ const notionalLocal = 0;
76
+ const notionalUsd = 0;
77
+ const pctFilled = 0;
78
+ const priceSpread = 0;
79
+ const priceStrategyId = "";
80
+ const side = "BUY";
81
+ const venue = "venue";
82
+ const basketInstanceId = basketTradingRow[instanceId];
83
+ const basketTradingConstituentRow = [
84
+ algo,
85
+ algoParams,
86
+ basketId,
87
+ description,
88
+ basketInstanceId,
89
+ `${basketInstanceId}-${ric}`,
90
+ limitPrice,
91
+ notionalLocal,
92
+ notionalUsd,
93
+ pctFilled,
94
+ priceSpread,
95
+ priceStrategyId,
96
+ quantity,
97
+ ric,
98
+ side,
99
+ venue,
100
+ weighting
101
+ ];
102
+ basketTradingConstituent.insert(basketTradingConstituentRow);
103
+ });
104
+ return basketTradingRow[instanceId];
105
+ }
106
+ const addConstituent = async (rpcRequest) => {
107
+ if (isViewportRpcRequest(rpcRequest)) {
108
+ throw Error(`addConstituent not implemented`);
109
+ } else {
110
+ throw Error(`addConstituent invalid rpcRequest`);
111
+ }
112
+ };
113
+ const viewportRpcResponse = (params, vpId, action) => ({
114
+ type: "VIEW_PORT_RPC_REPONSE",
115
+ action: {
116
+ type: "VP_RPC_SUCCESS",
117
+ ...action
118
+ },
119
+ method: "???",
120
+ namedParams: {},
121
+ params,
122
+ vpId
123
+ });
124
+ const sendToMarket = async (rpcRequest) => {
125
+ if (isViewportRpcRequest(rpcRequest)) {
126
+ const { params, vpId } = rpcRequest;
127
+ const [basketInstanceId] = params;
128
+ basketTrading.update(basketInstanceId, "status", "ON_MARKET");
129
+ return viewportRpcResponse(params, vpId);
130
+ } else {
131
+ throw Error(`sendToMarket invalid rpcRequest`);
132
+ }
133
+ };
134
+ const takeOffMarket = async (rpcRequest) => {
135
+ if (isViewportRpcRequest(rpcRequest)) {
136
+ const { params, vpId } = rpcRequest;
137
+ const [basketInstanceId] = params;
138
+ basketTrading.update(basketInstanceId, "status", "OFF-MARKET");
139
+ return viewportRpcResponse(params, vpId);
140
+ } else {
141
+ throw Error(`takeOffMarket invalid rpcRequest`);
142
+ }
143
+ };
144
+ const createNewBasket = async (rpcRequest) => {
145
+ if (isViewportRpcRequest(rpcRequest)) {
146
+ const { params, vpId } = rpcRequest;
147
+ const [basketId, basketName] = params;
148
+ const key = createTradingBasket(basketId, basketName);
149
+ return viewportRpcResponse(params, vpId, { key });
150
+ } else {
151
+ throw Error(`createNewBasket invalid rpcRequest`);
152
+ }
153
+ };
154
+ const tables = {
155
+ algoType: new Table(
156
+ schemas.algoType,
157
+ [
158
+ ["Sniper", 0],
159
+ ["Dark Liquidity", 1],
160
+ ["VWAP", 2],
161
+ ["POV", 3],
162
+ ["Dynamic Close", 4]
163
+ ],
164
+ tableMaps.algoType
165
+ ),
166
+ basket: new Table(
167
+ schemas.basket,
168
+ [
169
+ [".NASDAQ100", ".NASDAQ100", 0, 0],
170
+ [".HSI", ".HSI", 0, 0],
171
+ [".FTSE100", ".FTSE100", 0, 0],
172
+ [".SP500", ".SP500", 0, 0]
173
+ ],
174
+ tableMaps.basket
175
+ ),
176
+ basketConstituent,
177
+ basketTrading,
178
+ basketTradingConstituent,
179
+ basketTradingConstituentJoin: joinTables(
180
+ { module: "BASKET", table: "basketTradingConstituentJoin" },
181
+ basketTradingConstituent,
182
+ pricesTable,
183
+ "ric"
184
+ ),
185
+ priceStrategyType: new Table(
186
+ schemas.priceStrategyType,
187
+ [
188
+ ["Peg to Near Touch", 0],
189
+ ["Far Touch", 1],
190
+ ["Limit", 2],
191
+ ["Algo", 3]
192
+ ],
193
+ tableMaps.priceStrategyType
194
+ )
195
+ };
196
+ const vuuLinks = {
197
+ ...undefinedTables,
198
+ basketConstituent: [
199
+ { fromColumn: "basketId", toColumn: "id", toTable: "basket" }
200
+ ]
201
+ };
202
+ const menus = {
203
+ ...undefinedTables,
204
+ basket: {
205
+ name: "ROOT",
206
+ menus: [
207
+ {
208
+ context: "selected-rows",
209
+ filter: "",
210
+ name: "Add Basket",
211
+ rpcName: "CREATE_NEW_BASKET"
212
+ }
213
+ ]
214
+ }
215
+ };
216
+ const services = {
217
+ ...undefinedTables,
218
+ basket: [
219
+ {
220
+ rpcName: "createBasket",
221
+ service: createNewBasket
222
+ }
223
+ ],
224
+ basketTrading: [
225
+ {
226
+ rpcName: "sendToMarket",
227
+ service: sendToMarket
228
+ },
229
+ {
230
+ rpcName: "takeOffMarket",
231
+ service: takeOffMarket
232
+ }
233
+ ],
234
+ basketTradingConstituentJoin: [
235
+ {
236
+ rpcName: "addConstituent",
237
+ service: addConstituent
238
+ }
239
+ ]
240
+ };
241
+ const basketModule = new VuuModule({
242
+ menus,
243
+ name: "BASKET",
244
+ schemas,
245
+ services,
246
+ tables,
247
+ vuuLinks
248
+ });
249
+
250
+ export { basketModule, createBasketTradingRow, tables };
251
+ //# sourceMappingURL=basket-module.js.map