@vuu-ui/vuu-data-test 0.13.28 → 0.13.30

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.
@@ -11,14 +11,15 @@ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot
11
11
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), member.get(obj));
12
12
  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);
13
13
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
14
- var _menuRpcServices, _pendingVisualLink, _rpcServices, _sessionTables, _table, _selectionLinkSubscribers, _visualLinkService, _getVisualLinks;
14
+ var _menuRpcServices, _pendingVisualLink, _rpcEditServices, _rpcMenuServices, _rpcServices, _sessionTables, _table, _selectionLinkSubscribers, _visualLinkService, _getVisualLinks;
15
15
  const { KEY } = vuuUtils.metadataKeys;
16
16
  class TickingArrayDataSource extends vuuDataLocal.ArrayDataSource {
17
17
  constructor({
18
18
  data,
19
19
  getVisualLinks,
20
- menuRpcServices,
21
20
  rpcServices,
21
+ rpcEditServices,
22
+ rpcMenuServices,
22
23
  sessionTables,
23
24
  table,
24
25
  menu,
@@ -35,6 +36,8 @@ class TickingArrayDataSource extends vuuDataLocal.ArrayDataSource {
35
36
  });
36
37
  __privateAdd(this, _menuRpcServices);
37
38
  __privateAdd(this, _pendingVisualLink);
39
+ __privateAdd(this, _rpcEditServices);
40
+ __privateAdd(this, _rpcMenuServices);
38
41
  __privateAdd(this, _rpcServices);
39
42
  // A reference to session tables hosted within client side module
40
43
  __privateAdd(this, _sessionTables);
@@ -43,7 +46,8 @@ class TickingArrayDataSource extends vuuDataLocal.ArrayDataSource {
43
46
  __privateAdd(this, _visualLinkService);
44
47
  __privateAdd(this, _getVisualLinks);
45
48
  this._menu = menu;
46
- __privateSet(this, _menuRpcServices, menuRpcServices);
49
+ __privateSet(this, _rpcEditServices, rpcEditServices);
50
+ __privateSet(this, _rpcMenuServices, rpcMenuServices);
47
51
  __privateSet(this, _pendingVisualLink, visualLink);
48
52
  __privateSet(this, _rpcServices, rpcServices);
49
53
  __privateSet(this, _sessionTables, sessionTables);
@@ -102,61 +106,87 @@ class TickingArrayDataSource extends vuuDataLocal.ArrayDataSource {
102
106
  []
103
107
  );
104
108
  }
105
- applyEdit(rowKey, columnName, value) {
106
- __privateGet(this, _table)?.update(rowKey, columnName, value);
107
- return Promise.resolve(true);
108
- }
109
- async rpcCall(rpcRequest) {
110
- if (vuuUtils.isRpcServiceRequest(rpcRequest)) {
111
- if (vuuUtils.isTypeaheadRequest(rpcRequest)) {
112
- const {
113
- params: { column, starts }
114
- } = rpcRequest;
115
- return {
116
- type: "SUCCESS_RESULT",
117
- data: this.getTypeaheadSuggestions(column, starts)
118
- };
119
- }
120
- } else if (vuuUtils.isViewportRpcRequest(rpcRequest)) {
109
+ async applyEdit(rowKey, columnName, value) {
110
+ await this.editRpcCall({
111
+ rowKey,
112
+ type: "VP_EDIT_CELL_RPC",
113
+ field: columnName,
114
+ value
115
+ });
116
+ return true;
117
+ }
118
+ async rpcRequest(rpcRequest) {
119
+ if (vuuUtils.isTypeaheadRequest(rpcRequest)) {
120
+ const {
121
+ params: { column, starts }
122
+ } = rpcRequest;
123
+ return {
124
+ type: "SUCCESS_RESULT",
125
+ data: this.getTypeaheadSuggestions(column, starts)
126
+ };
127
+ } else {
121
128
  const rpcService = __privateGet(this, _rpcServices)?.find(
122
129
  (service) => service.rpcName === rpcRequest.rpcName
123
130
  );
124
- if (rpcService && vuuUtils.isViewportRpcRequest(rpcRequest)) {
131
+ if (rpcService) {
125
132
  switch (rpcRequest.rpcName) {
126
133
  case "VP_BULK_EDIT_COLUMN_CELLS_RPC": {
127
134
  return rpcService.service({
128
135
  ...rpcRequest,
129
- vpId: this.viewport
136
+ context: {
137
+ type: "VIEWPORT_CONTEXT",
138
+ viewPortId: this.viewport
139
+ }
130
140
  });
131
141
  }
132
142
  }
133
143
  return rpcService.service({
134
144
  ...rpcRequest,
135
- namedParams: {
136
- selectedRowIds: this.getSelectedRowIds(),
137
- table: this.tableSchema.table
138
- },
139
- vpId: this.viewport
145
+ context: {
146
+ type: "VIEWPORT_CONTEXT",
147
+ viewPortId: this.viewport
148
+ }
140
149
  });
150
+ } else {
151
+ throw Error(
152
+ `[TickingArrayDataSource] no service to handle RPC request ${rpcRequest.rpcName}`
153
+ );
141
154
  }
142
155
  }
143
- throw Error(`no implementation for RPC service ${rpcRequest.type}`);
156
+ }
157
+ async editRpcCall(rpcRequest) {
158
+ const rpcService = __privateGet(this, _rpcEditServices)?.find(
159
+ (service) => service.type === rpcRequest.type
160
+ );
161
+ if (rpcService) {
162
+ return rpcService.service({
163
+ ...rpcRequest,
164
+ vpId: this.viewport
165
+ });
166
+ } else {
167
+ throw Error(
168
+ `[TickingArrayDataSource] editRpcCall no service for ${rpcRequest.type}`
169
+ );
170
+ }
144
171
  }
145
172
  async menuRpcCall(rpcRequest) {
146
- const rpcService = __privateGet(this, _rpcServices)?.find(
173
+ const rpcService = __privateGet(this, _rpcMenuServices)?.find(
147
174
  (service) => service.rpcName === rpcRequest.rpcName
148
175
  );
149
- if (vuuUtils.isVuuMenuRpcRequest(rpcRequest)) {
150
- return rpcService?.service({
176
+ if (rpcService) {
177
+ return rpcService.service({
151
178
  ...rpcRequest,
152
- namedParams: {
179
+ vpId: this.viewport,
180
+ localDataParameters: {
153
181
  selectedRowIds: this.getSelectedRowIds(),
154
182
  table: this.tableSchema.table
155
- },
156
- vpId: this.viewport
183
+ }
157
184
  });
185
+ } else {
186
+ throw Error(
187
+ `[TickingArrayDataSource] menuRpcCall no service for ${rpcRequest.rpcName}`
188
+ );
158
189
  }
159
- return super.menuRpcCall(rpcRequest);
160
190
  }
161
191
  getTypeaheadSuggestions(column, pattern) {
162
192
  if (__privateGet(this, _table)) {
@@ -214,6 +244,8 @@ class TickingArrayDataSource extends vuuDataLocal.ArrayDataSource {
214
244
  }
215
245
  _menuRpcServices = new WeakMap();
216
246
  _pendingVisualLink = new WeakMap();
247
+ _rpcEditServices = new WeakMap();
248
+ _rpcMenuServices = new WeakMap();
217
249
  _rpcServices = new WeakMap();
218
250
  _sessionTables = new WeakMap();
219
251
  _table = new WeakMap();
@@ -1 +1 @@
1
- {"version":3,"file":"TickingArrayDataSource.js","sources":["../../../packages/vuu-data-test/src/TickingArrayDataSource.ts"],"sourcesContent":["import {\n ArrayDataSource,\n ArrayDataSourceConstructorProps,\n} from \"@vuu-ui/vuu-data-local\";\nimport type {\n 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 RpcResultSuccess,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n isRpcServiceRequest,\n isTypeaheadRequest,\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 \"./core/module/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 (isRpcServiceRequest(rpcRequest)) {\n if (isTypeaheadRequest(rpcRequest)) {\n const {\n params: { column, starts },\n } = rpcRequest;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return {\n type: \"SUCCESS_RESULT\",\n data: this.getTypeaheadSuggestions(column, starts),\n } as RpcResultSuccess;\n }\n } else 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 RPC 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 const columnIndex = this.columnMap[column];\n return makeSuggestions(this.currentData, columnIndex, 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 freeze() {\n super.freeze();\n }\n\n unfreeze() {\n super.unfreeze();\n }\n}\n"],"names":["metadataKeys","ArrayDataSource","isRpcServiceRequest","isTypeaheadRequest","isViewportRpcRequest","isVuuMenuRpcRequest","makeSuggestions"],"mappings":"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"}
1
+ {"version":3,"file":"TickingArrayDataSource.js","sources":["../../../packages/vuu-data-test/src/TickingArrayDataSource.ts"],"sourcesContent":["import {\n ArrayDataSource,\n ArrayDataSourceConstructorProps,\n} from \"@vuu-ui/vuu-data-local\";\nimport type {\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n DataSourceVisualLinkCreatedMessage,\n SelectionItem,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n LinkDescriptorWithLabel,\n RpcResultError,\n RpcResultSuccess,\n VuuCreateVisualLink,\n VuuMenu,\n VuuRemoveVisualLink,\n VuuRowDataItemType,\n VuuRpcEditCellRequest,\n VuuRpcEditRequest,\n VuuRpcEditResponse,\n VuuRpcMenuRequest,\n VuuRpcMenuResponse,\n VuuRpcServiceRequest,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { isTypeaheadRequest, metadataKeys, Range } from \"@vuu-ui/vuu-utils\";\nimport {\n RpcEditService,\n RpcMenuService,\n RpcService,\n SessionTableMap,\n} from \"./core/module/VuuModule\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport { Table } from \"./Table\";\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 rpcEditServices?: RpcEditService[];\n rpcMenuServices?: RpcMenuService[];\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 #rpcEditServices: RpcEditService[] | undefined;\n #rpcMenuServices: RpcMenuService[] | undefined;\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 rpcServices,\n rpcEditServices,\n rpcMenuServices,\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.#rpcEditServices = rpcEditServices;\n this.#rpcMenuServices = rpcMenuServices;\n this.#pendingVisualLink = visualLink;\n this.#rpcServices = rpcServices;\n this.#sessionTables = sessionTables;\n this.#table = table;\n this.#visualLinkService = visualLinkService;\n this.#getVisualLinks = getVisualLinks;\n\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 async applyEdit(\n rowKey: string,\n columnName: string,\n value: VuuRowDataItemType,\n ): Promise<true> {\n await this.editRpcCall({\n rowKey,\n type: \"VP_EDIT_CELL_RPC\",\n field: columnName,\n value,\n } as VuuRpcEditCellRequest);\n return true;\n }\n\n async rpcRequest(\n rpcRequest: Omit<VuuRpcServiceRequest, \"context\">,\n ): Promise<RpcResultSuccess | RpcResultError> {\n if (isTypeaheadRequest(rpcRequest)) {\n const {\n params: { column, starts },\n } = rpcRequest;\n return {\n type: \"SUCCESS_RESULT\",\n data: this.getTypeaheadSuggestions(column, starts),\n } as RpcResultSuccess;\n } else {\n const rpcService = this.#rpcServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n if (rpcService) {\n switch (rpcRequest.rpcName) {\n case \"VP_BULK_EDIT_COLUMN_CELLS_RPC\": {\n return rpcService.service({\n ...rpcRequest,\n context: {\n type: \"VIEWPORT_CONTEXT\",\n viewPortId: this.viewport,\n },\n });\n }\n }\n return rpcService.service({\n ...rpcRequest,\n context: {\n type: \"VIEWPORT_CONTEXT\",\n viewPortId: this.viewport,\n },\n });\n } else {\n throw Error(\n `[TickingArrayDataSource] no service to handle RPC request ${rpcRequest.rpcName}`,\n );\n }\n }\n }\n\n async editRpcCall(\n rpcRequest: Omit<VuuRpcEditRequest, \"vpId\">,\n ): Promise<VuuRpcEditResponse> {\n const rpcService = this.#rpcEditServices?.find(\n (service) => service.type === rpcRequest.type,\n );\n\n if (rpcService) {\n return rpcService.service({\n ...rpcRequest,\n vpId: this.viewport,\n } as VuuRpcEditRequest);\n } else {\n throw Error(\n `[TickingArrayDataSource] editRpcCall no service for ${rpcRequest.type}`,\n );\n }\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcMenuRequest, \"vpId\">,\n ): Promise<VuuRpcMenuResponse> {\n const rpcService = this.#rpcMenuServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n\n if (rpcService) {\n return rpcService.service({\n ...rpcRequest,\n vpId: this.viewport,\n localDataParameters: {\n selectedRowIds: this.getSelectedRowIds(),\n table: this.tableSchema.table,\n },\n } as VuuRpcMenuRequest);\n } else {\n throw Error(\n `[TickingArrayDataSource] menuRpcCall no service for ${rpcRequest.rpcName}`,\n );\n }\n }\n\n getTypeaheadSuggestions(column: string, pattern?: string): Promise<string[]> {\n if (this.#table) {\n const columnIndex = this.columnMap[column];\n return makeSuggestions(this.currentData, columnIndex, 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 freeze() {\n super.freeze();\n }\n\n unfreeze() {\n super.unfreeze();\n }\n}\n"],"names":["metadataKeys","ArrayDataSource","isTypeaheadRequest","makeSuggestions"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  'use strict';
2
2
 
3
- var vuuUtils = require('@vuu-ui/vuu-utils');
4
3
  var VuuModule = require('../core/module/VuuModule.js');
5
4
  var TableContainer = require('../core/table/TableContainer.js');
6
5
  var basketSchemas = require('./basket-schemas.js');
@@ -30,17 +29,6 @@ const createBasketTradingRow = (basketId, basketName, side = "BUY", status = "OF
30
29
  125e4,
31
30
  100
32
31
  ];
33
- const viewportRpcResponse = (params, vpId, action) => ({
34
- type: "VIEW_PORT_RPC_RESPONSE",
35
- action: {
36
- type: "VP_RPC_SUCCESS",
37
- ...action
38
- },
39
- method: "???",
40
- namedParams: {},
41
- params,
42
- vpId
43
- });
44
32
  const undefinedTables = {
45
33
  algoType: void 0,
46
34
  basket: void 0,
@@ -127,48 +115,47 @@ class BasketModule extends VuuModule.VuuModule {
127
115
  )
128
116
  });
129
117
  __publicField(this, "createNewBasket", async (rpcRequest) => {
130
- if (vuuUtils.isViewportRpcRequest(rpcRequest)) {
131
- const { vpId } = rpcRequest;
132
- const params = rpcRequest.params;
133
- const [basketId, basketName] = params;
134
- const key = this.createTradingBasket(basketId, basketName);
135
- return viewportRpcResponse(params, vpId, { key });
118
+ if (rpcRequest.context.type === "VIEWPORT_CONTEXT") {
119
+ const { sourceBasketId, tradeBasketName } = rpcRequest.params;
120
+ const key = this.createTradingBasket(sourceBasketId, tradeBasketName);
121
+ return {
122
+ type: "SUCCESS_RESULT",
123
+ data: key
124
+ };
136
125
  } else {
137
- throw Error(`createNewBasket invalid rpcRequest`);
126
+ throw Error("[BasketModule] createNewBasket invalid request type");
138
127
  }
139
128
  });
140
129
  __publicField(this, "sendToMarket", async (rpcRequest) => {
141
- if (vuuUtils.isViewportRpcRequest(rpcRequest)) {
142
- const { vpId } = rpcRequest;
143
- const params = rpcRequest.params;
144
- const [basketInstanceId] = params;
130
+ if (rpcRequest.context.type === "VIEWPORT_CONTEXT") {
131
+ const { basketInstanceId } = rpcRequest.params;
145
132
  this.tables.basketTrading.update(basketInstanceId, "status", "ON_MARKET");
146
- return viewportRpcResponse(params, vpId);
133
+ return {
134
+ type: "SUCCESS_RESULT",
135
+ data: void 0
136
+ };
147
137
  } else {
148
- throw Error(`sendToMarket invalid rpcRequest`);
138
+ throw Error("[BasketModule] createNewBasket invalid request type");
149
139
  }
150
140
  });
151
141
  __publicField(this, "takeOffMarket", async (rpcRequest) => {
152
- if (vuuUtils.isViewportRpcRequest(rpcRequest)) {
153
- const { vpId } = rpcRequest;
154
- const params = rpcRequest.params;
155
- const [basketInstanceId] = params;
142
+ if (rpcRequest.context.type === "VIEWPORT_CONTEXT") {
143
+ const { basketInstanceId } = rpcRequest.params;
156
144
  this.tables.basketTrading.update(
157
145
  basketInstanceId,
158
146
  "status",
159
147
  "OFF-MARKET"
160
148
  );
161
- return viewportRpcResponse(params, vpId);
149
+ return {
150
+ type: "SUCCESS_RESULT",
151
+ data: void 0
152
+ };
162
153
  } else {
163
- throw Error(`takeOffMarket invalid rpcRequest`);
154
+ throw Error("[BasketModule] createNewBasket invalid request type");
164
155
  }
165
156
  });
166
- __publicField(this, "addConstituent", async (rpcRequest) => {
167
- if (vuuUtils.isViewportRpcRequest(rpcRequest)) {
168
- throw Error(`addConstituent not implemented`);
169
- } else {
170
- throw Error(`addConstituent invalid rpcRequest`);
171
- }
157
+ __publicField(this, "addConstituent", async () => {
158
+ throw Error(`addConstituent not implemented`);
172
159
  });
173
160
  }
174
161
  get menus() {
@@ -217,6 +204,14 @@ class BasketModule extends VuuModule.VuuModule {
217
204
  ]
218
205
  };
219
206
  }
207
+ get editServices() {
208
+ return void 0;
209
+ }
210
+ get menuServices() {
211
+ return {
212
+ ...undefinedTables
213
+ };
214
+ }
220
215
  get tables() {
221
216
  return __privateGet(this, _tables);
222
217
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BasketModule.js","sources":["../../../../packages/vuu-data-test/src/basket/BasketModule.ts"],"sourcesContent":["import {\n VuuMenu,\n VuuRowDataItemType,\n VuuRpcViewportAction,\n VuuRpcViewportResponse,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap, isViewportRpcRequest } from \"@vuu-ui/vuu-utils\";\nimport { ServiceHandler, VuuModule } from \"../core/module/VuuModule\";\nimport tableContainer from \"../core/table/TableContainer\";\nimport { BasketsTableName, schemas } from \"./basket-schemas\";\nimport basketConstituentData from \"./reference-data/constituents\";\nimport { type Table } from \"../Table\";\n\nconst { createTable } = tableContainer;\n\nlet basketIncrement = 1;\n\n// export as convenience for showcase examples\nexport const createBasketTradingRow = (\n basketId: string,\n basketName: string,\n side = \"BUY\",\n status = \"OFF MARKET\",\n) => [\n basketId,\n basketName,\n 0,\n 1.25,\n `steve-${basketIncrement++}`,\n side,\n status,\n 1_000_000,\n 1_250_000,\n 100,\n];\n\nconst viewportRpcResponse = (\n params: string[],\n vpId: string,\n action?: Partial<VuuRpcViewportAction>,\n): VuuRpcViewportResponse => ({\n type: \"VIEW_PORT_RPC_RESPONSE\",\n action: {\n type: \"VP_RPC_SUCCESS\",\n ...action,\n },\n method: \"???\",\n namedParams: {},\n params,\n vpId,\n});\n\nconst undefinedTables = {\n algoType: undefined,\n basket: undefined,\n basketTrading: undefined,\n basketTradingConstituent: undefined,\n basketConstituent: undefined,\n basketTradingConstituentJoin: undefined,\n priceStrategyType: undefined,\n};\n\n// This is a 'local' columnMap\nconst buildDataColumnMap = (tableName: BasketsTableName) =>\n Object.values(schemas[tableName].columns).reduce<ColumnMap>(\n (map, col, index) => {\n map[col.name] = index;\n return map;\n },\n {},\n );\n\nconst tableMaps: Record<BasketsTableName, ColumnMap> = {\n algoType: buildDataColumnMap(\"algoType\"),\n basket: buildDataColumnMap(\"basket\"),\n basketTrading: buildDataColumnMap(\"basketTrading\"),\n basketTradingConstituent: buildDataColumnMap(\"basketTradingConstituent\"),\n basketConstituent: buildDataColumnMap(\"basketConstituent\"),\n basketTradingConstituentJoin: buildDataColumnMap(\n \"basketTradingConstituentJoin\",\n ),\n priceStrategyType: buildDataColumnMap(\"priceStrategyType\"),\n};\n\nconst basketTradingConstituent = tableContainer.createTable(\n schemas.basketTradingConstituent,\n [],\n tableMaps.basketTradingConstituent,\n);\n\n/**\n * This is an example of how we might extend the built-in VuuModule to\n * implement a module-specific service in such a way that it can invoke\n * methods on the VuuModule.\n */\nexport class BasketModule extends VuuModule<BasketsTableName> {\n #tables: Record<BasketsTableName, Table> = {\n algoType: createTable(\n schemas.algoType,\n [\n [\"Sniper\", 0],\n [\"Dark Liquidity\", 1],\n [\"VWAP\", 2],\n [\"POV\", 3],\n [\"Dynamic Close\", 4],\n ],\n tableMaps.algoType,\n ),\n basket: createTable(\n schemas.basket,\n [\n [\".NASDAQ100\", \".NASDAQ100\", 0, 0],\n [\".HSI\", \".HSI\", 0, 0],\n [\".FTSE100\", \".FTSE100\", 0, 0],\n [\".SP500\", \".SP500\", 0, 0],\n ],\n tableMaps.basket,\n ),\n basketConstituent: createTable(\n schemas.basketConstituent,\n basketConstituentData,\n tableMaps.basketConstituent,\n ),\n basketTrading: createTable(\n schemas.basketTrading,\n [],\n tableMaps.basketTrading,\n ),\n basketTradingConstituent,\n basketTradingConstituentJoin: tableContainer.createJoinTable(\n { module: \"BASKET\", table: \"basketTradingConstituentJoin\" },\n { module: \"BASKET\", table: \"basketTradingConstituent\" },\n { module: \"SIMUL\", table: \"prices\" },\n \"ric\",\n ),\n priceStrategyType: createTable(\n schemas.priceStrategyType,\n [\n [\"Peg to Near Touch\", 0],\n [\"Far Touch\", 1],\n [\"Limit\", 2],\n [\"Algo\", 3],\n ],\n tableMaps.priceStrategyType,\n ),\n };\n\n constructor() {\n super(\"BASKET\");\n }\n\n get menus(): Record<BasketsTableName, VuuMenu | undefined> {\n return {\n ...undefinedTables,\n basket: {\n name: \"ROOT\",\n menus: [\n {\n context: \"selected-rows\",\n filter: \"\",\n name: \"Add Basket\",\n rpcName: \"CREATE_NEW_BASKET\",\n },\n ],\n },\n };\n }\n\n get schemas() {\n return schemas;\n }\n\n get services() {\n return {\n ...undefinedTables,\n basket: [\n {\n rpcName: \"createBasket\",\n service: this.createNewBasket,\n },\n ],\n basketTrading: [\n {\n rpcName: \"sendToMarket\",\n service: this.sendToMarket,\n },\n {\n rpcName: \"takeOffMarket\",\n service: this.takeOffMarket,\n },\n ],\n basketTradingConstituentJoin: [\n {\n rpcName: \"addConstituent\",\n service: this.addConstituent,\n },\n ],\n };\n }\n\n get tables() {\n return this.#tables;\n }\n\n get visualLinks() {\n return {\n ...undefinedTables,\n basketConstituent: [\n { fromColumn: \"basketId\", toColumn: \"id\", toTable: \"basket\" },\n ],\n };\n }\n\n private createTradingBasket(basketId: string, basketName: string) {\n const basketTradingRow = createBasketTradingRow(basketId, basketName);\n\n this.tables.basketTrading.insert(basketTradingRow);\n\n const { basketId: key } = buildDataColumnMap(\"basketConstituent\");\n const constituents = this.tables.basketConstituent.data.filter(\n (c) => c[key] === basketId,\n );\n\n const { instanceId } = tableMaps.basketTrading;\n\n constituents.forEach(\n ([, , description, , ric, , , quantity, weighting]) => {\n const algo = \"\";\n const algoParams = \"\";\n const limitPrice = 95;\n const notionalLocal = 0;\n const notionalUsd = 0;\n const pctFilled = 0;\n const priceSpread = 0;\n const priceStrategyId = \"\";\n const side = \"BUY\";\n const venue = \"venue\";\n\n const basketInstanceId = basketTradingRow[instanceId];\n const basketTradingConstituentRow: VuuRowDataItemType[] = [\n algo,\n algoParams,\n basketId,\n description,\n basketInstanceId,\n `${basketInstanceId}-${ric}`,\n limitPrice,\n notionalLocal,\n notionalUsd,\n pctFilled,\n priceSpread,\n priceStrategyId,\n quantity,\n ric,\n side,\n venue,\n weighting,\n ];\n basketTradingConstituent.insert(basketTradingConstituentRow);\n },\n );\n\n // return the key\n return basketTradingRow[instanceId] as string;\n }\n\n private createNewBasket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { vpId } = rpcRequest;\n const params = rpcRequest.params as string[];\n const [basketId, basketName] = params;\n const key = this.createTradingBasket(basketId, basketName);\n return viewportRpcResponse(params, vpId, { key });\n } else {\n throw Error(`createNewBasket invalid rpcRequest`);\n }\n };\n\n private sendToMarket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { vpId } = rpcRequest;\n const params = rpcRequest.params as string[];\n const [basketInstanceId] = params;\n this.tables.basketTrading.update(basketInstanceId, \"status\", \"ON_MARKET\");\n return viewportRpcResponse(params, vpId);\n } else {\n throw Error(`sendToMarket invalid rpcRequest`);\n }\n };\n private takeOffMarket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { vpId } = rpcRequest;\n const params = rpcRequest.params as string[];\n const [basketInstanceId] = params;\n this.tables.basketTrading.update(\n basketInstanceId,\n \"status\",\n \"OFF-MARKET\",\n );\n return viewportRpcResponse(params, vpId);\n } else {\n throw Error(`takeOffMarket invalid rpcRequest`);\n }\n };\n\n private addConstituent: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n throw Error(`addConstituent not implemented`);\n } else {\n throw Error(`addConstituent invalid rpcRequest`);\n }\n };\n}\n\nexport const basketModule = new BasketModule();\n"],"names":["tableContainer","schemas","VuuModule","basketConstituentData","isViewportRpcRequest"],"mappings":"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"}
1
+ {"version":3,"file":"BasketModule.js","sources":["../../../../packages/vuu-data-test/src/basket/BasketModule.ts"],"sourcesContent":["import { VuuMenu, VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap } from \"@vuu-ui/vuu-utils\";\nimport {\n RpcMenuService,\n ServiceHandler,\n VuuModule,\n} from \"../core/module/VuuModule\";\nimport tableContainer from \"../core/table/TableContainer\";\nimport { BasketsTableName, schemas } from \"./basket-schemas\";\nimport basketConstituentData from \"./reference-data/constituents\";\nimport { type Table } from \"../Table\";\n\nconst { createTable } = tableContainer;\n\nlet basketIncrement = 1;\n\n// export as convenience for showcase examples\nexport const createBasketTradingRow = (\n basketId: string,\n basketName: string,\n side = \"BUY\",\n status = \"OFF MARKET\",\n) => [\n basketId,\n basketName,\n 0,\n 1.25,\n `steve-${basketIncrement++}`,\n side,\n status,\n 1_000_000,\n 1_250_000,\n 100,\n];\n\nconst undefinedTables = {\n algoType: undefined,\n basket: undefined,\n basketTrading: undefined,\n basketTradingConstituent: undefined,\n basketConstituent: undefined,\n basketTradingConstituentJoin: undefined,\n priceStrategyType: undefined,\n};\n\n// This is a 'local' columnMap\nconst buildDataColumnMap = (tableName: BasketsTableName) =>\n Object.values(schemas[tableName].columns).reduce<ColumnMap>(\n (map, col, index) => {\n map[col.name] = index;\n return map;\n },\n {},\n );\n\nconst tableMaps: Record<BasketsTableName, ColumnMap> = {\n algoType: buildDataColumnMap(\"algoType\"),\n basket: buildDataColumnMap(\"basket\"),\n basketTrading: buildDataColumnMap(\"basketTrading\"),\n basketTradingConstituent: buildDataColumnMap(\"basketTradingConstituent\"),\n basketConstituent: buildDataColumnMap(\"basketConstituent\"),\n basketTradingConstituentJoin: buildDataColumnMap(\n \"basketTradingConstituentJoin\",\n ),\n priceStrategyType: buildDataColumnMap(\"priceStrategyType\"),\n};\n\nconst basketTradingConstituent = tableContainer.createTable(\n schemas.basketTradingConstituent,\n [],\n tableMaps.basketTradingConstituent,\n);\n\n/**\n * This is an example of how we might extend the built-in VuuModule to\n * implement a module-specific service in such a way that it can invoke\n * methods on the VuuModule.\n */\nexport class BasketModule extends VuuModule<BasketsTableName> {\n #tables: Record<BasketsTableName, Table> = {\n algoType: createTable(\n schemas.algoType,\n [\n [\"Sniper\", 0],\n [\"Dark Liquidity\", 1],\n [\"VWAP\", 2],\n [\"POV\", 3],\n [\"Dynamic Close\", 4],\n ],\n tableMaps.algoType,\n ),\n basket: createTable(\n schemas.basket,\n [\n [\".NASDAQ100\", \".NASDAQ100\", 0, 0],\n [\".HSI\", \".HSI\", 0, 0],\n [\".FTSE100\", \".FTSE100\", 0, 0],\n [\".SP500\", \".SP500\", 0, 0],\n ],\n tableMaps.basket,\n ),\n basketConstituent: createTable(\n schemas.basketConstituent,\n basketConstituentData,\n tableMaps.basketConstituent,\n ),\n basketTrading: createTable(\n schemas.basketTrading,\n [],\n tableMaps.basketTrading,\n ),\n basketTradingConstituent,\n basketTradingConstituentJoin: tableContainer.createJoinTable(\n { module: \"BASKET\", table: \"basketTradingConstituentJoin\" },\n { module: \"BASKET\", table: \"basketTradingConstituent\" },\n { module: \"SIMUL\", table: \"prices\" },\n \"ric\",\n ),\n priceStrategyType: createTable(\n schemas.priceStrategyType,\n [\n [\"Peg to Near Touch\", 0],\n [\"Far Touch\", 1],\n [\"Limit\", 2],\n [\"Algo\", 3],\n ],\n tableMaps.priceStrategyType,\n ),\n };\n\n constructor() {\n super(\"BASKET\");\n }\n\n get menus(): Record<BasketsTableName, VuuMenu | undefined> {\n return {\n ...undefinedTables,\n basket: {\n name: \"ROOT\",\n menus: [\n {\n context: \"selected-rows\",\n filter: \"\",\n name: \"Add Basket\",\n rpcName: \"CREATE_NEW_BASKET\",\n },\n ],\n },\n };\n }\n\n get schemas() {\n return schemas;\n }\n\n get services() {\n return {\n ...undefinedTables,\n basket: [\n {\n rpcName: \"createBasket\",\n service: this.createNewBasket,\n },\n ],\n basketTrading: [\n {\n rpcName: \"sendToMarket\",\n service: this.sendToMarket,\n },\n {\n rpcName: \"takeOffMarket\",\n service: this.takeOffMarket,\n },\n ],\n basketTradingConstituentJoin: [\n {\n rpcName: \"addConstituent\",\n service: this.addConstituent,\n },\n ],\n };\n }\n\n get editServices() {\n return undefined;\n }\n\n get menuServices():\n | Record<BasketsTableName, RpcMenuService[] | undefined>\n | undefined {\n return {\n ...undefinedTables,\n };\n }\n\n get tables() {\n return this.#tables;\n }\n\n get visualLinks() {\n return {\n ...undefinedTables,\n basketConstituent: [\n { fromColumn: \"basketId\", toColumn: \"id\", toTable: \"basket\" },\n ],\n };\n }\n\n private createTradingBasket(basketId: string, basketName: string) {\n const basketTradingRow = createBasketTradingRow(basketId, basketName);\n\n this.tables.basketTrading.insert(basketTradingRow);\n\n const { basketId: key } = buildDataColumnMap(\"basketConstituent\");\n const constituents = this.tables.basketConstituent.data.filter(\n (c) => c[key] === basketId,\n );\n\n const { instanceId } = tableMaps.basketTrading;\n\n constituents.forEach(\n ([, , description, , ric, , , quantity, weighting]) => {\n const algo = \"\";\n const algoParams = \"\";\n const limitPrice = 95;\n const notionalLocal = 0;\n const notionalUsd = 0;\n const pctFilled = 0;\n const priceSpread = 0;\n const priceStrategyId = \"\";\n const side = \"BUY\";\n const venue = \"venue\";\n\n const basketInstanceId = basketTradingRow[instanceId];\n const basketTradingConstituentRow: VuuRowDataItemType[] = [\n algo,\n algoParams,\n basketId,\n description,\n basketInstanceId,\n `${basketInstanceId}-${ric}`,\n limitPrice,\n notionalLocal,\n notionalUsd,\n pctFilled,\n priceSpread,\n priceStrategyId,\n quantity,\n ric,\n side,\n venue,\n weighting,\n ];\n basketTradingConstituent.insert(basketTradingConstituentRow);\n },\n );\n\n // return the key\n return basketTradingRow[instanceId] as string;\n }\n\n private createNewBasket: ServiceHandler = async (rpcRequest) => {\n if (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\n const { sourceBasketId, tradeBasketName } = rpcRequest.params;\n const key = this.createTradingBasket(sourceBasketId, tradeBasketName);\n return {\n type: \"SUCCESS_RESULT\",\n data: key,\n };\n } else {\n throw Error(\"[BasketModule] createNewBasket invalid request type\");\n }\n };\n\n private sendToMarket: ServiceHandler = async (rpcRequest) => {\n if (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\n const { basketInstanceId } = rpcRequest.params;\n this.tables.basketTrading.update(basketInstanceId, \"status\", \"ON_MARKET\");\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } else {\n throw Error(\"[BasketModule] createNewBasket invalid request type\");\n }\n };\n private takeOffMarket: ServiceHandler = async (rpcRequest) => {\n if (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\n const { basketInstanceId } = rpcRequest.params;\n this.tables.basketTrading.update(\n basketInstanceId,\n \"status\",\n \"OFF-MARKET\",\n );\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } else {\n throw Error(\"[BasketModule] createNewBasket invalid request type\");\n }\n };\n\n private addConstituent: ServiceHandler = async () => {\n throw Error(`addConstituent not implemented`);\n };\n}\n\nexport const basketModule = new BasketModule();\n"],"names":["tableContainer","schemas","VuuModule","basketConstituentData"],"mappings":"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"}