@vuu-ui/vuu-data-test 0.8.74 → 0.8.76
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.
- package/cjs/TickingArrayDataSource.js +99 -1
- package/cjs/TickingArrayDataSource.js.map +1 -1
- package/cjs/VuuModule.js +56 -10
- package/cjs/VuuModule.js.map +1 -1
- package/cjs/basket/basket-module.js +5 -3
- package/cjs/basket/basket-module.js.map +1 -1
- package/cjs/index.js +1 -0
- package/cjs/index.js.map +1 -1
- package/cjs/simul/simul-module.js +2 -2
- package/cjs/simul/simul-module.js.map +1 -1
- package/esm/TickingArrayDataSource.js +99 -1
- package/esm/TickingArrayDataSource.js.map +1 -1
- package/esm/VuuModule.js +56 -11
- package/esm/VuuModule.js.map +1 -1
- package/esm/basket/basket-module.js +5 -3
- package/esm/basket/basket-module.js.map +1 -1
- package/esm/index.js +1 -1
- package/esm/simul/simul-module.js +2 -2
- package/esm/simul/simul-module.js.map +1 -1
- package/package.json +6 -6
- package/types/TickingArrayDataSource.d.ts +24 -1
- package/types/VuuModule.d.ts +10 -4
|
@@ -22,8 +22,9 @@ var __privateSet = (obj, member, value, setter) => {
|
|
|
22
22
|
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
23
23
|
return value;
|
|
24
24
|
};
|
|
25
|
-
var _menuRpcServices, _rpcServices, _sessionTables, _table;
|
|
25
|
+
var _menuRpcServices, _rpcServices, _sessionTables, _table, _broadcastChannel, _selectionLinkSubscribers;
|
|
26
26
|
const { KEY } = vuuUtils.metadataKeys;
|
|
27
|
+
const isMessageForSelf = (message, id) => message.targetId === id;
|
|
27
28
|
const _TickingArrayDataSource = class _TickingArrayDataSource extends vuuDataLocal.ArrayDataSource {
|
|
28
29
|
constructor({
|
|
29
30
|
data,
|
|
@@ -47,6 +48,47 @@ const _TickingArrayDataSource = class _TickingArrayDataSource extends vuuDataLoc
|
|
|
47
48
|
// A reference to session tables hosted within client side module
|
|
48
49
|
__privateAdd(this, _sessionTables, void 0);
|
|
49
50
|
__privateAdd(this, _table, void 0);
|
|
51
|
+
__privateAdd(this, _broadcastChannel, new BroadcastChannel("vuu-datasource"));
|
|
52
|
+
__privateAdd(this, _selectionLinkSubscribers, void 0);
|
|
53
|
+
this.receiveBroadcastMessage = (message) => {
|
|
54
|
+
switch (message.type) {
|
|
55
|
+
case "subscribe-link-filter":
|
|
56
|
+
case "subscribe-link-select":
|
|
57
|
+
{
|
|
58
|
+
const subscribers = __privateGet(this, _selectionLinkSubscribers) || __privateSet(this, _selectionLinkSubscribers, /* @__PURE__ */ new Map());
|
|
59
|
+
subscribers.set(message.sourceId, {
|
|
60
|
+
sourceColumnName: message.sourceColumn,
|
|
61
|
+
columnName: message.targetColumn,
|
|
62
|
+
linkType: message.type
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
break;
|
|
66
|
+
case "selection-changed":
|
|
67
|
+
{
|
|
68
|
+
const { sourceColumnName, columnName, linkType, selectedValues } = message;
|
|
69
|
+
const selectedIndices = [];
|
|
70
|
+
const colIndex = this.columnMap[columnName];
|
|
71
|
+
if (linkType === "subscribe-link-select") {
|
|
72
|
+
for (const value of selectedValues) {
|
|
73
|
+
const index = this.data.findIndex(
|
|
74
|
+
(row) => row[colIndex] === value
|
|
75
|
+
);
|
|
76
|
+
selectedIndices.push(index);
|
|
77
|
+
}
|
|
78
|
+
this.select(selectedIndices);
|
|
79
|
+
} else {
|
|
80
|
+
this.filter = {
|
|
81
|
+
filter: `${sourceColumnName} in ["${selectedValues.join(
|
|
82
|
+
'","'
|
|
83
|
+
)}"]`
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
break;
|
|
88
|
+
default:
|
|
89
|
+
console.log(`unrecognised message ${message.type}`);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
50
92
|
this._menu = menu;
|
|
51
93
|
__privateSet(this, _menuRpcServices, menuRpcServices);
|
|
52
94
|
__privateSet(this, _sessionTables, sessionTables);
|
|
@@ -58,6 +100,11 @@ const _TickingArrayDataSource = class _TickingArrayDataSource extends vuuDataLoc
|
|
|
58
100
|
table.on("insert", this.insert);
|
|
59
101
|
table.on("update", this.updateRow);
|
|
60
102
|
}
|
|
103
|
+
__privateGet(this, _broadcastChannel).onmessage = (evt) => {
|
|
104
|
+
if (isMessageForSelf(evt.data, this.viewport)) {
|
|
105
|
+
this.receiveBroadcastMessage(evt.data);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
61
108
|
}
|
|
62
109
|
async subscribe(subscribeProps, callback) {
|
|
63
110
|
const subscription = super.subscribe(subscribeProps, callback);
|
|
@@ -69,6 +116,34 @@ const _TickingArrayDataSource = class _TickingArrayDataSource extends vuuDataLoc
|
|
|
69
116
|
get range() {
|
|
70
117
|
return super.range;
|
|
71
118
|
}
|
|
119
|
+
pickUniqueSelectedValues(column) {
|
|
120
|
+
const map = this.columnMap;
|
|
121
|
+
const set = /* @__PURE__ */ new Set();
|
|
122
|
+
const colIndex = map[column];
|
|
123
|
+
for (const row of this.getSelectedRows()) {
|
|
124
|
+
set.add(row[colIndex]);
|
|
125
|
+
}
|
|
126
|
+
return Array.from(set);
|
|
127
|
+
}
|
|
128
|
+
select(selected) {
|
|
129
|
+
super.select(selected);
|
|
130
|
+
const numberOfSelectionSubscribers = __privateGet(this, _selectionLinkSubscribers)?.size ?? 0;
|
|
131
|
+
if (numberOfSelectionSubscribers > 0) {
|
|
132
|
+
__privateGet(this, _selectionLinkSubscribers)?.forEach(
|
|
133
|
+
({ sourceColumnName, columnName, linkType }, targetId) => {
|
|
134
|
+
this.sendBroadcastMessage({
|
|
135
|
+
sourceColumnName,
|
|
136
|
+
columnName,
|
|
137
|
+
linkType,
|
|
138
|
+
sourceId: this.viewport,
|
|
139
|
+
targetId,
|
|
140
|
+
type: "selection-changed",
|
|
141
|
+
selectedValues: this.pickUniqueSelectedValues(columnName)
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
72
147
|
getSelectedRows() {
|
|
73
148
|
return this.selectedRows.reduce(
|
|
74
149
|
(rows, selected) => {
|
|
@@ -181,11 +256,34 @@ const _TickingArrayDataSource = class _TickingArrayDataSource extends vuuDataLoc
|
|
|
181
256
|
);
|
|
182
257
|
}
|
|
183
258
|
}
|
|
259
|
+
sendBroadcastMessage(message) {
|
|
260
|
+
__privateGet(this, _broadcastChannel).postMessage(message);
|
|
261
|
+
}
|
|
262
|
+
set visualLink(visualLink) {
|
|
263
|
+
if (visualLink) {
|
|
264
|
+
const {
|
|
265
|
+
parentClientVpId,
|
|
266
|
+
link: { fromColumn, toColumn }
|
|
267
|
+
} = visualLink;
|
|
268
|
+
if (this.viewport) {
|
|
269
|
+
console.log("tables linked");
|
|
270
|
+
this.sendBroadcastMessage({
|
|
271
|
+
sourceId: this.viewport,
|
|
272
|
+
sourceColumn: fromColumn,
|
|
273
|
+
type: "subscribe-link-filter",
|
|
274
|
+
targetId: parentClientVpId,
|
|
275
|
+
targetColumn: toColumn
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
184
280
|
};
|
|
185
281
|
_menuRpcServices = new WeakMap();
|
|
186
282
|
_rpcServices = new WeakMap();
|
|
187
283
|
_sessionTables = new WeakMap();
|
|
188
284
|
_table = new WeakMap();
|
|
285
|
+
_broadcastChannel = new WeakMap();
|
|
286
|
+
_selectionLinkSubscribers = new WeakMap();
|
|
189
287
|
let TickingArrayDataSource = _TickingArrayDataSource;
|
|
190
288
|
|
|
191
289
|
exports.TickingArrayDataSource = TickingArrayDataSource;
|
|
@@ -1 +1 @@
|
|
|
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 DataSourceRow,\n MenuRpcResponse,\n RpcResponse,\n SelectionItem,\n SubscribeCallback,\n SubscribeProps,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInRPCEditResponse,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n ClientToServerEditRpc,\n ClientToServerMenuRPC,\n ClientToServerViewportRpcCall,\n LinkDescriptorWithLabel,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { metadataKeys } from \"@vuu-ui/vuu-utils\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport { Table } from \"./Table\";\nimport { RpcService, SessionTableMap } from \"./VuuModule\";\n\nconst { KEY } = metadataKeys;\n\nexport interface TickingArrayDataSourceConstructorProps\n extends Omit<ArrayDataSourceConstructorProps, \"data\"> {\n data?: Array<VuuRowDataItemType[]>;\n menu?: VuuMenu;\n menuRpcServices?: RpcService[];\n rpcServices?: RpcService[];\n sessionTables?: SessionTableMap;\n table?: Table;\n visualLinks?: LinkDescriptorWithLabel[];\n}\n\nexport class TickingArrayDataSource extends ArrayDataSource {\n #menuRpcServices: RpcService[] | undefined;\n #rpcServices: RpcService[] | undefined;\n // A reference to session tables hosted within client side module\n #sessionTables: SessionTableMap | undefined;\n #table?: Table;\n\n constructor({\n data,\n menuRpcServices,\n rpcServices,\n sessionTables,\n table,\n menu,\n visualLinks,\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 this.#menuRpcServices = menuRpcServices;\n this.#sessionTables = sessionTables;\n this.#rpcServices = rpcServices;\n this.#table = table;\n this.links = visualLinks;\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(subscribeProps: SubscribeProps, callback: SubscribeCallback) {\n const subscription = super.subscribe(subscribeProps, callback);\n // if (subscribeProps.range) {\n // this.#updateGenerator?.setRange(subscribeProps.range);\n // }\n return subscription;\n }\n\n set range(range: VuuRange) {\n super.range = range;\n // this.#updateGenerator?.setRange(range);\n }\n get range() {\n return super.range;\n }\n\n private getSelectedRows() {\n return this.selectedRows.reduce<DataSourceRow[]>(\n (rows: DataSourceRow[], selected: SelectionItem) => {\n if (Array.isArray(selected)) {\n for (let i = selected[0]; i <= selected[1]; i++) {\n const row = this.data[i];\n if (row) {\n rows.push(row);\n }\n }\n } else {\n const row = this.data[selected];\n if (row) {\n rows.push(row);\n }\n }\n return rows;\n },\n []\n );\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 row: DataSourceRow,\n columnName: string,\n value: VuuRowDataItemType\n ): Promise<true> {\n const key = row[KEY];\n this.#table?.update(key, columnName, value);\n return Promise.resolve(true);\n }\n\n async rpcCall<T extends RpcResponse = RpcResponse>(\n rpcRequest: Omit<ClientToServerViewportRpcCall, \"vpId\">\n ): Promise<T | undefined> {\n const rpcService = this.#rpcServices?.find(\n (service) =>\n service.rpcName ===\n (rpcRequest as ClientToServerViewportRpcCall).rpcName\n );\n\n if (rpcService) {\n switch (rpcRequest.rpcName) {\n case \"VP_BULK_EDIT_COLUMN_CELLS_RPC\": {\n return rpcService.service(rpcRequest) as Promise<T>;\n }\n }\n const selectedRows = this.getSelectedRows();\n return rpcService.service({\n ...rpcRequest,\n selectedRows,\n }) as Promise<T>;\n } else {\n console.log(`no implementation for PRC service ${rpcRequest.rpcName}`);\n }\n }\n\n async menuRpcCall(\n rpcRequest: Omit<ClientToServerMenuRPC, \"vpId\"> | ClientToServerEditRpc\n ): Promise<\n | MenuRpcResponse\n | VuuUIMessageInRPCEditReject\n | VuuUIMessageInRPCEditResponse\n | undefined\n > {\n const rpcService = this.#rpcServices?.find(\n (service) =>\n service.rpcName === (rpcRequest as ClientToServerMenuRPC).rpcName\n );\n\n if (rpcService) {\n switch (rpcRequest.type) {\n case \"VIEW_PORT_MENU_ROW_RPC\":\n case \"VIEW_PORT_MENUS_SELECT_RPC\": {\n // selectedRowIds is specific to the client implementation. Because the dataSource\n // itself stores the selected rows (rather than server) we need to inject these\n // here so rpc service has access to them. In Vuu scenario, Vuu server module would\n // already know selected rows.\n return rpcService.service({\n ...rpcRequest,\n // vpId: this.viewport,\n selectedRowIds: this.getSelectedRowIds(),\n // include table for now in the rpcRequest. In future we will support\n //a viewportId, same as server, but for that we have to map viewports\n // to tables in module.\n table: this.tableSchema.table,\n } as any) as any;\n }\n default:\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 createSessionDataSource(vuuTable: VuuTable) {\n const table = this.#sessionTables?.[vuuTable.table];\n if (table) {\n return new TickingArrayDataSource({\n columnDescriptors: table.schema.columns,\n keyColumn: table.schema.key,\n table,\n rpcServices: this.#rpcServices,\n });\n } else {\n throw Error(\n \"TickingDataSource cannot create session datasource, no session table ${table.table}\"\n );\n }\n }\n}\n"],"names":["metadataKeys","ArrayDataSource","makeSuggestions"],"mappings":"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"}
|
|
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 DataSourceRow,\n MenuRpcResponse,\n RpcResponse,\n Selection,\n SelectionItem,\n SubscribeCallback,\n SubscribeProps,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInRPCEditResponse,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n ClientToServerEditRpc,\n ClientToServerMenuRPC,\n ClientToServerViewportRpcCall,\n LinkDescriptorWithLabel,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { VuuBroadcastChannel, metadataKeys } from \"@vuu-ui/vuu-utils\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport { Table } from \"./Table\";\nimport { RpcService, SessionTableMap } from \"./VuuModule\";\n\nconst { KEY } = metadataKeys;\n\nexport interface TickingArrayDataSourceConstructorProps\n extends Omit<ArrayDataSourceConstructorProps, \"data\"> {\n data?: Array<VuuRowDataItemType[]>;\n menu?: VuuMenu;\n menuRpcServices?: RpcService[];\n rpcServices?: RpcService[];\n sessionTables?: SessionTableMap;\n table?: Table;\n visualLinks?: LinkDescriptorWithLabel[];\n}\n\ntype DataSourceBroadcastSubscribeMessage = {\n type: \"subscribe-link-filter\" | \"subscribe-link-select\" | \"unsubscribe\";\n targetId: string;\n targetColumn: string;\n sourceId: string;\n sourceColumn?: string;\n};\n\ntype DataSourceBroadcastSelectionMessage = {\n sourceColumnName?: string;\n columnName: string;\n linkType: \"subscribe-link-filter\" | \"subscribe-link-select\";\n targetId: string;\n type: \"selection-changed\";\n selectedValues: string[];\n sourceId: string;\n};\n\ntype DataSourceBroadcastMessage =\n | DataSourceBroadcastSubscribeMessage\n | DataSourceBroadcastSelectionMessage;\n\nconst isMessageForSelf = (message: DataSourceBroadcastMessage, id: string) =>\n message.targetId === id;\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 #rpcServices: RpcService[] | undefined;\n // A reference to session tables hosted within client side module\n #sessionTables: SessionTableMap | undefined;\n #table?: Table;\n #broadcastChannel: VuuBroadcastChannel<DataSourceBroadcastMessage> =\n new BroadcastChannel(\"vuu-datasource\");\n #selectionLinkSubscribers: Map<string, LinkSubscription> | undefined;\n\n constructor({\n data,\n menuRpcServices,\n rpcServices,\n sessionTables,\n table,\n menu,\n visualLinks,\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 this.#menuRpcServices = menuRpcServices;\n this.#sessionTables = sessionTables;\n this.#rpcServices = rpcServices;\n this.#table = table;\n this.links = visualLinks;\n\n if (table) {\n this.tableSchema = table.schema;\n table.on(\"insert\", this.insert);\n table.on(\"update\", this.updateRow);\n }\n\n this.#broadcastChannel.onmessage = (evt) => {\n if (isMessageForSelf(evt.data, this.viewport)) {\n this.receiveBroadcastMessage(evt.data);\n }\n };\n }\n\n async subscribe(subscribeProps: SubscribeProps, callback: SubscribeCallback) {\n const subscription = super.subscribe(subscribeProps, callback);\n // if (subscribeProps.range) {\n // this.#updateGenerator?.setRange(subscribeProps.range);\n // }\n return subscription;\n }\n\n set range(range: VuuRange) {\n super.range = range;\n // this.#updateGenerator?.setRange(range);\n }\n get range() {\n return super.range;\n }\n\n private pickUniqueSelectedValues(column: string) {\n const map = this.columnMap;\n const set = new Set();\n const colIndex = map[column];\n for (const row of this.getSelectedRows()) {\n set.add(row[colIndex]);\n }\n return Array.from(set) as string[];\n }\n\n select(selected: Selection) {\n super.select(selected);\n const numberOfSelectionSubscribers =\n this.#selectionLinkSubscribers?.size ?? 0;\n if (numberOfSelectionSubscribers > 0) {\n this.#selectionLinkSubscribers?.forEach(\n ({ sourceColumnName, columnName, linkType }, targetId) => {\n this.sendBroadcastMessage({\n sourceColumnName,\n columnName,\n linkType,\n sourceId: this.viewport,\n targetId,\n type: \"selection-changed\",\n selectedValues: this.pickUniqueSelectedValues(columnName),\n });\n }\n );\n }\n }\n\n private getSelectedRows() {\n return this.selectedRows.reduce<DataSourceRow[]>(\n (rows: DataSourceRow[], selected: SelectionItem) => {\n if (Array.isArray(selected)) {\n for (let i = selected[0]; i <= selected[1]; i++) {\n const row = this.data[i];\n if (row) {\n rows.push(row);\n }\n }\n } else {\n const row = this.data[selected];\n if (row) {\n rows.push(row);\n }\n }\n return rows;\n },\n []\n );\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 row: DataSourceRow,\n columnName: string,\n value: VuuRowDataItemType\n ): Promise<true> {\n const key = row[KEY];\n this.#table?.update(key, columnName, value);\n return Promise.resolve(true);\n }\n\n async rpcCall<T extends RpcResponse = RpcResponse>(\n rpcRequest: Omit<ClientToServerViewportRpcCall, \"vpId\">\n ): Promise<T | undefined> {\n const rpcService = this.#rpcServices?.find(\n (service) =>\n service.rpcName ===\n (rpcRequest as ClientToServerViewportRpcCall).rpcName\n );\n\n if (rpcService) {\n switch (rpcRequest.rpcName) {\n case \"VP_BULK_EDIT_COLUMN_CELLS_RPC\": {\n return rpcService.service(rpcRequest) as Promise<T>;\n }\n }\n const selectedRows = this.getSelectedRows();\n return rpcService.service({\n ...rpcRequest,\n selectedRows,\n }) as Promise<T>;\n } else {\n console.log(`no implementation for PRC service ${rpcRequest.rpcName}`);\n }\n }\n\n async menuRpcCall(\n rpcRequest: Omit<ClientToServerMenuRPC, \"vpId\"> | ClientToServerEditRpc\n ): Promise<\n | MenuRpcResponse\n | VuuUIMessageInRPCEditReject\n | VuuUIMessageInRPCEditResponse\n | undefined\n > {\n const rpcService = this.#rpcServices?.find(\n (service) =>\n service.rpcName === (rpcRequest as ClientToServerMenuRPC).rpcName\n );\n\n if (rpcService) {\n switch (rpcRequest.type) {\n case \"VIEW_PORT_MENU_ROW_RPC\":\n case \"VIEW_PORT_MENUS_SELECT_RPC\": {\n // selectedRowIds is specific to the client implementation. Because the dataSource\n // itself stores the selected rows (rather than server) we need to inject these\n // here so rpc service has access to them. In Vuu scenario, Vuu server module would\n // already know selected rows.\n return rpcService.service({\n ...rpcRequest,\n // vpId: this.viewport,\n selectedRowIds: this.getSelectedRowIds(),\n // include table for now in the rpcRequest. In future we will support\n //a viewportId, same as server, but for that we have to map viewports\n // to tables in module.\n table: this.tableSchema.table,\n } as any) as any;\n }\n default:\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 createSessionDataSource(vuuTable: VuuTable) {\n const table = this.#sessionTables?.[vuuTable.table];\n if (table) {\n return new TickingArrayDataSource({\n columnDescriptors: table.schema.columns,\n keyColumn: table.schema.key,\n table,\n rpcServices: this.#rpcServices,\n });\n } else {\n throw Error(\n \"TickingDataSource cannot create session datasource, no session table ${table.table}\"\n );\n }\n }\n\n sendBroadcastMessage(message: DataSourceBroadcastMessage) {\n this.#broadcastChannel.postMessage(message);\n }\n\n protected receiveBroadcastMessage = (message: DataSourceBroadcastMessage) => {\n switch (message.type) {\n case \"subscribe-link-filter\":\n case \"subscribe-link-select\":\n {\n const subscribers =\n this.#selectionLinkSubscribers ||\n (this.#selectionLinkSubscribers = new Map<\n string,\n LinkSubscription\n >());\n subscribers.set(message.sourceId, {\n sourceColumnName: message.sourceColumn,\n columnName: message.targetColumn,\n linkType: message.type,\n });\n }\n break;\n\n case \"selection-changed\":\n {\n const { sourceColumnName, columnName, linkType, selectedValues } =\n message;\n const selectedIndices = [];\n const colIndex = this.columnMap[columnName];\n if (linkType === \"subscribe-link-select\") {\n for (const value of selectedValues) {\n const index = this.data.findIndex(\n (row) => row[colIndex] === value\n );\n selectedIndices.push(index);\n }\n this.select(selectedIndices);\n } else {\n this.filter = {\n filter: `${sourceColumnName} in [\"${selectedValues.join(\n '\",\"'\n )}\"]`,\n };\n }\n }\n\n break;\n default:\n console.log(`unrecognised message ${message.type}`);\n }\n };\n\n set visualLink(visualLink: LinkDescriptorWithLabel | undefined) {\n if (visualLink) {\n const {\n parentClientVpId,\n link: { fromColumn, toColumn },\n } = visualLink;\n\n if (this.viewport) {\n console.log(\"tables linked\");\n this.sendBroadcastMessage({\n sourceId: this.viewport,\n sourceColumn: fromColumn,\n type: \"subscribe-link-filter\",\n targetId: parentClientVpId,\n targetColumn: toColumn,\n });\n }\n }\n }\n}\n"],"names":["metadataKeys","ArrayDataSource","makeSuggestions"],"mappings":"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"}
|
package/cjs/VuuModule.js
CHANGED
|
@@ -23,8 +23,9 @@ var __privateSet = (obj, member, value, setter) => {
|
|
|
23
23
|
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
24
24
|
return value;
|
|
25
25
|
};
|
|
26
|
-
var _menus, _name, _schemas, _sessionTableMap, _tables, _tableServices, _visualLinks, _moduleServices;
|
|
26
|
+
var _menus, _name, _schemas, _sessionTableMap, _tables, _tableServices, _visualLinks, _subscriptionMap, _moduleServices;
|
|
27
27
|
const withParams = (rpcRequest) => "selectedRows" in rpcRequest || "selectedRowIds" in rpcRequest;
|
|
28
|
+
const withNamedParams = (rpcRequest) => "namedParams" in rpcRequest;
|
|
28
29
|
class VuuModule {
|
|
29
30
|
constructor({
|
|
30
31
|
menus,
|
|
@@ -32,7 +33,7 @@ class VuuModule {
|
|
|
32
33
|
schemas,
|
|
33
34
|
services,
|
|
34
35
|
tables,
|
|
35
|
-
visualLinks
|
|
36
|
+
vuuLinks: visualLinks
|
|
36
37
|
}) {
|
|
37
38
|
__privateAdd(this, _menus, void 0);
|
|
38
39
|
__privateAdd(this, _name, void 0);
|
|
@@ -41,15 +42,44 @@ class VuuModule {
|
|
|
41
42
|
__privateAdd(this, _tables, void 0);
|
|
42
43
|
__privateAdd(this, _tableServices, void 0);
|
|
43
44
|
__privateAdd(this, _visualLinks, void 0);
|
|
44
|
-
this
|
|
45
|
-
console.log("<subscription-open> register new viewport", {
|
|
46
|
-
subscriptionDetails
|
|
47
|
-
});
|
|
48
|
-
};
|
|
45
|
+
__privateAdd(this, _subscriptionMap, /* @__PURE__ */ new Map());
|
|
49
46
|
this.unregisterViewport = (viewportId) => {
|
|
50
47
|
console.log(`<subscription-closed> unregister viewport ${viewportId}`);
|
|
48
|
+
for (const [tableName, subscriptions] of __privateGet(this, _subscriptionMap)) {
|
|
49
|
+
if (subscriptions[0].viewportId.toString() === viewportId) {
|
|
50
|
+
__privateGet(this, _subscriptionMap).delete(tableName);
|
|
51
|
+
} else {
|
|
52
|
+
const links = subscriptions[0].dataSource.links;
|
|
53
|
+
if (links) {
|
|
54
|
+
for (let i = 0; i < links?.length; i++) {
|
|
55
|
+
if (links[i].parentClientVpId === viewportId) {
|
|
56
|
+
links.splice(i);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
subscriptions[0].dataSource.links = links;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
this.getLink = (subscriptionMap, vuuLinks) => {
|
|
65
|
+
const visualLinks = [];
|
|
66
|
+
for (let i = 0; i < vuuLinks.length; i++) {
|
|
67
|
+
if (subscriptionMap.get(vuuLinks[i].toTable)) {
|
|
68
|
+
const newLink = {
|
|
69
|
+
parentClientVpId: subscriptionMap.get(vuuLinks[i].toTable)?.[0].viewportId,
|
|
70
|
+
parentVpId: subscriptionMap.get(vuuLinks[i].toTable)?.[0].viewportId,
|
|
71
|
+
link: vuuLinks[i]
|
|
72
|
+
};
|
|
73
|
+
visualLinks.push(newLink);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return visualLinks;
|
|
51
77
|
};
|
|
52
78
|
this.createDataSource = (tableName) => {
|
|
79
|
+
const visualLinks = __privateGet(this, _visualLinks)?.[tableName] === void 0 ? void 0 : this.getLink(
|
|
80
|
+
__privateGet(this, _subscriptionMap),
|
|
81
|
+
__privateGet(this, _visualLinks)[tableName]
|
|
82
|
+
);
|
|
53
83
|
const columnDescriptors = this.getColumnDescriptors(tableName);
|
|
54
84
|
const dataSource = new TickingArrayDataSource.TickingArrayDataSource({
|
|
55
85
|
columnDescriptors,
|
|
@@ -58,10 +88,24 @@ class VuuModule {
|
|
|
58
88
|
menu: __privateGet(this, _menus)?.[tableName],
|
|
59
89
|
rpcServices: this.getServices(tableName),
|
|
60
90
|
sessionTables: __privateGet(this, _sessionTableMap),
|
|
61
|
-
visualLinks
|
|
91
|
+
visualLinks
|
|
62
92
|
});
|
|
63
|
-
dataSource.on("subscribed", this.registerViewport);
|
|
64
93
|
dataSource.on("unsubscribed", this.unregisterViewport);
|
|
94
|
+
__privateGet(this, _subscriptionMap).set(tableName, [
|
|
95
|
+
{ viewportId: dataSource.viewport, dataSource }
|
|
96
|
+
]);
|
|
97
|
+
for (const key of __privateGet(this, _subscriptionMap).keys()) {
|
|
98
|
+
if (__privateGet(this, _visualLinks)?.[key] && key !== tableName) {
|
|
99
|
+
const vLink = this.getLink(
|
|
100
|
+
__privateGet(this, _subscriptionMap),
|
|
101
|
+
__privateGet(this, _visualLinks)?.[key]
|
|
102
|
+
);
|
|
103
|
+
const ds = __privateGet(this, _subscriptionMap).get(key)?.[0].dataSource;
|
|
104
|
+
if (ds?.links) {
|
|
105
|
+
ds.links = vLink;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
65
109
|
return dataSource;
|
|
66
110
|
};
|
|
67
111
|
this.suggestionFetcher = ([
|
|
@@ -114,7 +158,7 @@ class VuuModule {
|
|
|
114
158
|
};
|
|
115
159
|
// Bulk-edit with input in session table
|
|
116
160
|
this.applyBulkEdits = async (rpcRequest) => {
|
|
117
|
-
if (
|
|
161
|
+
if (withNamedParams(rpcRequest)) {
|
|
118
162
|
const sessionTable = this.getSessionTable();
|
|
119
163
|
for (let i = 0; i < sessionTable.data.length; i++) {
|
|
120
164
|
const newRow = sessionTable.data[i];
|
|
@@ -230,8 +274,10 @@ _sessionTableMap = new WeakMap();
|
|
|
230
274
|
_tables = new WeakMap();
|
|
231
275
|
_tableServices = new WeakMap();
|
|
232
276
|
_visualLinks = new WeakMap();
|
|
277
|
+
_subscriptionMap = new WeakMap();
|
|
233
278
|
_moduleServices = new WeakMap();
|
|
234
279
|
|
|
235
280
|
exports.VuuModule = VuuModule;
|
|
281
|
+
exports.withNamedParams = withNamedParams;
|
|
236
282
|
exports.withParams = withParams;
|
|
237
283
|
//# sourceMappingURL=VuuModule.js.map
|
package/cjs/VuuModule.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VuuModule.js","sources":["../src/VuuModule.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceRow,\n DataSourceSubscribedMessage,\n OpenDialogActionWithSchema,\n SuggestionFetcher,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n ClientToServerMenuRPC,\n ClientToServerViewportRpcCall,\n LinkDescriptorWithLabel,\n TypeaheadParams,\n VuuMenu,\n VuuRowDataItemType,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { uuid } from \"@vuu-ui/vuu-utils\";\nimport { Table, buildDataColumnMapFromSchema } from \"./Table\";\nimport { TickingArrayDataSource } from \"./TickingArrayDataSource\";\nimport { makeSuggestions } from \"./makeSuggestions\";\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 visualLinks?: Record<T, LinkDescriptorWithLabel[] | undefined>;\n}\n\nexport type SessionTableMap = Record<string, Table>;\n\nexport type RpcServiceRequestWithParams = Omit<\n ClientToServerViewportRpcCall,\n \"vpId\"\n> & {\n namedParams?: { [key: string]: unknown };\n selectedRows?: DataSourceRow[];\n selectedRowIds?: string[];\n table?: VuuTable;\n};\nexport type RpcServiceRequest =\n | RpcServiceRequestWithParams\n | Omit<ClientToServerMenuRPC, \"vpId\">;\n\nexport const withParams = (\n rpcRequest: RpcServiceRequest\n): rpcRequest is RpcServiceRequestWithParams =>\n \"selectedRows\" in rpcRequest || \"selectedRowIds\" in rpcRequest;\n\nexport type RpcService = {\n rpcName: string;\n service: (rpcRequest: RpcServiceRequest) => Promise<unknown>;\n};\n\nexport class VuuModule<T extends string = string> implements IVuuModule<T> {\n #menus: Record<T, VuuMenu | undefined> | undefined;\n #name: string;\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, LinkDescriptorWithLabel[] | undefined> | undefined;\n\n constructor({\n menus,\n name,\n schemas,\n services,\n tables,\n 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 registerViewport = (\n subscriptionDetails: DataSourceSubscribedMessage\n ) => {\n console.log(\"<subscription-open> register new viewport\", {\n subscriptionDetails,\n });\n };\n\n private unregisterViewport = (viewportId: string) => {\n console.log(`<subscription-closed> unregister viewport ${viewportId}`);\n };\n\n createDataSource = (tableName: T) => {\n const columnDescriptors = this.getColumnDescriptors(tableName);\n const dataSource = new TickingArrayDataSource({\n columnDescriptors,\n keyColumn:\n this.#schemas[tableName] === undefined\n ? this.#sessionTableMap[tableName].schema.key\n : this.#schemas[tableName].key,\n table: this.#tables[tableName] || this.#sessionTableMap[tableName],\n menu: this.#menus?.[tableName],\n rpcServices: this.getServices(tableName),\n sessionTables: this.#sessionTableMap,\n visualLinks: this.#visualLinks?.[tableName],\n });\n\n dataSource.on(\"subscribed\", this.registerViewport);\n dataSource.on(\"unsubscribed\", this.unregisterViewport);\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 private getSessionTable() {\n if (Object.keys(this.#sessionTableMap).length === 1) {\n const [sessionTable] = Object.values(this.#sessionTableMap);\n return sessionTable;\n } else {\n throw Error(\n \"getSessionTable: should never be more than one session table in map\"\n );\n }\n }\n\n private getColumnDescriptors(tableName: T) {\n const schema = this.#schemas[tableName] || this.getSessionTable()?.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 = async (rpcRequest: RpcServiceRequest) => {\n if (withParams(rpcRequest)) {\n const { selectedRowIds, table } = rpcRequest;\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 = `${table.table}-${uuid()}`;\n this.#sessionTableMap[sessionTableName] = sessionTable;\n\n return {\n action: {\n renderComponent: \"grid\",\n table: {\n module: \"SIMUL\",\n table: sessionTableName,\n },\n tableSchema: dataTable.schema,\n type: \"OPEN_DIALOG_ACTION\",\n } as OpenDialogActionWithSchema,\n requestId: \"request_id\",\n rpcName: \"VP_BULK_EDIT_BEGIN_RPC\",\n };\n } else {\n return {\n requestId: \"request_id\",\n rpcName: \"VP_BULK_EDIT_REJECT\",\n };\n }\n }\n }\n };\n\n // Bulk-edit with input in session table\n private applyBulkEdits = async (rpcRequest: RpcServiceRequest) => {\n if (withParams(rpcRequest)) {\n const sessionTable = this.getSessionTable();\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(String(newRow[keyIndex]), column as string, value);\n }\n return {\n action: {\n type: \"NO_ACTION\",\n },\n requestId: \"request_id\",\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n };\n }\n };\n\n // Save session table data to main table\n private saveBulkEdits = async () => {\n const sessionTable = this.getSessionTable();\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 Object.keys(this.#sessionTableMap).forEach((key) => {\n delete this.#sessionTableMap[key];\n });\n\n return {\n action: {\n type: \"NO_ACTION\",\n },\n requestId: \"request_id\",\n rpcName: \"VP_BULK_EDIT_SUBMIT_RPC\",\n };\n }\n };\n\n private 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}\n"],"names":["TickingArrayDataSource","makeSuggestions","uuid","Table","buildDataColumnMapFromSchema"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VuuModule.js","sources":["../src/VuuModule.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceRow,\n OpenDialogActionWithSchema,\n SuggestionFetcher,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n ClientToServerMenuRPC,\n ClientToServerViewportRpcCall,\n TypeaheadParams,\n VuuMenu,\n VuuRowDataItemType,\n VuuTable,\n VuuLink,\n LinkDescriptorWithLabel,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { uuid } from \"@vuu-ui/vuu-utils\";\nimport { Table, buildDataColumnMapFromSchema } from \"./Table\";\nimport { TickingArrayDataSource } from \"./TickingArrayDataSource\";\nimport { makeSuggestions } from \"./makeSuggestions\";\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 = Omit<\n ClientToServerViewportRpcCall,\n \"vpId\"\n> & {\n namedParams?: { [key: string]: unknown };\n selectedRows?: DataSourceRow[];\n selectedRowIds?: string[];\n table?: VuuTable;\n};\nexport type RpcServiceRequest =\n | RpcServiceRequestWithParams\n | Omit<ClientToServerMenuRPC, \"vpId\">;\n\nexport const withParams = (\n rpcRequest: RpcServiceRequest\n): rpcRequest is RpcServiceRequestWithParams =>\n \"selectedRows\" in rpcRequest || \"selectedRowIds\" in rpcRequest;\n\nexport const withNamedParams = (\n rpcRequest: RpcServiceRequest\n): rpcRequest is RpcServiceRequestWithParams => \"namedParams\" in rpcRequest;\n\nexport type RpcService = {\n rpcName: string;\n service: (rpcRequest: RpcServiceRequest) => Promise<unknown>;\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 #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 console.log(`<subscription-closed> unregister viewport ${viewportId}`);\n\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 getLink = (\n subscriptionMap: Map<string, Subscription[]>,\n vuuLinks: VuuLink[]\n ) => {\n const visualLinks: LinkDescriptorWithLabel[] = [];\n for (let i = 0; i < vuuLinks.length; i++) {\n if (subscriptionMap.get(vuuLinks[i].toTable)) {\n const newLink: LinkDescriptorWithLabel = {\n parentClientVpId: subscriptionMap.get(vuuLinks[i].toTable)?.[0]\n .viewportId as string,\n parentVpId: subscriptionMap.get(vuuLinks[i].toTable)?.[0]\n .viewportId as string,\n link: vuuLinks[i],\n };\n visualLinks.push(newLink);\n }\n }\n return visualLinks;\n };\n\n createDataSource = (tableName: T) => {\n const visualLinks =\n this.#visualLinks?.[tableName] === undefined\n ? undefined\n : this.getLink(\n this.#subscriptionMap,\n this.#visualLinks[tableName] as VuuLink[]\n );\n const columnDescriptors = this.getColumnDescriptors(tableName);\n const dataSource = new TickingArrayDataSource({\n columnDescriptors,\n keyColumn:\n this.#schemas[tableName] === undefined\n ? this.#sessionTableMap[tableName].schema.key\n : this.#schemas[tableName].key,\n table: this.#tables[tableName] || this.#sessionTableMap[tableName],\n menu: this.#menus?.[tableName],\n rpcServices: this.getServices(tableName),\n sessionTables: this.#sessionTableMap,\n visualLinks,\n });\n\n dataSource.on(\"unsubscribed\", this.unregisterViewport);\n\n this.#subscriptionMap.set(tableName, [\n { viewportId: dataSource.viewport, dataSource },\n ]);\n\n for (const key of this.#subscriptionMap.keys()) {\n if (this.#visualLinks?.[key as T] && key !== tableName) {\n const vLink = this.getLink(\n this.#subscriptionMap,\n this.#visualLinks?.[key as T] as VuuLink[]\n );\n const ds = this.#subscriptionMap.get(key)?.[0].dataSource;\n if (ds?.links) {\n ds.links = vLink;\n }\n }\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 private getSessionTable() {\n if (Object.keys(this.#sessionTableMap).length === 1) {\n const [sessionTable] = Object.values(this.#sessionTableMap);\n return sessionTable;\n } else {\n throw Error(\n \"getSessionTable: should never be more than one session table in map\"\n );\n }\n }\n\n private getColumnDescriptors(tableName: T) {\n const schema = this.#schemas[tableName] || this.getSessionTable()?.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 = async (rpcRequest: RpcServiceRequest) => {\n if (withParams(rpcRequest)) {\n const { selectedRowIds, table } = rpcRequest;\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 = `${table.table}-${uuid()}`;\n this.#sessionTableMap[sessionTableName] = sessionTable;\n\n return {\n action: {\n renderComponent: \"grid\",\n table: {\n module: \"SIMUL\",\n table: sessionTableName,\n },\n tableSchema: dataTable.schema,\n type: \"OPEN_DIALOG_ACTION\",\n } as OpenDialogActionWithSchema,\n requestId: \"request_id\",\n rpcName: \"VP_BULK_EDIT_BEGIN_RPC\",\n };\n } else {\n return {\n requestId: \"request_id\",\n rpcName: \"VP_BULK_EDIT_REJECT\",\n };\n }\n }\n }\n };\n\n // Bulk-edit with input in session table\n private applyBulkEdits = async (rpcRequest: RpcServiceRequest) => {\n if (withNamedParams(rpcRequest)) {\n const sessionTable = this.getSessionTable();\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(String(newRow[keyIndex]), column as string, value);\n }\n return {\n action: {\n type: \"NO_ACTION\",\n },\n requestId: \"request_id\",\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n };\n }\n };\n\n // Save session table data to main table\n private saveBulkEdits = async () => {\n const sessionTable = this.getSessionTable();\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 Object.keys(this.#sessionTableMap).forEach((key) => {\n delete this.#sessionTableMap[key];\n });\n\n return {\n action: {\n type: \"NO_ACTION\",\n },\n requestId: \"request_id\",\n rpcName: \"VP_BULK_EDIT_SUBMIT_RPC\",\n };\n }\n };\n\n private 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}\n"],"names":["TickingArrayDataSource","makeSuggestions","uuid","Table","buildDataColumnMapFromSchema"],"mappings":"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"}
|
|
@@ -166,10 +166,12 @@ const tables = {
|
|
|
166
166
|
tableMaps.priceStrategyType
|
|
167
167
|
)
|
|
168
168
|
};
|
|
169
|
-
const
|
|
169
|
+
const vuuLinks = {
|
|
170
170
|
algoType: void 0,
|
|
171
171
|
basket: void 0,
|
|
172
|
-
basketConstituent:
|
|
172
|
+
basketConstituent: [
|
|
173
|
+
{ fromColumn: "basketId", toColumn: "id", toTable: "basket" }
|
|
174
|
+
],
|
|
173
175
|
basketTrading: void 0,
|
|
174
176
|
basketTradingConstituent: void 0,
|
|
175
177
|
basketTradingConstituentJoin: void 0,
|
|
@@ -228,7 +230,7 @@ const basketModule = new VuuModule.VuuModule({
|
|
|
228
230
|
schemas: basketSchemas.schemas,
|
|
229
231
|
services,
|
|
230
232
|
tables,
|
|
231
|
-
|
|
233
|
+
vuuLinks
|
|
232
234
|
});
|
|
233
235
|
|
|
234
236
|
exports.basketModule = basketModule;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basket-module.js","sources":["../../src/basket/basket-module.ts"],"sourcesContent":["import {\n LinkDescriptorWithLabel,\n VuuMenu,\n VuuRowDataItemType,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap } from \"@vuu-ui/vuu-utils\";\nimport pricesTable from \"./reference-data/prices\";\nimport { joinTables, Table } from \"../Table\";\nimport { BasketsTableName, schemas } from \"./basket-schemas\";\nimport basketConstituentData from \"./reference-data/constituents\";\nimport {\n RpcService,\n RpcServiceRequest,\n VuuModule,\n withParams,\n} from \"../VuuModule\";\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\n/**\n * BasketConstituent\n */\n\nconst basketConstituent = new Table(\n schemas.basketConstituent,\n basketConstituentData,\n tableMaps.basketConstituent\n);\n\n/**\n * BasketTrading\n */\nconst basketTrading = new Table(\n schemas.basketTrading,\n [],\n tableMaps.basketTrading\n);\n\nlet basketIncrement = 1;\n/**\n * BasketTradingConstituent\n */\nconst basketTradingConstituent = new Table(\n schemas.basketTradingConstituent,\n [],\n tableMaps.basketTradingConstituent\n);\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\nfunction createTradingBasket(basketId: string, basketName: string) {\n const basketTradingRow = createBasketTradingRow(basketId, basketName);\n\n basketTrading.insert(basketTradingRow);\n\n const { basketId: key } = buildDataColumnMap(\"basketConstituent\");\n const constituents = basketConstituent.data.filter(\n (c) => c[key] === basketId\n );\n\n const { instanceId } = tableMaps.basketTrading;\n\n constituents.forEach(([, , 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 // return the key\n return basketTradingRow[instanceId] as string;\n}\n\nasync function addConstituent(rpcRequest: RpcServiceRequest) {\n console.log(`RPC call erceived ${rpcRequest.rpcName}`);\n}\nasync function sendToMarket(rpcRequest: RpcServiceRequest) {\n if (withParams(rpcRequest)) {\n const [basketInstanceId] = rpcRequest.params;\n basketTrading.update(basketInstanceId, \"status\", \"ON_MARKET\");\n }\n}\nasync function takeOffMarket(rpcRequest: RpcServiceRequest) {\n if (withParams(rpcRequest)) {\n const [basketInstanceId] = rpcRequest.params;\n basketTrading.update(basketInstanceId, \"status\", \"OFF-MARKET\");\n }\n}\n\nasync function createNewBasket(rpcRequest: RpcServiceRequest) {\n if (withParams(rpcRequest)) {\n const {\n params: [basketId, basketName],\n } = rpcRequest;\n const key = createTradingBasket(basketId, basketName);\n return {\n action: {\n type: \"VP_CREATE_SUCCESS\",\n key,\n },\n };\n }\n}\n\n//-------------------\n\nexport const tables: Record<BasketsTableName, Table> = {\n algoType: new Table(\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: new Table(\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,\n basketTrading,\n basketTradingConstituent,\n basketTradingConstituentJoin: joinTables(\n { module: \"BASKET\", table: \"basketTradingConstituentJoin\" },\n basketTradingConstituent,\n pricesTable,\n \"ric\"\n ),\n priceStrategyType: new Table(\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\nconst visualLinks: Record<\n BasketsTableName,\n LinkDescriptorWithLabel[] | undefined\n> = {\n algoType: undefined,\n basket: undefined,\n basketConstituent: undefined,\n basketTrading: undefined,\n basketTradingConstituent: undefined,\n basketTradingConstituentJoin: undefined,\n priceStrategyType: undefined,\n};\n\nconst menus: Record<BasketsTableName, VuuMenu | undefined> = {\n algoType: undefined,\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 basketConstituent: undefined,\n basketTrading: undefined,\n basketTradingConstituent: undefined,\n basketTradingConstituentJoin: undefined,\n priceStrategyType: undefined,\n};\n\nconst services: Record<BasketsTableName, RpcService[] | undefined> = {\n algoType: undefined,\n basket: [\n {\n rpcName: \"createBasket\",\n service: createNewBasket,\n },\n ],\n basketConstituent: undefined,\n basketTrading: [\n {\n rpcName: \"sendToMarket\",\n service: sendToMarket,\n },\n {\n rpcName: \"takeOffMarket\",\n service: takeOffMarket,\n },\n ],\n basketTradingConstituent: undefined,\n basketTradingConstituentJoin: [\n {\n rpcName: \"addConstituent\",\n service: addConstituent,\n },\n ],\n priceStrategyType: undefined,\n};\n\nexport const basketModule = new VuuModule<BasketsTableName>({\n menus,\n name: \"BASKET\",\n schemas,\n services,\n tables,\n visualLinks,\n});\n"],"names":["schemas","Table","basketConstituentData","withParams","joinTables","pricesTable","VuuModule"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"basket-module.js","sources":["../../src/basket/basket-module.ts"],"sourcesContent":["import {\n VuuLink,\n VuuMenu,\n VuuRowDataItemType,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap } from \"@vuu-ui/vuu-utils\";\nimport pricesTable from \"./reference-data/prices\";\nimport { joinTables, Table } from \"../Table\";\nimport { BasketsTableName, schemas } from \"./basket-schemas\";\nimport basketConstituentData from \"./reference-data/constituents\";\nimport {\n RpcService,\n RpcServiceRequest,\n VuuModule,\n withParams,\n} from \"../VuuModule\";\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\n/**\n * BasketConstituent\n */\n\nconst basketConstituent = new Table(\n schemas.basketConstituent,\n basketConstituentData,\n tableMaps.basketConstituent\n);\n\n/**\n * BasketTrading\n */\nconst basketTrading = new Table(\n schemas.basketTrading,\n [],\n tableMaps.basketTrading\n);\n\nlet basketIncrement = 1;\n/**\n * BasketTradingConstituent\n */\nconst basketTradingConstituent = new Table(\n schemas.basketTradingConstituent,\n [],\n tableMaps.basketTradingConstituent\n);\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\nfunction createTradingBasket(basketId: string, basketName: string) {\n const basketTradingRow = createBasketTradingRow(basketId, basketName);\n\n basketTrading.insert(basketTradingRow);\n\n const { basketId: key } = buildDataColumnMap(\"basketConstituent\");\n const constituents = basketConstituent.data.filter(\n (c) => c[key] === basketId\n );\n\n const { instanceId } = tableMaps.basketTrading;\n\n constituents.forEach(([, , 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 // return the key\n return basketTradingRow[instanceId] as string;\n}\n\nasync function addConstituent(rpcRequest: RpcServiceRequest) {\n console.log(`RPC call erceived ${rpcRequest.rpcName}`);\n}\nasync function sendToMarket(rpcRequest: RpcServiceRequest) {\n if (withParams(rpcRequest)) {\n const [basketInstanceId] = rpcRequest.params;\n basketTrading.update(basketInstanceId, \"status\", \"ON_MARKET\");\n }\n}\nasync function takeOffMarket(rpcRequest: RpcServiceRequest) {\n if (withParams(rpcRequest)) {\n const [basketInstanceId] = rpcRequest.params;\n basketTrading.update(basketInstanceId, \"status\", \"OFF-MARKET\");\n }\n}\n\nasync function createNewBasket(rpcRequest: RpcServiceRequest) {\n if (withParams(rpcRequest)) {\n const {\n params: [basketId, basketName],\n } = rpcRequest;\n const key = createTradingBasket(basketId, basketName);\n return {\n action: {\n type: \"VP_CREATE_SUCCESS\",\n key,\n },\n };\n }\n}\n\n//-------------------\n\nexport const tables: Record<BasketsTableName, Table> = {\n algoType: new Table(\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: new Table(\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,\n basketTrading,\n basketTradingConstituent,\n basketTradingConstituentJoin: joinTables(\n { module: \"BASKET\", table: \"basketTradingConstituentJoin\" },\n basketTradingConstituent,\n pricesTable,\n \"ric\"\n ),\n priceStrategyType: new Table(\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\nconst vuuLinks: Record<BasketsTableName, VuuLink[] | undefined> = {\n algoType: undefined,\n basket: undefined,\n basketConstituent: [\n { fromColumn: \"basketId\", toColumn: \"id\", toTable: \"basket\" },\n ],\n basketTrading: undefined,\n basketTradingConstituent: undefined,\n basketTradingConstituentJoin: undefined,\n priceStrategyType: undefined,\n};\n\nconst menus: Record<BasketsTableName, VuuMenu | undefined> = {\n algoType: undefined,\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 basketConstituent: undefined,\n basketTrading: undefined,\n basketTradingConstituent: undefined,\n basketTradingConstituentJoin: undefined,\n priceStrategyType: undefined,\n};\n\nconst services: Record<BasketsTableName, RpcService[] | undefined> = {\n algoType: undefined,\n basket: [\n {\n rpcName: \"createBasket\",\n service: createNewBasket,\n },\n ],\n basketConstituent: undefined,\n basketTrading: [\n {\n rpcName: \"sendToMarket\",\n service: sendToMarket,\n },\n {\n rpcName: \"takeOffMarket\",\n service: takeOffMarket,\n },\n ],\n basketTradingConstituent: undefined,\n basketTradingConstituentJoin: [\n {\n rpcName: \"addConstituent\",\n service: addConstituent,\n },\n ],\n priceStrategyType: undefined,\n};\n\nexport const basketModule = new VuuModule<BasketsTableName>({\n menus,\n name: \"BASKET\",\n schemas,\n services,\n tables,\n vuuLinks,\n});\n"],"names":["schemas","Table","basketConstituentData","withParams","joinTables","pricesTable","VuuModule"],"mappings":"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"}
|
package/cjs/index.js
CHANGED
|
@@ -40,5 +40,6 @@ exports.buildDataColumnMap = Table.buildDataColumnMap;
|
|
|
40
40
|
exports.buildDataColumnMapFromSchema = Table.buildDataColumnMapFromSchema;
|
|
41
41
|
exports.joinTables = Table.joinTables;
|
|
42
42
|
exports.VuuModule = VuuModule.VuuModule;
|
|
43
|
+
exports.withNamedParams = VuuModule.withNamedParams;
|
|
43
44
|
exports.withParams = VuuModule.withParams;
|
|
44
45
|
//# sourceMappingURL=index.js.map
|
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -39,7 +39,7 @@ const tables = {
|
|
|
39
39
|
),
|
|
40
40
|
prices: prices.pricesTable
|
|
41
41
|
};
|
|
42
|
-
const
|
|
42
|
+
const vuuLinks = {
|
|
43
43
|
...undefinedTables
|
|
44
44
|
};
|
|
45
45
|
const menus = {
|
|
@@ -114,7 +114,7 @@ const simulModule = new VuuModule.VuuModule({
|
|
|
114
114
|
schemas: simulSchemas.schemas,
|
|
115
115
|
services,
|
|
116
116
|
tables,
|
|
117
|
-
|
|
117
|
+
vuuLinks
|
|
118
118
|
});
|
|
119
119
|
|
|
120
120
|
exports.simulModule = simulModule;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simul-module.js","sources":["../../src/simul/simul-module.ts"],"sourcesContent":["import {\n ClientToServerMenuRowRPC,\n
|
|
1
|
+
{"version":3,"file":"simul-module.js","sources":["../../src/simul/simul-module.ts"],"sourcesContent":["import {\n ClientToServerMenuRowRPC,\n ShowNotificationAction,\n VuuLink,\n VuuMenu,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { Table, buildDataColumnMap, joinTables } from \"../Table\";\nimport { instrumentsTable } from \"./reference-data/instruments\";\nimport { instrumentsExtendedTable } from \"./reference-data/instruments-extended\";\nimport { ordersTable } from \"./reference-data/orders\";\nimport { pricesTable } from \"./reference-data/prices\";\nimport { schemas, type SimulTableName } from \"./simul-schemas\";\nimport { RpcService, RpcServiceRequest, VuuModule } from \"../VuuModule\";\nimport { MenuRpcResponse } from \"packages/vuu-data-types\";\n\nconst undefinedTables = {\n childOrders: undefined,\n instruments: undefined,\n instrumentsExtended: undefined,\n instrumentPrices: undefined,\n orders: undefined,\n parentOrders: undefined,\n prices: undefined,\n};\n\nconst tables: Record<SimulTableName, Table> = {\n childOrders: new Table(\n schemas.childOrders,\n [],\n buildDataColumnMap<SimulTableName>(schemas, \"childOrders\")\n ),\n instruments: instrumentsTable,\n instrumentsExtended: instrumentsExtendedTable,\n instrumentPrices: joinTables(\n { module: \"SIMUL\", table: \"instrumentPrices\" },\n instrumentsTable,\n pricesTable,\n \"ric\"\n ),\n orders: ordersTable,\n parentOrders: new Table(\n schemas.parentOrders,\n [],\n buildDataColumnMap<SimulTableName>(schemas, \"parentOrders\")\n ),\n prices: pricesTable,\n};\n\nconst vuuLinks: Record<SimulTableName, VuuLink[] | undefined> = {\n ...undefinedTables,\n};\n\nconst menus: Record<SimulTableName, VuuMenu | undefined> = {\n childOrders: undefined,\n instruments: {\n name: \"ROOT\",\n menus: [\n {\n context: \"selected-rows\",\n filter: \"\",\n name: \"Add Instruments To Order\",\n rpcName: \"ADD_INSTRUMENTS_TO_ORDER\",\n },\n {\n context: \"selected-rows\",\n filter: \"\",\n name: \"Edit Row\",\n rpcName: \"EDIT_ROW\",\n },\n {\n context: \"selected-rows\",\n filter: \"\",\n name: \"Edit Rows\",\n rpcName: \"VP_BULK_EDIT_BEGIN_RPC\",\n },\n ],\n },\n instrumentsExtended: undefined,\n instrumentPrices: undefined,\n orders: {\n name: \"ROOT\",\n menus: [\n {\n context: \"row\",\n filter: `status in [\"New\",\"Partial Exec\"]`,\n name: \"Cancel Order\",\n rpcName: \"CANCEL_ORDER\",\n },\n ],\n },\n parentOrders: undefined,\n prices: undefined,\n};\n\nasync function cancelOrder(\n rpcRequest: RpcServiceRequest\n): Promise<Omit<MenuRpcResponse<ShowNotificationAction>, \"requestId\">> {\n const { rowKey } = rpcRequest as ClientToServerMenuRowRPC;\n const table = tables.orders;\n const row = table.findByKey(rowKey);\n row[table.map.status] = \"Cancelled\";\n table.updateRow(row);\n\n return {\n action: {\n type: \"SHOW_NOTIFICATION_ACTION\",\n message: `Order id: ${rowKey}`,\n title: \"Order cancelled\",\n },\n rpcName: \"CANCEL_ORDER\",\n type: \"VIEW_PORT_MENU_RESP\",\n };\n}\n\nconst services: Record<SimulTableName, RpcService[] | undefined> = {\n ...undefinedTables,\n orders: [\n {\n rpcName: \"CANCEL_ORDER\",\n service: cancelOrder,\n },\n ],\n};\n\nexport const simulModule = new VuuModule<SimulTableName>({\n menus,\n name: \"SIMUL\",\n schemas,\n services,\n tables,\n vuuLinks,\n});\n"],"names":["Table","schemas","buildDataColumnMap","instrumentsTable","instrumentsExtendedTable","joinTables","pricesTable","ordersTable","VuuModule"],"mappings":"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"}
|