@vuu-ui/vuu-data-test 2.1.16 → 2.1.18

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.
@@ -36,20 +36,87 @@ class VuuModule {
36
36
  __privateAdd(this, _sessionTableMap, {});
37
37
  __privateAdd(this, _tableServices);
38
38
  __privateAdd(this, _subscriptionMap, /* @__PURE__ */ new Map());
39
+ __publicField(this, "handlePostSubscribeActivities", ({
40
+ clientViewportId,
41
+ tableSchema
42
+ }) => {
43
+ const visualLinks = this.getVisualLinks(tableSchema.table.table);
44
+ const { dataSource } = this.getSubscriptionByViewport(clientViewportId);
45
+ requestAnimationFrame(() => {
46
+ dataSource.links = visualLinks;
47
+ });
48
+ if (this.visualLinks && dataSource.tableSchema) {
49
+ const {
50
+ table: { table: sourceTable }
51
+ } = dataSource.tableSchema;
52
+ for (const [table, links] of Object.entries(
53
+ this.visualLinks
54
+ )) {
55
+ if (links) {
56
+ const potentialTargets = links.filter(
57
+ (l) => l.toTable === sourceTable
58
+ );
59
+ if (potentialTargets.length) {
60
+ for (const subscriptions of __privateGet(this, _subscriptionMap).values()) {
61
+ for (const { dataSource: dataSource2 } of subscriptions) {
62
+ if (dataSource2.tableSchema?.table.table === table) {
63
+ dataSource2.links = this.getVisualLinks(table);
64
+ }
65
+ }
66
+ }
67
+ }
68
+ }
69
+ }
70
+ }
71
+ });
39
72
  __publicField(this, "unregisterViewport", (viewportId) => {
40
- for (const [tableName, subscriptions] of __privateGet(this, _subscriptionMap)) {
73
+ const { dataSource } = this.getSubscriptionByViewport(viewportId);
74
+ const tableName = dataSource.tableSchema?.table.table;
75
+ if (tableName) {
76
+ const subscriptionsForTable = __privateGet(this, _subscriptionMap).get(tableName);
77
+ if (subscriptionsForTable) {
78
+ for (const { viewportId: vp } of subscriptionsForTable) {
79
+ if (vp === viewportId) {
80
+ if (subscriptionsForTable.length === 1) {
81
+ __privateGet(this, _subscriptionMap).delete(tableName);
82
+ } else {
83
+ __privateGet(this, _subscriptionMap).set(
84
+ tableName,
85
+ subscriptionsForTable.filter(
86
+ (s) => s.viewportId !== viewportId
87
+ )
88
+ );
89
+ }
90
+ }
91
+ }
92
+ }
93
+ }
94
+ for (const [tableName2, subscriptions] of __privateGet(this, _subscriptionMap)) {
41
95
  if (subscriptions[0].viewportId.toString() === viewportId) {
42
- __privateGet(this, _subscriptionMap).delete(tableName);
43
- } else {
44
- const links = subscriptions[0].dataSource.links;
96
+ __privateGet(this, _subscriptionMap).delete(tableName2);
97
+ }
98
+ }
99
+ if (this.visualLinks && dataSource.tableSchema) {
100
+ const {
101
+ table: { table: sourceTable }
102
+ } = dataSource.tableSchema;
103
+ for (const [table, links] of Object.entries(
104
+ this.visualLinks
105
+ )) {
45
106
  if (links) {
46
- for (let i = 0; i < links?.length; i++) {
47
- if (links[i].parentClientVpId === viewportId) {
48
- links.splice(i);
107
+ const potentialTargets = links.filter(
108
+ (l) => l.toTable === sourceTable
109
+ );
110
+ if (potentialTargets.length) {
111
+ for (const subscriptions of __privateGet(this, _subscriptionMap).values()) {
112
+ for (const { dataSource: dataSource2 } of subscriptions) {
113
+ if (dataSource2.tableSchema?.table.table === table) {
114
+ dataSource2.links = this.getVisualLinks(table);
115
+ }
116
+ }
49
117
  }
50
118
  }
51
119
  }
52
- subscriptions[0].dataSource.links = links;
53
120
  }
54
121
  }
55
122
  });
@@ -106,11 +173,11 @@ class VuuModule {
106
173
  resolve();
107
174
  }
108
175
  }));
176
+ __publicField(this, "getVisualLinks", (tableName) => {
177
+ const linksForTable = this.visualLinks?.[tableName];
178
+ return linksForTable === void 0 ? void 0 : this.getLinks(__privateGet(this, _subscriptionMap), linksForTable);
179
+ });
109
180
  __publicField(this, "createDataSource", (tableName, viewport, config) => {
110
- const getVisualLinks = (tableName2) => {
111
- const linksForTable = this.visualLinks?.[tableName2];
112
- return linksForTable === void 0 ? void 0 : this.getLinks(__privateGet(this, _subscriptionMap), linksForTable);
113
- };
114
181
  const columnDescriptors = this.getColumnDescriptors(tableName);
115
182
  const table = this.tables[tableName];
116
183
  const sessionTable = __privateGet(this, _sessionTableMap)[tableName];
@@ -118,7 +185,7 @@ class VuuModule {
118
185
  const dataSource = new TickingArrayDataSource.TickingArrayDataSource({
119
186
  ...config,
120
187
  columnDescriptors,
121
- getVisualLinks,
188
+ getVisualLinks: this.getVisualLinks,
122
189
  keyColumn: this.schemas[tableName] === void 0 ? __privateGet(this, _sessionTableMap)[tableName].schema.key : this.schemas[tableName].key,
123
190
  table: table || sessionTable,
124
191
  menu: this.menus?.[tableName],
@@ -129,6 +196,7 @@ class VuuModule {
129
196
  visualLinkService: this.visualLinkService,
130
197
  vuuModule
131
198
  });
199
+ dataSource.on("subscribed", this.handlePostSubscribeActivities);
132
200
  dataSource.on("unsubscribed", this.unregisterViewport);
133
201
  const existingSubscriptions = __privateGet(this, _subscriptionMap).get(tableName);
134
202
  const subscription = {
@@ -331,9 +399,10 @@ class VuuModule {
331
399
  __publicField(this, "endEditSession", async (rpcRequest) => {
332
400
  if (vuuUtils.isEndEditSessionRpcRequest(rpcRequest)) {
333
401
  const { viewPortId } = rpcRequest.context;
334
- const sessionTable = __privateGet(this, _sessionTableMap)[viewPortId];
335
- delete __privateGet(this, _sessionTableMap)[viewPortId];
336
- const { dataSource } = this.getSubscriptionByViewport(viewPortId);
402
+ const subscription = this.getSubscriptionByViewport(viewPortId);
403
+ const sessionTableName = subscription.sessionTableName ?? viewPortId;
404
+ const sessionTable = __privateGet(this, _sessionTableMap)[sessionTableName];
405
+ const { dataSource } = subscription;
337
406
  if (dataSource.table) {
338
407
  const sourceTable = this.tables[dataSource.table.table];
339
408
  if (rpcRequest.params.save === true) {
@@ -364,9 +433,15 @@ class VuuModule {
364
433
  });
365
434
  updates.clear();
366
435
  } else {
436
+ const vuuMsgIdx = sessionTable.map["vuuMsg"];
437
+ const sourceColumns = sourceTable.schema.columns;
367
438
  for (let i = 0; i < sessionTable.data.length; i++) {
368
- const newRow = sessionTable.data[i];
369
- sourceTable.updateRow(newRow);
439
+ const sessionRow = sessionTable.data[i];
440
+ if (sessionRow[vuuMsgIdx]) continue;
441
+ const sourceRow = sourceColumns.map(
442
+ (col) => sessionRow[sessionTable.map[col.name]]
443
+ );
444
+ sourceTable.insert(sourceRow);
370
445
  }
371
446
  }
372
447
  if (rejectedCount > 0) {
@@ -458,7 +533,7 @@ class VuuModule {
458
533
  ModuleContainer.register(this);
459
534
  }
460
535
  getTableSchema(tableName) {
461
- return this.schemas[tableName];
536
+ return this.schemas[tableName] ?? __privateGet(this, _sessionTableMap)[tableName]?.schema;
462
537
  }
463
538
  getTableList() {
464
539
  return Object.keys(this.tables);
@@ -537,7 +612,7 @@ class VuuModule {
537
612
  dataSource
538
613
  );
539
614
  } else if (editSessionMode === "empty-session-table") {
540
- return this.createEmptySessionTable(sourceTable);
615
+ return this.createEmptySessionTable(sourceTable, sessionTableName);
541
616
  } else {
542
617
  throw Error(
543
618
  `[VuuModule] createSessionTable, invalid editSessionMode ${editSessionMode}`
@@ -547,8 +622,12 @@ class VuuModule {
547
622
  createSessionTableWithAllRows(sourceTable, sessionTableName) {
548
623
  return SessionTable.SessionTable(sourceTable, sessionTableName);
549
624
  }
550
- createEmptySessionTable({ schema }) {
551
- return new Table.Table(schema, [], Table.buildDataColumnMapFromSchema(schema));
625
+ createEmptySessionTable({ schema }, sessionTableName) {
626
+ const sessionSchema = sessionTableUtils.sessionTableSchema({
627
+ ...schema,
628
+ table: { ...schema.table, table: sessionTableName }
629
+ });
630
+ return new Table.Table(sessionSchema, [], Table.buildDataColumnMapFromSchema(sessionSchema));
552
631
  }
553
632
  createSessionTableFromSelectedRows({ data, map, schema }, sessionTableName, dataSource) {
554
633
  const selectedRowIds = dataSource.getSelectedRowIds();
@@ -1 +1 @@
1
- {"version":3,"file":"VuuModule.js","sources":["../../../../../packages/vuu-data-test/src/core/module/VuuModule.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceConfig,\n DataSourceVisualLinkCreatedMessage,\n EditSessionMode,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuMenu,\n VuuRowDataItemType,\n VuuLink,\n LinkDescriptorWithLabel,\n VuuRpcMenuResponse,\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n VuuRpcServiceRequest,\n RpcResultSuccess,\n RpcResultError,\n VuuRpcMenuRequest,\n VuuTable,\n VuuDataRow,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n isAddRowRpcRequest,\n isBeginEditSessionRpcRequest,\n isEditCellRpcRequest,\n isEndEditSessionRpcRequest,\n isRpcSuccess,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport { Table, buildDataColumnMapFromSchema } from \"../../Table\";\nimport { isProxySessionTable, SessionTable } from \"../../SessionTable\";\nimport { TickingArrayDataSource } from \"../../TickingArrayDataSource\";\nimport { RuntimeVisualLink } from \"../../RuntimeVisualLink\";\nimport moduleContainer from \"./ModuleContainer\";\nimport { sessionTableSchema } from \"../../session-table-utils\";\n\nconst assertUpdateIsValid = (\n schema: TableSchema,\n column: string,\n data: VuuRowDataItemType,\n) => {\n const col = schema.columns.find((col) => col.name === column);\n if (col) {\n console.log(`data type ${col.serverDataType} data ${data}`);\n // switch (col.serverDataType){\n // }\n } else {\n throw Error(\n `schema for table ${schema.table.table} does not include column ${column}`,\n );\n }\n};\n\nexport interface IVuuModule<T extends string = string> {\n createDataSource: (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => DataSource;\n}\n\nexport type SessionTableMap = Record<string, SessionTable | Table>;\n\nexport type ServiceHandler = (\n rpcRequest: VuuRpcServiceRequest,\n) => Promise<RpcResultSuccess | RpcResultError>;\n\nexport type MenuServiceHandler = (\n rpcRequest: VuuRpcMenuRequest,\n) => Promise<VuuRpcMenuResponse>;\n\nexport type RpcService = {\n rpcName: string;\n service: ServiceHandler;\n};\n\nexport type RpcMenuService = {\n rpcName: string;\n service: MenuServiceHandler;\n};\n\ntype Subscription = {\n viewportId: string;\n dataSource: DataSource;\n sessionTableName?: string;\n};\nexport abstract class VuuModule<T extends string = string>\n implements IVuuModule<T>\n{\n #name: string;\n #runtimeVisualLinks = new Map<string, RuntimeVisualLink>();\n #sessionTableMap: SessionTableMap = {};\n #tableServices: Record<T, RpcService[] | undefined> | undefined;\n #subscriptionMap: Map<string, Subscription[]> = new Map();\n\n constructor(name: string) {\n this.#name = name;\n moduleContainer.register(this);\n }\n\n protected abstract menus?: Record<T, VuuMenu | undefined> | undefined;\n protected abstract schemas: Record<T, Readonly<TableSchema>>;\n protected abstract tables: Record<T, Table>;\n protected abstract menuServices?:\n | Record<T, RpcMenuService[] | undefined>\n | undefined;\n protected abstract services?: Record<T, RpcService[] | undefined> | undefined;\n protected abstract visualLinks?: Record<T, VuuLink[] | undefined>;\n\n getTableSchema(tableName: string) {\n return this.schemas[tableName as T];\n }\n\n getTableList() {\n return Object.keys(this.tables);\n }\n\n protected unregisterViewport = (viewportId: string) => {\n for (const [tableName, subscriptions] of this.#subscriptionMap) {\n if (subscriptions[0].viewportId.toString() === viewportId) {\n this.#subscriptionMap.delete(tableName);\n } else {\n const links = subscriptions[0].dataSource.links;\n if (links) {\n for (let i = 0; i < links?.length; i++) {\n if (links[i].parentClientVpId === viewportId) {\n links.splice(i);\n }\n }\n }\n subscriptions[0].dataSource.links = links;\n }\n }\n };\n\n get name() {\n return this.#name;\n }\n\n getSubscriptionByViewport(viewportId: string) {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const subscription of subscriptions) {\n if (subscription.viewportId === viewportId) {\n return subscription;\n }\n }\n }\n throw Error(\n `[VuuModule] getSubscriptionByViewport, no subscription found for ${viewportId}`,\n );\n }\n\n getSubscribedDataSource(vpId: string): DataSource {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { viewportId, dataSource } of subscriptions) {\n if (viewportId === vpId) {\n return dataSource;\n }\n }\n }\n throw Error(`getSubscribedDataSource #${vpId} not in subscriptionMap`);\n }\n\n getLinks = (\n subscriptionMap: Map<string, Subscription[]>,\n vuuLinks: VuuLink[],\n ) => {\n const visualLinks: LinkDescriptorWithLabel[] = [];\n for (let i = 0; i < vuuLinks.length; i++) {\n const subscriptions = subscriptionMap.get(vuuLinks[i].toTable);\n if (subscriptions) {\n subscriptions.forEach(({ viewportId, dataSource: { status } }) => {\n if (status !== \"suspended\") {\n const newLink: LinkDescriptorWithLabel = {\n parentClientVpId: viewportId,\n parentVpId: viewportId,\n link: vuuLinks[i],\n };\n visualLinks.push(newLink);\n }\n });\n }\n }\n return visualLinks;\n };\n\n visualLinkService = (\n message: VuuCreateVisualLink | VuuRemoveVisualLink,\n ): Promise<DataSourceVisualLinkCreatedMessage | void> =>\n new Promise((resolve) => {\n if (message.type === \"CREATE_VISUAL_LINK\") {\n const { childColumnName, childVpId, parentColumnName, parentVpId } =\n message;\n const childDataSource = this.getSubscribedDataSource(childVpId);\n const parentDataSource = this.getSubscribedDataSource(parentVpId);\n const runtimeVisualLink = new RuntimeVisualLink(\n childDataSource,\n parentDataSource,\n childColumnName,\n parentColumnName,\n );\n\n this.#runtimeVisualLinks.set(childVpId, runtimeVisualLink);\n\n resolve({\n clientViewportId: childVpId,\n colName: childColumnName,\n parentColName: parentColumnName,\n parentViewportId: parentVpId,\n type: \"vuu-link-created\",\n } as DataSourceVisualLinkCreatedMessage);\n } else {\n const runtimeVisualLink = this.#runtimeVisualLinks.get(\n message.childVpId,\n );\n if (runtimeVisualLink) {\n runtimeVisualLink.remove();\n this.#runtimeVisualLinks.delete(message.childVpId);\n } else {\n throw Error(\n `visualLinkService no visual link found for viewport #${message.childVpId}`,\n );\n }\n resolve();\n }\n });\n\n createDataSource = (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => {\n const getVisualLinks = (tableName: string) => {\n const linksForTable = this.visualLinks?.[tableName as T] as VuuLink[];\n return linksForTable === undefined\n ? undefined\n : this.getLinks(this.#subscriptionMap, linksForTable);\n };\n\n const columnDescriptors = this.getColumnDescriptors(tableName);\n const table = this.tables[tableName];\n const sessionTable = this.#sessionTableMap[tableName];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const vuuModule = this as IVuuModule<any>;\n\n const dataSource: DataSource = new TickingArrayDataSource({\n ...config,\n columnDescriptors,\n getVisualLinks,\n keyColumn:\n this.schemas[tableName] === undefined\n ? this.#sessionTableMap[tableName].schema.key\n : this.schemas[tableName].key,\n table: table || sessionTable,\n menu: this.menus?.[tableName],\n rpcServices: this.getServices(tableName),\n rpcMenuServices: this.getMenuServices(tableName),\n sessionTables: this.#sessionTableMap,\n viewport,\n visualLinkService: this.visualLinkService,\n vuuModule,\n });\n\n dataSource.on(\"unsubscribed\", this.unregisterViewport);\n\n const existingSubscriptions = this.#subscriptionMap.get(tableName);\n const subscription = {\n viewportId: dataSource.viewport as string,\n dataSource,\n };\n if (existingSubscriptions) {\n existingSubscriptions.push(subscription);\n } else {\n this.#subscriptionMap.set(tableName, [subscription]);\n }\n\n return dataSource;\n };\n\n getServices(tableName: T) {\n const tableServices = this.services?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleServices.concat(tableServices);\n } else {\n return this.#moduleServices;\n }\n }\n\n getMenuServices(tableName: T) {\n const tableServices = this.menuServices?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleMenuServices.concat(tableServices);\n } else {\n return this.#moduleMenuServices;\n }\n }\n\n protected get sessionTableMap() {\n return this.#sessionTableMap;\n }\n\n protected getSessionTable(sessionTableName: string): SessionTable;\n protected getSessionTable(\n sessionTableName: string,\n throwIfNotFound: true,\n ): SessionTable;\n protected getSessionTable(\n sessionTableName: string,\n throwIfNotFound: false,\n ): SessionTable | undefined;\n protected getSessionTable(sessionTableName: string, throwIfNotFound = true) {\n const sessionTable = this.#sessionTableMap[sessionTableName];\n if (sessionTable) {\n return sessionTable;\n } else if (throwIfNotFound) {\n throw Error(\n `getSessionTable: no session table with name ${sessionTableName}`,\n );\n }\n }\n\n protected deleteRow: ServiceHandler = async (rpcRequest) => {\n if (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\n const { viewPortId } = rpcRequest.context;\n const { key } = rpcRequest.params;\n const sessionTable = this.getSessionTable(viewPortId, false);\n if (sessionTable) {\n sessionTable.delete(key as string);\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } else {\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n if (dataSource.table) {\n const table = this.tables[dataSource.table.table as T];\n if (table) {\n table.delete(key as string);\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n }\n }\n }\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"something went wrong\",\n };\n };\n\n private getColumnDescriptors(tableName: T) {\n const schema =\n this.schemas[tableName] || this.getSessionTable(tableName)?.schema;\n if (schema) {\n return schema.columns;\n } else {\n throw Error(\n ` no schema found for module ${this.#name} table ${tableName}`,\n );\n }\n }\n\n private editCell: ServiceHandler = async (rpcRequest) => {\n if (isEditCellRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { column, data, key } = rpcRequest.params;\n let targetTable: SessionTable | Table = this.#sessionTableMap[viewPortId];\n if (!targetTable) {\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n if (dataSource.table) {\n targetTable = this.tables[dataSource.table.table as T];\n }\n }\n if (targetTable) {\n try {\n assertUpdateIsValid(targetTable.schema, column as string, data);\n targetTable.update(key as string, column as string, data);\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } catch (e) {\n const { message } = e as Error;\n return {\n type: \"ERROR_RESULT\",\n errorMessage: message,\n };\n }\n } else {\n throw Error(\"[VuuModule] editCell unable to find table for dataSource\");\n }\n } else {\n throw Error(`[VuuModule] editCell invalid rpc type`);\n }\n };\n\n private beginEditSessionMenuHandler: MenuServiceHandler = async ({\n rpcName,\n type,\n vpId,\n }) => {\n if (type === \"VIEW_PORT_MENUS_SELECT_RPC\") {\n console.log(`rpcName ${rpcName}`);\n\n const result = await this.beginEditSession({\n context: {\n type: \"VIEWPORT_CONTEXT\",\n viewPortId: vpId,\n },\n params: {\n editSessionMode: \"selected-rows\",\n },\n rpcName,\n type: \"RPC_REQUEST\",\n });\n if (isRpcSuccess(result)) {\n const { table } = result.data as { table: VuuTable };\n return {\n type: \"VIEW_PORT_MENU_RESP\",\n rpcName,\n action: {\n renderComponent: \"grid\",\n type: \"OPEN_DIALOG_ACTION\",\n table,\n },\n vpId,\n };\n } else {\n return {\n error: result.errorMessage,\n rpcName,\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n };\n }\n } else {\n return {\n error: \"no can do\",\n rpcName,\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n };\n }\n };\n\n private beginEditSession: ServiceHandler = async (rpcRequest) => {\n if (isBeginEditSessionRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { editSessionMode = \"inline-all-rows\" } = rpcRequest.params;\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const { dataSource } = subscription;\n const { table: vuuTable } = dataSource;\n if (vuuTable) {\n const sourceTable = this.tables[vuuTable.table as T];\n if (sourceTable) {\n const sessionTableName = `session-${uuid()}`;\n try {\n const sessionTable = this.createSessionTable(\n sourceTable,\n sessionTableName,\n editSessionMode as EditSessionMode,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n dataSource as TickingArrayDataSource,\n );\n this.#sessionTableMap[sessionTableName] = sessionTable;\n subscription.sessionTableName = sessionTableName;\n\n return {\n data: {\n renderComponent: \"inline-form\",\n table: {\n module: vuuTable.module,\n table: sessionTableName,\n },\n },\n type: \"SUCCESS_RESULT\",\n };\n } catch (e) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: (e as Error).message,\n };\n }\n }\n }\n } else {\n throw Error(`[VuuModule] endEditSession invalid rpc type`);\n }\n\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"not implemented yet\",\n };\n };\n\n private addRow: ServiceHandler = async (rpcRequest) => {\n if (isAddRowRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const sessionTable = subscription.sessionTableName\n ? this.#sessionTableMap[subscription.sessionTableName]\n : undefined;\n if (!sessionTable) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `addRow: no active session table for viewport ${viewPortId}`,\n };\n }\n const { data } = rpcRequest.params;\n\n const columnMap = sessionTable.map;\n const columnCount = Object.keys(columnMap).length;\n const row: VuuDataRow = new Array(columnCount).fill(\"\");\n for (const [col, idx] of Object.entries(columnMap)) {\n if (data[col] !== undefined) {\n row[idx] = data[col];\n }\n }\n sessionTable.insert(row);\n return { type: \"SUCCESS_RESULT\", data: undefined };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"addRow: invalid rpc context\",\n };\n };\n\n private endEditSession: ServiceHandler = async (rpcRequest) => {\n if (isEndEditSessionRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n // the viewport Id is the session table name\n const sessionTable = this.#sessionTableMap[viewPortId];\n delete this.#sessionTableMap[viewPortId];\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n\n if (dataSource.table) {\n const sourceTable = this.tables[dataSource.table.table as T];\n\n if (rpcRequest.params.save === true) {\n let rejectedCount = 0;\n if (isProxySessionTable(sessionTable)) {\n const updates = sessionTable.getSessionUpdates();\n updates.forEach((rowUpdates, key) => {\n const { cellUpdates, lastUpdateTimestamp } = rowUpdates;\n const currentRow = sourceTable.findByKey(key);\n const lastUpdateTimestampOnTable =\n currentRow[sourceTable.map.vuuUpdatedTimestamp];\n if (lastUpdateTimestamp !== lastUpdateTimestampOnTable) {\n // We will reject updates for this row, update sessionn table row with message\n rejectedCount += 1;\n const sessionTableRow = sessionTable.findByKey(key);\n const newRow = sessionTableRow.slice();\n const messages: string[] = [];\n Object.entries(cellUpdates).forEach(([column, value]) => {\n messages.push(`${column}:${value}`);\n });\n newRow[sessionTable.map.vuuMsg] = messages.join(\",\");\n sessionTable.updateRow(newRow);\n } else {\n const newRow = currentRow.slice();\n Object.entries(cellUpdates).forEach(([column, value]) => {\n newRow[sourceTable.map[column]] = value;\n });\n sourceTable.updateRow(newRow);\n }\n });\n updates.clear();\n } else {\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n sourceTable.updateRow(newRow);\n }\n }\n\n if (rejectedCount > 0) {\n return {\n errorMessage: \"stale update\",\n type: \"ERROR_RESULT\",\n };\n } else {\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n }\n } else {\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n }\n } else {\n throw Error(\"[VuuModule], exitEditMode\");\n }\n } else {\n throw Error(`[VuuModule] endEditSession invalid rpc type`);\n }\n\n // return {\n // type: \"ERROR_RESULT\",\n // errorMessage: \"not implemented yet\",\n // };\n };\n\n // Bulk-edit with input in session table\n private applyBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\n const { viewPortId } = rpcRequest.context;\n const sessionTable = this.getSessionTable(viewPortId);\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n const { column, value } = rpcRequest.params as {\n column: NamedCurve;\n value: VuuRowDataItemType;\n };\n const keyIndex = sessionTable.map[sessionTable.schema.key];\n sessionTable.update(\n String(newRow[keyIndex]),\n column as string,\n value as VuuRowDataItemType,\n );\n }\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } else {\n throw Error(`[VuuModule] applyBulkEdits invalid rpc type`);\n }\n };\n\n protected createSessionTable(\n sourceTable: Table,\n sessionTableName: string,\n editSessionMode: EditSessionMode = \"inline-all-rows\",\n dataSource: TickingArrayDataSource,\n ) {\n if (editSessionMode.endsWith(\"all-rows\")) {\n return this.createSessionTableWithAllRows(sourceTable, sessionTableName);\n } else if (editSessionMode === \"selected-rows\") {\n return this.createSessionTableFromSelectedRows(\n sourceTable,\n sessionTableName,\n dataSource,\n );\n } else if (editSessionMode === \"empty-session-table\") {\n return this.createEmptySessionTable(sourceTable);\n } else {\n throw Error(\n `[VuuModule] createSessionTable, invalid editSessionMode ${editSessionMode}`,\n );\n }\n }\n\n protected createSessionTableWithAllRows(\n sourceTable: Table,\n sessionTableName: string,\n ) {\n return SessionTable(sourceTable, sessionTableName);\n }\n\n protected createEmptySessionTable({ schema }: Table) {\n // Note we use the original table schema for the session table, including table name.\n // This will later be used to retrieve source table\n return new Table(schema, [], buildDataColumnMapFromSchema(schema));\n }\n\n protected createSessionTableFromSelectedRows(\n { data, map, schema }: Table,\n sessionTableName: string,\n dataSource: TickingArrayDataSource,\n ) {\n const selectedRowIds = dataSource.getSelectedRowIds();\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 // Note we preserve the original table name on the schema for the session table,\n // this will later be used to retrieve source table\n const sessionSchema = sessionTableSchema(schema);\n\n return new Table(\n sessionSchema,\n sessionData,\n buildDataColumnMapFromSchema(sessionSchema),\n );\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: \"addRow\",\n service: this.addRow,\n },\n {\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n service: this.applyBulkEdits,\n },\n {\n rpcName: \"beginEditSession\",\n service: this.beginEditSession,\n },\n {\n rpcName: \"endEditSession\",\n service: this.endEditSession,\n },\n {\n rpcName: \"editCell\",\n service: this.editCell,\n },\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 #moduleMenuServices: RpcMenuService[] = [\n {\n rpcName: \"beginEditSession\",\n service: this.beginEditSessionMenuHandler,\n },\n ];\n}\n"],"names":["col","RuntimeVisualLink","tableName","TickingArrayDataSource","isEditCellRpcRequest","isRpcSuccess","isBeginEditSessionRpcRequest","uuid","isAddRowRpcRequest","isEndEditSessionRpcRequest","isProxySessionTable","moduleContainer","SessionTable","Table","buildDataColumnMapFromSchema","sessionTableSchema"],"mappings":"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"}
1
+ {"version":3,"file":"VuuModule.js","sources":["../../../../../packages/vuu-data-test/src/core/module/VuuModule.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceConfig,\n DataSourceSubscribedMessage,\n DataSourceVisualLinkCreatedMessage,\n EditSessionMode,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuMenu,\n VuuRowDataItemType,\n VuuLink,\n LinkDescriptorWithLabel,\n VuuRpcMenuResponse,\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n VuuRpcServiceRequest,\n RpcResultSuccess,\n RpcResultError,\n VuuRpcMenuRequest,\n VuuTable,\n VuuDataRow,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n isAddRowRpcRequest,\n isBeginEditSessionRpcRequest,\n isEditCellRpcRequest,\n isEndEditSessionRpcRequest,\n isRpcSuccess,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport { Table, buildDataColumnMapFromSchema } from \"../../Table\";\nimport { isProxySessionTable, SessionTable } from \"../../SessionTable\";\nimport { TickingArrayDataSource } from \"../../TickingArrayDataSource\";\nimport { RuntimeVisualLink } from \"../../RuntimeVisualLink\";\nimport moduleContainer from \"./ModuleContainer\";\nimport { sessionTableSchema } from \"../../session-table-utils\";\n\nconst assertUpdateIsValid = (\n schema: TableSchema,\n column: string,\n data: VuuRowDataItemType,\n) => {\n const col = schema.columns.find((col) => col.name === column);\n if (col) {\n console.log(`data type ${col.serverDataType} data ${data}`);\n // switch (col.serverDataType){\n // }\n } else {\n throw Error(\n `schema for table ${schema.table.table} does not include column ${column}`,\n );\n }\n};\n\nexport interface IVuuModule<T extends string = string> {\n createDataSource: (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => DataSource;\n}\n\nexport type SessionTableMap = Record<string, SessionTable | Table>;\n\nexport type ServiceHandler = (\n rpcRequest: VuuRpcServiceRequest,\n) => Promise<RpcResultSuccess | RpcResultError>;\n\nexport type MenuServiceHandler = (\n rpcRequest: VuuRpcMenuRequest,\n) => Promise<VuuRpcMenuResponse>;\n\nexport type RpcService = {\n rpcName: string;\n service: ServiceHandler;\n};\n\nexport type RpcMenuService = {\n rpcName: string;\n service: MenuServiceHandler;\n};\n\ntype Subscription = {\n viewportId: string;\n dataSource: DataSource;\n sessionTableName?: string;\n};\nexport abstract class VuuModule<T extends string = string>\n implements IVuuModule<T>\n{\n #name: string;\n #runtimeVisualLinks = new Map<string, RuntimeVisualLink>();\n #sessionTableMap: SessionTableMap = {};\n #tableServices: Record<T, RpcService[] | undefined> | undefined;\n #subscriptionMap: Map<string, Subscription[]> = new Map();\n\n constructor(name: string) {\n this.#name = name;\n moduleContainer.register(this);\n }\n\n protected abstract menus?: Record<T, VuuMenu | undefined> | undefined;\n protected abstract schemas: Record<T, Readonly<TableSchema>>;\n protected abstract tables: Record<T, Table>;\n protected abstract menuServices?:\n | Record<T, RpcMenuService[] | undefined>\n | undefined;\n protected abstract services?: Record<T, RpcService[] | undefined> | undefined;\n protected abstract visualLinks?: Record<T, VuuLink[] | undefined>;\n\n getTableSchema(tableName: string) {\n return (\n this.schemas[tableName as T] ?? this.#sessionTableMap[tableName]?.schema\n );\n }\n\n getTableList() {\n return Object.keys(this.tables);\n }\n\n protected handlePostSubscribeActivities = ({\n clientViewportId,\n tableSchema,\n }: DataSourceSubscribedMessage) => {\n const visualLinks = this.getVisualLinks(tableSchema.table.table);\n const { dataSource } = this.getSubscriptionByViewport(clientViewportId);\n requestAnimationFrame(() => {\n dataSource.links = visualLinks;\n });\n\n // check whether newly subscribed viewport is associated with table that is a potential\n // visual link target. If so send links update message to any active subscription\n // associated with a table that is a potential link source\n if (this.visualLinks && dataSource.tableSchema) {\n const {\n table: { table: sourceTable },\n } = dataSource.tableSchema;\n for (const [table, links] of Object.entries<VuuLink[] | undefined>(\n this.visualLinks,\n )) {\n if (links) {\n const potentialTargets = links.filter(\n (l) => l.toTable === sourceTable,\n );\n if (potentialTargets.length) {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { dataSource } of subscriptions) {\n if (dataSource.tableSchema?.table.table === table) {\n dataSource.links = this.getVisualLinks(table);\n }\n }\n }\n }\n }\n }\n }\n };\n\n protected unregisterViewport = (viewportId: string) => {\n const { dataSource } = this.getSubscriptionByViewport(viewportId);\n const tableName = dataSource.tableSchema?.table.table;\n if (tableName) {\n const subscriptionsForTable = this.#subscriptionMap.get(tableName);\n if (subscriptionsForTable) {\n for (const { viewportId: vp } of subscriptionsForTable) {\n if (vp === viewportId) {\n if (subscriptionsForTable.length === 1) {\n this.#subscriptionMap.delete(tableName);\n } else {\n this.#subscriptionMap.set(\n tableName,\n subscriptionsForTable.filter(\n (s) => s.viewportId !== viewportId,\n ),\n );\n }\n }\n }\n }\n }\n\n for (const [tableName, subscriptions] of this.#subscriptionMap) {\n if (subscriptions[0].viewportId.toString() === viewportId) {\n this.#subscriptionMap.delete(tableName);\n }\n }\n\n // check whether newly unsubscribed viewport is associated with table that is a potential\n // visual link target. If so send links update message to any active subscription\n // associated with a table that is a potential link source\n if (this.visualLinks && dataSource.tableSchema) {\n const {\n table: { table: sourceTable },\n } = dataSource.tableSchema;\n for (const [table, links] of Object.entries<VuuLink[] | undefined>(\n this.visualLinks,\n )) {\n if (links) {\n const potentialTargets = links.filter(\n (l) => l.toTable === sourceTable,\n );\n if (potentialTargets.length) {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { dataSource } of subscriptions) {\n if (dataSource.tableSchema?.table.table === table) {\n dataSource.links = this.getVisualLinks(table);\n }\n }\n }\n }\n }\n }\n }\n };\n\n get name() {\n return this.#name;\n }\n\n getSubscriptionByViewport(viewportId: string) {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const subscription of subscriptions) {\n if (subscription.viewportId === viewportId) {\n return subscription;\n }\n }\n }\n throw Error(\n `[VuuModule] getSubscriptionByViewport, no subscription found for ${viewportId}`,\n );\n }\n\n getSubscribedDataSource(vpId: string): DataSource {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { viewportId, dataSource } of subscriptions) {\n if (viewportId === vpId) {\n return dataSource;\n }\n }\n }\n throw Error(`getSubscribedDataSource #${vpId} not in subscriptionMap`);\n }\n\n getLinks = (\n subscriptionMap: Map<string, Subscription[]>,\n vuuLinks: VuuLink[],\n ) => {\n const visualLinks: LinkDescriptorWithLabel[] = [];\n for (let i = 0; i < vuuLinks.length; i++) {\n const subscriptions = subscriptionMap.get(vuuLinks[i].toTable);\n if (subscriptions) {\n subscriptions.forEach(({ viewportId, dataSource: { status } }) => {\n if (status !== \"suspended\") {\n const newLink: LinkDescriptorWithLabel = {\n parentClientVpId: viewportId,\n parentVpId: viewportId,\n link: vuuLinks[i],\n };\n visualLinks.push(newLink);\n }\n });\n }\n }\n return visualLinks;\n };\n\n visualLinkService = (\n message: VuuCreateVisualLink | VuuRemoveVisualLink,\n ): Promise<DataSourceVisualLinkCreatedMessage | void> =>\n new Promise((resolve) => {\n if (message.type === \"CREATE_VISUAL_LINK\") {\n const { childColumnName, childVpId, parentColumnName, parentVpId } =\n message;\n const childDataSource = this.getSubscribedDataSource(childVpId);\n const parentDataSource = this.getSubscribedDataSource(parentVpId);\n const runtimeVisualLink = new RuntimeVisualLink(\n childDataSource,\n parentDataSource,\n childColumnName,\n parentColumnName,\n );\n\n this.#runtimeVisualLinks.set(childVpId, runtimeVisualLink);\n\n resolve({\n clientViewportId: childVpId,\n colName: childColumnName,\n parentColName: parentColumnName,\n parentViewportId: parentVpId,\n type: \"vuu-link-created\",\n } as DataSourceVisualLinkCreatedMessage);\n } else {\n const runtimeVisualLink = this.#runtimeVisualLinks.get(\n message.childVpId,\n );\n if (runtimeVisualLink) {\n runtimeVisualLink.remove();\n this.#runtimeVisualLinks.delete(message.childVpId);\n } else {\n throw Error(\n `visualLinkService no visual link found for viewport #${message.childVpId}`,\n );\n }\n resolve();\n }\n });\n\n getVisualLinks = (tableName: string) => {\n const linksForTable = this.visualLinks?.[tableName as T] as VuuLink[];\n return linksForTable === undefined\n ? undefined\n : this.getLinks(this.#subscriptionMap, linksForTable);\n };\n\n createDataSource = (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => {\n const columnDescriptors = this.getColumnDescriptors(tableName);\n const table = this.tables[tableName];\n const sessionTable = this.#sessionTableMap[tableName];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const vuuModule = this as IVuuModule<any>;\n\n const dataSource: DataSource = new TickingArrayDataSource({\n ...config,\n columnDescriptors,\n getVisualLinks: this.getVisualLinks,\n keyColumn:\n this.schemas[tableName] === undefined\n ? this.#sessionTableMap[tableName].schema.key\n : this.schemas[tableName].key,\n table: table || sessionTable,\n menu: this.menus?.[tableName],\n rpcServices: this.getServices(tableName),\n rpcMenuServices: this.getMenuServices(tableName),\n sessionTables: this.#sessionTableMap,\n viewport,\n visualLinkService: this.visualLinkService,\n vuuModule,\n });\n\n dataSource.on(\"subscribed\", this.handlePostSubscribeActivities);\n dataSource.on(\"unsubscribed\", this.unregisterViewport);\n\n const existingSubscriptions = this.#subscriptionMap.get(tableName);\n const subscription = {\n viewportId: dataSource.viewport as string,\n dataSource,\n };\n if (existingSubscriptions) {\n existingSubscriptions.push(subscription);\n } else {\n this.#subscriptionMap.set(tableName, [subscription]);\n }\n\n return dataSource;\n };\n\n getServices(tableName: T) {\n const tableServices = this.services?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleServices.concat(tableServices);\n } else {\n return this.#moduleServices;\n }\n }\n\n getMenuServices(tableName: T) {\n const tableServices = this.menuServices?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleMenuServices.concat(tableServices);\n } else {\n return this.#moduleMenuServices;\n }\n }\n\n protected get sessionTableMap() {\n return this.#sessionTableMap;\n }\n\n protected getSessionTable(sessionTableName: string): SessionTable;\n protected getSessionTable(\n sessionTableName: string,\n throwIfNotFound: true,\n ): SessionTable;\n protected getSessionTable(\n sessionTableName: string,\n throwIfNotFound: false,\n ): SessionTable | undefined;\n protected getSessionTable(sessionTableName: string, throwIfNotFound = true) {\n const sessionTable = this.#sessionTableMap[sessionTableName];\n if (sessionTable) {\n return sessionTable;\n } else if (throwIfNotFound) {\n throw Error(\n `getSessionTable: no session table with name ${sessionTableName}`,\n );\n }\n }\n\n protected deleteRow: ServiceHandler = async (rpcRequest) => {\n if (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\n const { viewPortId } = rpcRequest.context;\n const { key } = rpcRequest.params;\n const sessionTable = this.getSessionTable(viewPortId, false);\n if (sessionTable) {\n sessionTable.delete(key as string);\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } else {\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n if (dataSource.table) {\n const table = this.tables[dataSource.table.table as T];\n if (table) {\n table.delete(key as string);\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n }\n }\n }\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"something went wrong\",\n };\n };\n\n private getColumnDescriptors(tableName: T) {\n const schema =\n this.schemas[tableName] || this.getSessionTable(tableName)?.schema;\n if (schema) {\n return schema.columns;\n } else {\n throw Error(\n ` no schema found for module ${this.#name} table ${tableName}`,\n );\n }\n }\n\n private editCell: ServiceHandler = async (rpcRequest) => {\n if (isEditCellRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { column, data, key } = rpcRequest.params;\n let targetTable: SessionTable | Table = this.#sessionTableMap[viewPortId];\n if (!targetTable) {\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n if (dataSource.table) {\n targetTable = this.tables[dataSource.table.table as T];\n }\n }\n if (targetTable) {\n try {\n assertUpdateIsValid(targetTable.schema, column as string, data);\n targetTable.update(key as string, column as string, data);\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } catch (e) {\n const { message } = e as Error;\n return {\n type: \"ERROR_RESULT\",\n errorMessage: message,\n };\n }\n } else {\n throw Error(\"[VuuModule] editCell unable to find table for dataSource\");\n }\n } else {\n throw Error(`[VuuModule] editCell invalid rpc type`);\n }\n };\n\n private beginEditSessionMenuHandler: MenuServiceHandler = async ({\n rpcName,\n type,\n vpId,\n }) => {\n if (type === \"VIEW_PORT_MENUS_SELECT_RPC\") {\n console.log(`rpcName ${rpcName}`);\n\n const result = await this.beginEditSession({\n context: {\n type: \"VIEWPORT_CONTEXT\",\n viewPortId: vpId,\n },\n params: {\n editSessionMode: \"selected-rows\",\n },\n rpcName,\n type: \"RPC_REQUEST\",\n });\n if (isRpcSuccess(result)) {\n const { table } = result.data as { table: VuuTable };\n return {\n type: \"VIEW_PORT_MENU_RESP\",\n rpcName,\n action: {\n renderComponent: \"grid\",\n type: \"OPEN_DIALOG_ACTION\",\n table,\n },\n vpId,\n };\n } else {\n return {\n error: result.errorMessage,\n rpcName,\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n };\n }\n } else {\n return {\n error: \"no can do\",\n rpcName,\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n };\n }\n };\n\n private beginEditSession: ServiceHandler = async (rpcRequest) => {\n if (isBeginEditSessionRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { editSessionMode = \"inline-all-rows\" } = rpcRequest.params;\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const { dataSource } = subscription;\n const { table: vuuTable } = dataSource;\n if (vuuTable) {\n const sourceTable = this.tables[vuuTable.table as T];\n if (sourceTable) {\n const sessionTableName = `session-${uuid()}`;\n try {\n const sessionTable = this.createSessionTable(\n sourceTable,\n sessionTableName,\n editSessionMode as EditSessionMode,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n dataSource as TickingArrayDataSource,\n );\n this.#sessionTableMap[sessionTableName] = sessionTable;\n subscription.sessionTableName = sessionTableName;\n\n return {\n data: {\n renderComponent: \"inline-form\",\n table: {\n module: vuuTable.module,\n table: sessionTableName,\n },\n },\n type: \"SUCCESS_RESULT\",\n };\n } catch (e) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: (e as Error).message,\n };\n }\n }\n }\n } else {\n throw Error(`[VuuModule] endEditSession invalid rpc type`);\n }\n\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"not implemented yet\",\n };\n };\n\n private addRow: ServiceHandler = async (rpcRequest) => {\n if (isAddRowRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const sessionTable = subscription.sessionTableName\n ? this.#sessionTableMap[subscription.sessionTableName]\n : undefined;\n if (!sessionTable) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `addRow: no active session table for viewport ${viewPortId}`,\n };\n }\n const { data } = rpcRequest.params;\n\n const columnMap = sessionTable.map;\n const columnCount = Object.keys(columnMap).length;\n const row: VuuDataRow = new Array(columnCount).fill(\"\");\n for (const [col, idx] of Object.entries(columnMap)) {\n if (data[col] !== undefined) {\n row[idx] = data[col];\n }\n }\n sessionTable.insert(row);\n return { type: \"SUCCESS_RESULT\", data: undefined };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"addRow: invalid rpc context\",\n };\n };\n\n private endEditSession: ServiceHandler = async (rpcRequest) => {\n if (isEndEditSessionRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n // the viewport Id is the session table name\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const sessionTableName = subscription.sessionTableName ?? viewPortId;\n const sessionTable = this.#sessionTableMap[sessionTableName];\n const { dataSource } = subscription;\n\n if (dataSource.table) {\n const sourceTable = this.tables[dataSource.table.table as T];\n\n if (rpcRequest.params.save === true) {\n let rejectedCount = 0;\n if (isProxySessionTable(sessionTable)) {\n const updates = sessionTable.getSessionUpdates();\n updates.forEach((rowUpdates, key) => {\n const { cellUpdates, lastUpdateTimestamp } = rowUpdates;\n const currentRow = sourceTable.findByKey(key);\n const lastUpdateTimestampOnTable =\n currentRow[sourceTable.map.vuuUpdatedTimestamp];\n if (lastUpdateTimestamp !== lastUpdateTimestampOnTable) {\n // We will reject updates for this row, update sessionn table row with message\n rejectedCount += 1;\n const sessionTableRow = sessionTable.findByKey(key);\n const newRow = sessionTableRow.slice();\n const messages: string[] = [];\n Object.entries(cellUpdates).forEach(([column, value]) => {\n messages.push(`${column}:${value}`);\n });\n newRow[sessionTable.map.vuuMsg] = messages.join(\",\");\n sessionTable.updateRow(newRow);\n } else {\n const newRow = currentRow.slice();\n Object.entries(cellUpdates).forEach(([column, value]) => {\n newRow[sourceTable.map[column]] = value;\n });\n sourceTable.updateRow(newRow);\n }\n });\n updates.clear();\n } else {\n // empty-session-table / csv-upload: insert only rows with no errors.\n // vuuMsg is empty string for valid rows and non-empty for error rows.\n const vuuMsgIdx = sessionTable.map[\"vuuMsg\"];\n const sourceColumns = sourceTable.schema.columns;\n for (let i = 0; i < sessionTable.data.length; i++) {\n const sessionRow = sessionTable.data[i];\n if (sessionRow[vuuMsgIdx]) continue;\n const sourceRow: VuuRowDataItemType[] = sourceColumns.map(\n (col) => sessionRow[sessionTable.map[col.name]],\n );\n sourceTable.insert(sourceRow);\n }\n }\n\n if (rejectedCount > 0) {\n return {\n errorMessage: \"stale update\",\n type: \"ERROR_RESULT\",\n };\n } else {\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n }\n } else {\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n }\n } else {\n throw Error(\"[VuuModule], exitEditMode\");\n }\n } else {\n throw Error(`[VuuModule] endEditSession invalid rpc type`);\n }\n\n // return {\n // type: \"ERROR_RESULT\",\n // errorMessage: \"not implemented yet\",\n // };\n };\n\n // Bulk-edit with input in session table\n private applyBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\n const { viewPortId } = rpcRequest.context;\n const sessionTable = this.getSessionTable(viewPortId);\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n const { column, value } = rpcRequest.params as {\n column: NamedCurve;\n value: VuuRowDataItemType;\n };\n const keyIndex = sessionTable.map[sessionTable.schema.key];\n sessionTable.update(\n String(newRow[keyIndex]),\n column as string,\n value as VuuRowDataItemType,\n );\n }\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } else {\n throw Error(`[VuuModule] applyBulkEdits invalid rpc type`);\n }\n };\n\n protected createSessionTable(\n sourceTable: Table,\n sessionTableName: string,\n editSessionMode: EditSessionMode = \"inline-all-rows\",\n dataSource: TickingArrayDataSource,\n ) {\n if (editSessionMode.endsWith(\"all-rows\")) {\n return this.createSessionTableWithAllRows(sourceTable, sessionTableName);\n } else if (editSessionMode === \"selected-rows\") {\n return this.createSessionTableFromSelectedRows(\n sourceTable,\n sessionTableName,\n dataSource,\n );\n } else if (editSessionMode === \"empty-session-table\") {\n return this.createEmptySessionTable(sourceTable, sessionTableName);\n } else {\n throw Error(\n `[VuuModule] createSessionTable, invalid editSessionMode ${editSessionMode}`,\n );\n }\n }\n\n protected createSessionTableWithAllRows(\n sourceTable: Table,\n sessionTableName: string,\n ) {\n return SessionTable(sourceTable, sessionTableName);\n }\n\n protected createEmptySessionTable(\n { schema }: Table,\n sessionTableName: string,\n ) {\n // Override schema.table.table so isSessionTable() returns true for this session.\n // sessionTableSchema adds the vuuMsg column, consistent with all other session tables.\n const sessionSchema = sessionTableSchema({\n ...schema,\n table: { ...schema.table, table: sessionTableName },\n });\n return new Table(sessionSchema, [], buildDataColumnMapFromSchema(sessionSchema));\n }\n\n protected createSessionTableFromSelectedRows(\n { data, map, schema }: Table,\n sessionTableName: string,\n dataSource: TickingArrayDataSource,\n ) {\n const selectedRowIds = dataSource.getSelectedRowIds();\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 // Note we preserve the original table name on the schema for the session table,\n // this will later be used to retrieve source table\n const sessionSchema = sessionTableSchema(schema);\n\n return new Table(\n sessionSchema,\n sessionData,\n buildDataColumnMapFromSchema(sessionSchema),\n );\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: \"addRow\",\n service: this.addRow,\n },\n {\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n service: this.applyBulkEdits,\n },\n {\n rpcName: \"beginEditSession\",\n service: this.beginEditSession,\n },\n {\n rpcName: \"endEditSession\",\n service: this.endEditSession,\n },\n {\n rpcName: \"editCell\",\n service: this.editCell,\n },\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 #moduleMenuServices: RpcMenuService[] = [\n {\n rpcName: \"beginEditSession\",\n service: this.beginEditSessionMenuHandler,\n },\n ];\n}\n"],"names":["col","dataSource","tableName","RuntimeVisualLink","TickingArrayDataSource","isEditCellRpcRequest","isRpcSuccess","isBeginEditSessionRpcRequest","uuid","isAddRowRpcRequest","isEndEditSessionRpcRequest","isProxySessionTable","moduleContainer","SessionTable","sessionTableSchema","Table","buildDataColumnMapFromSchema"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,IAAA,KAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,mBAAA;AAsCA,MAAM,mBAAsB,GAAA,CAC1B,MACA,EAAA,MAAA,EACA,IACG,KAAA;AACH,EAAM,MAAA,GAAA,GAAM,OAAO,OAAQ,CAAA,IAAA,CAAK,CAACA,IAAQA,KAAAA,IAAAA,CAAI,SAAS,MAAM,CAAA;AAC5D,EAAA,IAAI,GAAK,EAAA;AACP,IAAA,OAAA,CAAQ,IAAI,CAAa,UAAA,EAAA,GAAA,CAAI,cAAc,CAAA,MAAA,EAAS,IAAI,CAAE,CAAA,CAAA;AAAA,GAGrD,MAAA;AACL,IAAM,MAAA,KAAA;AAAA,MACJ,CAAoB,iBAAA,EAAA,MAAA,CAAO,KAAM,CAAA,KAAK,4BAA4B,MAAM,CAAA;AAAA,KAC1E;AAAA;AAEJ,CAAA;AAmCO,MAAe,SAEtB,CAAA;AAAA,EAOE,YAAY,IAAc,EAAA;AAN1B,IAAA,YAAA,CAAA,IAAA,EAAA,KAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,mBAAA,sBAA0B,GAA+B,EAAA,CAAA;AACzD,IAAA,YAAA,CAAA,IAAA,EAAA,gBAAA,EAAoC,EAAC,CAAA;AACrC,IAAA,YAAA,CAAA,IAAA,EAAA,cAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,gBAAA,sBAAoD,GAAI,EAAA,CAAA;AA0BxD,IAAA,aAAA,CAAA,IAAA,EAAU,iCAAgC,CAAC;AAAA,MACzC,gBAAA;AAAA,MACA;AAAA,KACiC,KAAA;AACjC,MAAA,MAAM,WAAc,GAAA,IAAA,CAAK,cAAe,CAAA,WAAA,CAAY,MAAM,KAAK,CAAA;AAC/D,MAAA,MAAM,EAAE,UAAA,EAAe,GAAA,IAAA,CAAK,0BAA0B,gBAAgB,CAAA;AACtE,MAAA,qBAAA,CAAsB,MAAM;AAC1B,QAAA,UAAA,CAAW,KAAQ,GAAA,WAAA;AAAA,OACpB,CAAA;AAKD,MAAI,IAAA,IAAA,CAAK,WAAe,IAAA,UAAA,CAAW,WAAa,EAAA;AAC9C,QAAM,MAAA;AAAA,UACJ,KAAA,EAAO,EAAE,KAAA,EAAO,WAAY;AAAA,YAC1B,UAAW,CAAA,WAAA;AACf,QAAA,KAAA,MAAW,CAAC,KAAA,EAAO,KAAK,CAAA,IAAK,MAAO,CAAA,OAAA;AAAA,UAClC,IAAK,CAAA;AAAA,SACJ,EAAA;AACD,UAAA,IAAI,KAAO,EAAA;AACT,YAAA,MAAM,mBAAmB,KAAM,CAAA,MAAA;AAAA,cAC7B,CAAC,CAAM,KAAA,CAAA,CAAE,OAAY,KAAA;AAAA,aACvB;AACA,YAAA,IAAI,iBAAiB,MAAQ,EAAA;AAC3B,cAAA,KAAA,MAAW,aAAiB,IAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,MAAA,EAAU,EAAA;AAC1D,gBAAA,KAAA,MAAW,EAAE,UAAA,EAAAC,WAAW,EAAA,IAAK,aAAe,EAAA;AAC1C,kBAAA,IAAIA,WAAW,CAAA,WAAA,EAAa,KAAM,CAAA,KAAA,KAAU,KAAO,EAAA;AACjD,oBAAAA,WAAW,CAAA,KAAA,GAAQ,IAAK,CAAA,cAAA,CAAe,KAAK,CAAA;AAAA;AAC9C;AACF;AACF;AACF;AACF;AACF;AACF,KACF,CAAA;AAEA,IAAU,aAAA,CAAA,IAAA,EAAA,oBAAA,EAAqB,CAAC,UAAuB,KAAA;AACrD,MAAA,MAAM,EAAE,UAAA,EAAe,GAAA,IAAA,CAAK,0BAA0B,UAAU,CAAA;AAChE,MAAM,MAAA,SAAA,GAAY,UAAW,CAAA,WAAA,EAAa,KAAM,CAAA,KAAA;AAChD,MAAA,IAAI,SAAW,EAAA;AACb,QAAA,MAAM,qBAAwB,GAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,GAAA,CAAI,SAAS,CAAA;AACjE,QAAA,IAAI,qBAAuB,EAAA;AACzB,UAAA,KAAA,MAAW,EAAE,UAAA,EAAY,EAAG,EAAA,IAAK,qBAAuB,EAAA;AACtD,YAAA,IAAI,OAAO,UAAY,EAAA;AACrB,cAAI,IAAA,qBAAA,CAAsB,WAAW,CAAG,EAAA;AACtC,gBAAK,YAAA,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,OAAO,SAAS,CAAA;AAAA,eACjC,MAAA;AACL,gBAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,GAAA;AAAA,kBACpB,SAAA;AAAA,kBACA,qBAAsB,CAAA,MAAA;AAAA,oBACpB,CAAC,CAAM,KAAA,CAAA,CAAE,UAAe,KAAA;AAAA;AAC1B,iBACF;AAAA;AACF;AACF;AACF;AACF;AAGF,MAAA,KAAA,MAAW,CAACC,UAAAA,EAAW,aAAa,CAAA,IAAK,mBAAK,gBAAkB,CAAA,EAAA;AAC9D,QAAA,IAAI,cAAc,CAAC,CAAA,CAAE,UAAW,CAAA,QAAA,OAAe,UAAY,EAAA;AACzD,UAAK,YAAA,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,OAAOA,UAAS,CAAA;AAAA;AACxC;AAMF,MAAI,IAAA,IAAA,CAAK,WAAe,IAAA,UAAA,CAAW,WAAa,EAAA;AAC9C,QAAM,MAAA;AAAA,UACJ,KAAA,EAAO,EAAE,KAAA,EAAO,WAAY;AAAA,YAC1B,UAAW,CAAA,WAAA;AACf,QAAA,KAAA,MAAW,CAAC,KAAA,EAAO,KAAK,CAAA,IAAK,MAAO,CAAA,OAAA;AAAA,UAClC,IAAK,CAAA;AAAA,SACJ,EAAA;AACD,UAAA,IAAI,KAAO,EAAA;AACT,YAAA,MAAM,mBAAmB,KAAM,CAAA,MAAA;AAAA,cAC7B,CAAC,CAAM,KAAA,CAAA,CAAE,OAAY,KAAA;AAAA,aACvB;AACA,YAAA,IAAI,iBAAiB,MAAQ,EAAA;AAC3B,cAAA,KAAA,MAAW,aAAiB,IAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,MAAA,EAAU,EAAA;AAC1D,gBAAA,KAAA,MAAW,EAAE,UAAA,EAAAD,WAAW,EAAA,IAAK,aAAe,EAAA;AAC1C,kBAAA,IAAIA,WAAW,CAAA,WAAA,EAAa,KAAM,CAAA,KAAA,KAAU,KAAO,EAAA;AACjD,oBAAAA,WAAW,CAAA,KAAA,GAAQ,IAAK,CAAA,cAAA,CAAe,KAAK,CAAA;AAAA;AAC9C;AACF;AACF;AACF;AACF;AACF;AACF,KACF,CAAA;AA8BA,IAAW,aAAA,CAAA,IAAA,EAAA,UAAA,EAAA,CACT,iBACA,QACG,KAAA;AACH,MAAA,MAAM,cAAyC,EAAC;AAChD,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,QAAA,CAAS,QAAQ,CAAK,EAAA,EAAA;AACxC,QAAA,MAAM,gBAAgB,eAAgB,CAAA,GAAA,CAAI,QAAS,CAAA,CAAC,EAAE,OAAO,CAAA;AAC7D,QAAA,IAAI,aAAe,EAAA;AACjB,UAAc,aAAA,CAAA,OAAA,CAAQ,CAAC,EAAE,UAAA,EAAY,YAAY,EAAE,MAAA,IAAe,KAAA;AAChE,YAAA,IAAI,WAAW,WAAa,EAAA;AAC1B,cAAA,MAAM,OAAmC,GAAA;AAAA,gBACvC,gBAAkB,EAAA,UAAA;AAAA,gBAClB,UAAY,EAAA,UAAA;AAAA,gBACZ,IAAA,EAAM,SAAS,CAAC;AAAA,eAClB;AACA,cAAA,WAAA,CAAY,KAAK,OAAO,CAAA;AAAA;AAC1B,WACD,CAAA;AAAA;AACH;AAEF,MAAO,OAAA,WAAA;AAAA,KACT,CAAA;AAEA,IAAA,aAAA,CAAA,IAAA,EAAA,mBAAA,EAAoB,CAClB,OAAA,KAEA,IAAI,OAAA,CAAQ,CAAC,OAAY,KAAA;AACvB,MAAI,IAAA,OAAA,CAAQ,SAAS,oBAAsB,EAAA;AACzC,QAAA,MAAM,EAAE,eAAA,EAAiB,SAAW,EAAA,gBAAA,EAAkB,YACpD,GAAA,OAAA;AACF,QAAM,MAAA,eAAA,GAAkB,IAAK,CAAA,uBAAA,CAAwB,SAAS,CAAA;AAC9D,QAAM,MAAA,gBAAA,GAAmB,IAAK,CAAA,uBAAA,CAAwB,UAAU,CAAA;AAChE,QAAA,MAAM,oBAAoB,IAAIE,mCAAA;AAAA,UAC5B,eAAA;AAAA,UACA,gBAAA;AAAA,UACA,eAAA;AAAA,UACA;AAAA,SACF;AAEA,QAAK,YAAA,CAAA,IAAA,EAAA,mBAAA,CAAA,CAAoB,GAAI,CAAA,SAAA,EAAW,iBAAiB,CAAA;AAEzD,QAAQ,OAAA,CAAA;AAAA,UACN,gBAAkB,EAAA,SAAA;AAAA,UAClB,OAAS,EAAA,eAAA;AAAA,UACT,aAAe,EAAA,gBAAA;AAAA,UACf,gBAAkB,EAAA,UAAA;AAAA,UAClB,IAAM,EAAA;AAAA,SAC+B,CAAA;AAAA,OAClC,MAAA;AACL,QAAM,MAAA,iBAAA,GAAoB,mBAAK,mBAAoB,CAAA,CAAA,GAAA;AAAA,UACjD,OAAQ,CAAA;AAAA,SACV;AACA,QAAA,IAAI,iBAAmB,EAAA;AACrB,UAAA,iBAAA,CAAkB,MAAO,EAAA;AACzB,UAAK,YAAA,CAAA,IAAA,EAAA,mBAAA,CAAA,CAAoB,MAAO,CAAA,OAAA,CAAQ,SAAS,CAAA;AAAA,SAC5C,MAAA;AACL,UAAM,MAAA,KAAA;AAAA,YACJ,CAAA,qDAAA,EAAwD,QAAQ,SAAS,CAAA;AAAA,WAC3E;AAAA;AAEF,QAAQ,OAAA,EAAA;AAAA;AACV,KACD,CAAA,CAAA;AAEH,IAAA,aAAA,CAAA,IAAA,EAAA,gBAAA,EAAiB,CAAC,SAAsB,KAAA;AACtC,MAAM,MAAA,aAAA,GAAgB,IAAK,CAAA,WAAA,GAAc,SAAc,CAAA;AACvD,MAAA,OAAO,kBAAkB,KACrB,CAAA,GAAA,KAAA,CAAA,GACA,KAAK,QAAS,CAAA,YAAA,CAAA,IAAA,EAAK,mBAAkB,aAAa,CAAA;AAAA,KACxD,CAAA;AAEA,IAAmB,aAAA,CAAA,IAAA,EAAA,kBAAA,EAAA,CACjB,SACA,EAAA,QAAA,EACA,MACG,KAAA;AACH,MAAM,MAAA,iBAAA,GAAoB,IAAK,CAAA,oBAAA,CAAqB,SAAS,CAAA;AAC7D,MAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,MAAA,CAAO,SAAS,CAAA;AACnC,MAAM,MAAA,YAAA,GAAe,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,SAAS,CAAA;AAGpD,MAAA,MAAM,SAAY,GAAA,IAAA;AAElB,MAAM,MAAA,UAAA,GAAyB,IAAIC,6CAAuB,CAAA;AAAA,QACxD,GAAG,MAAA;AAAA,QACH,iBAAA;AAAA,QACA,gBAAgB,IAAK,CAAA,cAAA;AAAA,QACrB,SACE,EAAA,IAAA,CAAK,OAAQ,CAAA,SAAS,MAAM,KACxB,CAAA,GAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,SAAS,EAAE,MAAO,CAAA,GAAA,GACxC,IAAK,CAAA,OAAA,CAAQ,SAAS,CAAE,CAAA,GAAA;AAAA,QAC9B,OAAO,KAAS,IAAA,YAAA;AAAA,QAChB,IAAA,EAAM,IAAK,CAAA,KAAA,GAAQ,SAAS,CAAA;AAAA,QAC5B,WAAA,EAAa,IAAK,CAAA,WAAA,CAAY,SAAS,CAAA;AAAA,QACvC,eAAA,EAAiB,IAAK,CAAA,eAAA,CAAgB,SAAS,CAAA;AAAA,QAC/C,eAAe,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA;AAAA,QACpB,QAAA;AAAA,QACA,mBAAmB,IAAK,CAAA,iBAAA;AAAA,QACxB;AAAA,OACD,CAAA;AAED,MAAW,UAAA,CAAA,EAAA,CAAG,YAAc,EAAA,IAAA,CAAK,6BAA6B,CAAA;AAC9D,MAAW,UAAA,CAAA,EAAA,CAAG,cAAgB,EAAA,IAAA,CAAK,kBAAkB,CAAA;AAErD,MAAA,MAAM,qBAAwB,GAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,GAAA,CAAI,SAAS,CAAA;AACjE,MAAA,MAAM,YAAe,GAAA;AAAA,QACnB,YAAY,UAAW,CAAA,QAAA;AAAA,QACvB;AAAA,OACF;AACA,MAAA,IAAI,qBAAuB,EAAA;AACzB,QAAA,qBAAA,CAAsB,KAAK,YAAY,CAAA;AAAA,OAClC,MAAA;AACL,QAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,GAAA,CAAI,SAAW,EAAA,CAAC,YAAY,CAAC,CAAA;AAAA;AAGrD,MAAO,OAAA,UAAA;AAAA,KACT,CAAA;AA4CA,IAAU,aAAA,CAAA,IAAA,EAAA,WAAA,EAA4B,OAAO,UAAe,KAAA;AAC1D,MAAI,IAAA,UAAA,CAAW,OAAQ,CAAA,IAAA,KAAS,kBAAoB,EAAA;AAClD,QAAM,MAAA,EAAE,UAAW,EAAA,GAAI,UAAW,CAAA,OAAA;AAClC,QAAM,MAAA,EAAE,GAAI,EAAA,GAAI,UAAW,CAAA,MAAA;AAC3B,QAAA,MAAM,YAAe,GAAA,IAAA,CAAK,eAAgB,CAAA,UAAA,EAAY,KAAK,CAAA;AAC3D,QAAA,IAAI,YAAc,EAAA;AAChB,UAAA,YAAA,CAAa,OAAO,GAAa,CAAA;AACjC,UAAO,OAAA;AAAA,YACL,IAAM,EAAA,gBAAA;AAAA,YACN,IAAM,EAAA,KAAA;AAAA,WACR;AAAA,SACK,MAAA;AACL,UAAA,MAAM,EAAE,UAAA,EAAe,GAAA,IAAA,CAAK,0BAA0B,UAAU,CAAA;AAChE,UAAA,IAAI,WAAW,KAAO,EAAA;AACpB,YAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,MAAO,CAAA,UAAA,CAAW,MAAM,KAAU,CAAA;AACrD,YAAA,IAAI,KAAO,EAAA;AACT,cAAA,KAAA,CAAM,OAAO,GAAa,CAAA;AAC1B,cAAO,OAAA;AAAA,gBACL,IAAM,EAAA,gBAAA;AAAA,gBACN,IAAM,EAAA,KAAA;AAAA,eACR;AAAA;AACF;AACF;AACF;AAEF,MAAO,OAAA;AAAA,QACL,IAAM,EAAA,cAAA;AAAA,QACN,YAAc,EAAA;AAAA,OAChB;AAAA,KACF,CAAA;AAcA,IAAQ,aAAA,CAAA,IAAA,EAAA,UAAA,EAA2B,OAAO,UAAe,KAAA;AACvD,MAAI,IAAAC,6BAAA,CAAqB,UAAU,CAAG,EAAA;AACpC,QAAM,MAAA,EAAE,UAAW,EAAA,GAAI,UAAW,CAAA,OAAA;AAClC,QAAA,MAAM,EAAE,MAAA,EAAQ,IAAM,EAAA,GAAA,KAAQ,UAAW,CAAA,MAAA;AACzC,QAAI,IAAA,WAAA,GAAoC,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,UAAU,CAAA;AACxE,QAAA,IAAI,CAAC,WAAa,EAAA;AAChB,UAAA,MAAM,EAAE,UAAA,EAAe,GAAA,IAAA,CAAK,0BAA0B,UAAU,CAAA;AAChE,UAAA,IAAI,WAAW,KAAO,EAAA;AACpB,YAAA,WAAA,GAAc,IAAK,CAAA,MAAA,CAAO,UAAW,CAAA,KAAA,CAAM,KAAU,CAAA;AAAA;AACvD;AAEF,QAAA,IAAI,WAAa,EAAA;AACf,UAAI,IAAA;AACF,YAAoB,mBAAA,CAAA,WAAA,CAAY,MAAQ,EAAA,MAAA,EAAkB,IAAI,CAAA;AAC9D,YAAY,WAAA,CAAA,MAAA,CAAO,GAAe,EAAA,MAAA,EAAkB,IAAI,CAAA;AACxD,YAAO,OAAA;AAAA,cACL,IAAM,EAAA,gBAAA;AAAA,cACN,IAAM,EAAA,KAAA;AAAA,aACR;AAAA,mBACO,CAAG,EAAA;AACV,YAAM,MAAA,EAAE,SAAY,GAAA,CAAA;AACpB,YAAO,OAAA;AAAA,cACL,IAAM,EAAA,cAAA;AAAA,cACN,YAAc,EAAA;AAAA,aAChB;AAAA;AACF,SACK,MAAA;AACL,UAAA,MAAM,MAAM,0DAA0D,CAAA;AAAA;AACxE,OACK,MAAA;AACL,QAAA,MAAM,MAAM,CAAuC,qCAAA,CAAA,CAAA;AAAA;AACrD,KACF,CAAA;AAEA,IAAA,aAAA,CAAA,IAAA,EAAQ,+BAAkD,OAAO;AAAA,MAC/D,OAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACI,KAAA;AACJ,MAAA,IAAI,SAAS,4BAA8B,EAAA;AACzC,QAAQ,OAAA,CAAA,GAAA,CAAI,CAAW,QAAA,EAAA,OAAO,CAAE,CAAA,CAAA;AAEhC,QAAM,MAAA,MAAA,GAAS,MAAM,IAAA,CAAK,gBAAiB,CAAA;AAAA,UACzC,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,kBAAA;AAAA,YACN,UAAY,EAAA;AAAA,WACd;AAAA,UACA,MAAQ,EAAA;AAAA,YACN,eAAiB,EAAA;AAAA,WACnB;AAAA,UACA,OAAA;AAAA,UACA,IAAM,EAAA;AAAA,SACP,CAAA;AACD,QAAI,IAAAC,qBAAA,CAAa,MAAM,CAAG,EAAA;AACxB,UAAM,MAAA,EAAE,KAAM,EAAA,GAAI,MAAO,CAAA,IAAA;AACzB,UAAO,OAAA;AAAA,YACL,IAAM,EAAA,qBAAA;AAAA,YACN,OAAA;AAAA,YACA,MAAQ,EAAA;AAAA,cACN,eAAiB,EAAA,MAAA;AAAA,cACjB,IAAM,EAAA,oBAAA;AAAA,cACN;AAAA,aACF;AAAA,YACA;AAAA,WACF;AAAA,SACK,MAAA;AACL,UAAO,OAAA;AAAA,YACL,OAAO,MAAO,CAAA,YAAA;AAAA,YACd,OAAA;AAAA,YACA,IAAM,EAAA,oBAAA;AAAA,YACN;AAAA,WACF;AAAA;AACF,OACK,MAAA;AACL,QAAO,OAAA;AAAA,UACL,KAAO,EAAA,WAAA;AAAA,UACP,OAAA;AAAA,UACA,IAAM,EAAA,oBAAA;AAAA,UACN;AAAA,SACF;AAAA;AACF,KACF,CAAA;AAEA,IAAQ,aAAA,CAAA,IAAA,EAAA,kBAAA,EAAmC,OAAO,UAAe,KAAA;AAC/D,MAAI,IAAAC,qCAAA,CAA6B,UAAU,CAAG,EAAA;AAC5C,QAAM,MAAA,EAAE,UAAW,EAAA,GAAI,UAAW,CAAA,OAAA;AAClC,QAAA,MAAM,EAAE,eAAA,GAAkB,iBAAkB,EAAA,GAAI,UAAW,CAAA,MAAA;AAC3D,QAAM,MAAA,YAAA,GAAe,IAAK,CAAA,yBAAA,CAA0B,UAAU,CAAA;AAC9D,QAAM,MAAA,EAAE,YAAe,GAAA,YAAA;AACvB,QAAM,MAAA,EAAE,KAAO,EAAA,QAAA,EAAa,GAAA,UAAA;AAC5B,QAAA,IAAI,QAAU,EAAA;AACZ,UAAA,MAAM,WAAc,GAAA,IAAA,CAAK,MAAO,CAAA,QAAA,CAAS,KAAU,CAAA;AACnD,UAAA,IAAI,WAAa,EAAA;AACf,YAAM,MAAA,gBAAA,GAAmB,CAAW,QAAA,EAAAC,aAAA,EAAM,CAAA,CAAA;AAC1C,YAAI,IAAA;AACF,cAAA,MAAM,eAAe,IAAK,CAAA,kBAAA;AAAA,gBACxB,WAAA;AAAA,gBACA,gBAAA;AAAA,gBACA,eAAA;AAAA;AAAA;AAAA,gBAGA;AAAA,eACF;AACA,cAAK,YAAA,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,gBAAgB,CAAI,GAAA,YAAA;AAC1C,cAAA,YAAA,CAAa,gBAAmB,GAAA,gBAAA;AAEhC,cAAO,OAAA;AAAA,gBACL,IAAM,EAAA;AAAA,kBACJ,eAAiB,EAAA,aAAA;AAAA,kBACjB,KAAO,EAAA;AAAA,oBACL,QAAQ,QAAS,CAAA,MAAA;AAAA,oBACjB,KAAO,EAAA;AAAA;AACT,iBACF;AAAA,gBACA,IAAM,EAAA;AAAA,eACR;AAAA,qBACO,CAAG,EAAA;AACV,cAAO,OAAA;AAAA,gBACL,IAAM,EAAA,cAAA;AAAA,gBACN,cAAe,CAAY,CAAA;AAAA,eAC7B;AAAA;AACF;AACF;AACF,OACK,MAAA;AACL,QAAA,MAAM,MAAM,CAA6C,2CAAA,CAAA,CAAA;AAAA;AAG3D,MAAO,OAAA;AAAA,QACL,IAAM,EAAA,cAAA;AAAA,QACN,YAAc,EAAA;AAAA,OAChB;AAAA,KACF,CAAA;AAEA,IAAQ,aAAA,CAAA,IAAA,EAAA,QAAA,EAAyB,OAAO,UAAe,KAAA;AACrD,MAAI,IAAAC,2BAAA,CAAmB,UAAU,CAAG,EAAA;AAClC,QAAM,MAAA,EAAE,UAAW,EAAA,GAAI,UAAW,CAAA,OAAA;AAClC,QAAM,MAAA,YAAA,GAAe,IAAK,CAAA,yBAAA,CAA0B,UAAU,CAAA;AAC9D,QAAA,MAAM,eAAe,YAAa,CAAA,gBAAA,GAC9B,mBAAK,gBAAiB,CAAA,CAAA,YAAA,CAAa,gBAAgB,CACnD,GAAA,KAAA,CAAA;AACJ,QAAA,IAAI,CAAC,YAAc,EAAA;AACjB,UAAO,OAAA;AAAA,YACL,IAAM,EAAA,cAAA;AAAA,YACN,YAAA,EAAc,gDAAgD,UAAU,CAAA;AAAA,WAC1E;AAAA;AAEF,QAAM,MAAA,EAAE,IAAK,EAAA,GAAI,UAAW,CAAA,MAAA;AAE5B,QAAA,MAAM,YAAY,YAAa,CAAA,GAAA;AAC/B,QAAA,MAAM,WAAc,GAAA,MAAA,CAAO,IAAK,CAAA,SAAS,CAAE,CAAA,MAAA;AAC3C,QAAA,MAAM,MAAkB,IAAI,KAAA,CAAM,WAAW,CAAA,CAAE,KAAK,EAAE,CAAA;AACtD,QAAA,KAAA,MAAW,CAAC,GAAK,EAAA,GAAG,KAAK,MAAO,CAAA,OAAA,CAAQ,SAAS,CAAG,EAAA;AAClD,UAAI,IAAA,IAAA,CAAK,GAAG,CAAA,KAAM,KAAW,CAAA,EAAA;AAC3B,YAAI,GAAA,CAAA,GAAG,CAAI,GAAA,IAAA,CAAK,GAAG,CAAA;AAAA;AACrB;AAEF,QAAA,YAAA,CAAa,OAAO,GAAG,CAAA;AACvB,QAAA,OAAO,EAAE,IAAA,EAAM,gBAAkB,EAAA,IAAA,EAAM,KAAU,CAAA,EAAA;AAAA;AAEnD,MAAO,OAAA;AAAA,QACL,IAAM,EAAA,cAAA;AAAA,QACN,YAAc,EAAA;AAAA,OAChB;AAAA,KACF,CAAA;AAEA,IAAQ,aAAA,CAAA,IAAA,EAAA,gBAAA,EAAiC,OAAO,UAAe,KAAA;AAC7D,MAAI,IAAAC,mCAAA,CAA2B,UAAU,CAAG,EAAA;AAC1C,QAAM,MAAA,EAAE,UAAW,EAAA,GAAI,UAAW,CAAA,OAAA;AAElC,QAAM,MAAA,YAAA,GAAe,IAAK,CAAA,yBAAA,CAA0B,UAAU,CAAA;AAC9D,QAAM,MAAA,gBAAA,GAAmB,aAAa,gBAAoB,IAAA,UAAA;AAC1D,QAAM,MAAA,YAAA,GAAe,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,gBAAgB,CAAA;AAC3D,QAAM,MAAA,EAAE,YAAe,GAAA,YAAA;AAEvB,QAAA,IAAI,WAAW,KAAO,EAAA;AACpB,UAAA,MAAM,WAAc,GAAA,IAAA,CAAK,MAAO,CAAA,UAAA,CAAW,MAAM,KAAU,CAAA;AAE3D,UAAI,IAAA,UAAA,CAAW,MAAO,CAAA,IAAA,KAAS,IAAM,EAAA;AACnC,YAAA,IAAI,aAAgB,GAAA,CAAA;AACpB,YAAI,IAAAC,gCAAA,CAAoB,YAAY,CAAG,EAAA;AACrC,cAAM,MAAA,OAAA,GAAU,aAAa,iBAAkB,EAAA;AAC/C,cAAQ,OAAA,CAAA,OAAA,CAAQ,CAAC,UAAA,EAAY,GAAQ,KAAA;AACnC,gBAAM,MAAA,EAAE,WAAa,EAAA,mBAAA,EAAwB,GAAA,UAAA;AAC7C,gBAAM,MAAA,UAAA,GAAa,WAAY,CAAA,SAAA,CAAU,GAAG,CAAA;AAC5C,gBAAA,MAAM,0BACJ,GAAA,UAAA,CAAW,WAAY,CAAA,GAAA,CAAI,mBAAmB,CAAA;AAChD,gBAAA,IAAI,wBAAwB,0BAA4B,EAAA;AAEtD,kBAAiB,aAAA,IAAA,CAAA;AACjB,kBAAM,MAAA,eAAA,GAAkB,YAAa,CAAA,SAAA,CAAU,GAAG,CAAA;AAClD,kBAAM,MAAA,MAAA,GAAS,gBAAgB,KAAM,EAAA;AACrC,kBAAA,MAAM,WAAqB,EAAC;AAC5B,kBAAO,MAAA,CAAA,OAAA,CAAQ,WAAW,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAC,MAAA,EAAQ,KAAK,CAAM,KAAA;AACvD,oBAAA,QAAA,CAAS,IAAK,CAAA,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,KAAK,CAAE,CAAA,CAAA;AAAA,mBACnC,CAAA;AACD,kBAAA,MAAA,CAAO,aAAa,GAAI,CAAA,MAAM,CAAI,GAAA,QAAA,CAAS,KAAK,GAAG,CAAA;AACnD,kBAAA,YAAA,CAAa,UAAU,MAAM,CAAA;AAAA,iBACxB,MAAA;AACL,kBAAM,MAAA,MAAA,GAAS,WAAW,KAAM,EAAA;AAChC,kBAAO,MAAA,CAAA,OAAA,CAAQ,WAAW,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAC,MAAA,EAAQ,KAAK,CAAM,KAAA;AACvD,oBAAA,MAAA,CAAO,WAAY,CAAA,GAAA,CAAI,MAAM,CAAC,CAAI,GAAA,KAAA;AAAA,mBACnC,CAAA;AACD,kBAAA,WAAA,CAAY,UAAU,MAAM,CAAA;AAAA;AAC9B,eACD,CAAA;AACD,cAAA,OAAA,CAAQ,KAAM,EAAA;AAAA,aACT,MAAA;AAGL,cAAM,MAAA,SAAA,GAAY,YAAa,CAAA,GAAA,CAAI,QAAQ,CAAA;AAC3C,cAAM,MAAA,aAAA,GAAgB,YAAY,MAAO,CAAA,OAAA;AACzC,cAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,YAAa,CAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACjD,gBAAM,MAAA,UAAA,GAAa,YAAa,CAAA,IAAA,CAAK,CAAC,CAAA;AACtC,gBAAI,IAAA,UAAA,CAAW,SAAS,CAAG,EAAA;AAC3B,gBAAA,MAAM,YAAkC,aAAc,CAAA,GAAA;AAAA,kBACpD,CAAC,GAAQ,KAAA,UAAA,CAAW,aAAa,GAAI,CAAA,GAAA,CAAI,IAAI,CAAC;AAAA,iBAChD;AACA,gBAAA,WAAA,CAAY,OAAO,SAAS,CAAA;AAAA;AAC9B;AAGF,YAAA,IAAI,gBAAgB,CAAG,EAAA;AACrB,cAAO,OAAA;AAAA,gBACL,YAAc,EAAA,cAAA;AAAA,gBACd,IAAM,EAAA;AAAA,eACR;AAAA,aACK,MAAA;AACL,cAAO,OAAA;AAAA,gBACL,IAAM,EAAA,gBAAA;AAAA,gBACN,IAAM,EAAA,KAAA;AAAA,eACR;AAAA;AACF,WACK,MAAA;AACL,YAAO,OAAA;AAAA,cACL,IAAM,EAAA,gBAAA;AAAA,cACN,IAAM,EAAA,KAAA;AAAA,aACR;AAAA;AACF,SACK,MAAA;AACL,UAAA,MAAM,MAAM,2BAA2B,CAAA;AAAA;AACzC,OACK,MAAA;AACL,QAAA,MAAM,MAAM,CAA6C,2CAAA,CAAA,CAAA;AAAA;AAC3D,KAMF,CAAA;AAGA;AAAA,IAAQ,aAAA,CAAA,IAAA,EAAA,gBAAA,EAAiC,OAAO,UAAe,KAAA;AAC7D,MAAI,IAAA,UAAA,CAAW,OAAQ,CAAA,IAAA,KAAS,kBAAoB,EAAA;AAClD,QAAM,MAAA,EAAE,UAAW,EAAA,GAAI,UAAW,CAAA,OAAA;AAClC,QAAM,MAAA,YAAA,GAAe,IAAK,CAAA,eAAA,CAAgB,UAAU,CAAA;AACpD,QAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,YAAa,CAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACjD,UAAM,MAAA,MAAA,GAAS,YAAa,CAAA,IAAA,CAAK,CAAC,CAAA;AAClC,UAAA,MAAM,EAAE,MAAA,EAAQ,KAAM,EAAA,GAAI,UAAW,CAAA,MAAA;AAIrC,UAAA,MAAM,QAAW,GAAA,YAAA,CAAa,GAAI,CAAA,YAAA,CAAa,OAAO,GAAG,CAAA;AACzD,UAAa,YAAA,CAAA,MAAA;AAAA,YACX,MAAA,CAAO,MAAO,CAAA,QAAQ,CAAC,CAAA;AAAA,YACvB,MAAA;AAAA,YACA;AAAA,WACF;AAAA;AAEF,QAAO,OAAA;AAAA,UACL,IAAM,EAAA,gBAAA;AAAA,UACN,IAAM,EAAA,KAAA;AAAA,SACR;AAAA,OACK,MAAA;AACL,QAAA,MAAM,MAAM,CAA6C,2CAAA,CAAA,CAAA;AAAA;AAC3D,KACF,CAAA;AA4EA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAgC,YAAA,CAAA,IAAA,EAAA,eAAA,EAAA;AAAA,MAC9B;AAAA,QACE,OAAS,EAAA,QAAA;AAAA,QACT,SAAS,IAAK,CAAA;AAAA,OAChB;AAAA,MACA;AAAA,QACE,OAAS,EAAA,+BAAA;AAAA,QACT,SAAS,IAAK,CAAA;AAAA,OAChB;AAAA,MACA;AAAA,QACE,OAAS,EAAA,kBAAA;AAAA,QACT,SAAS,IAAK,CAAA;AAAA,OAChB;AAAA,MACA;AAAA,QACE,OAAS,EAAA,gBAAA;AAAA,QACT,SAAS,IAAK,CAAA;AAAA,OAChB;AAAA,MACA;AAAA,QACE,OAAS,EAAA,UAAA;AAAA,QACT,SAAS,IAAK,CAAA;AAAA;AAChB,KACF,CAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAwC,YAAA,CAAA,IAAA,EAAA,mBAAA,EAAA;AAAA,MACtC;AAAA,QACE,OAAS,EAAA,kBAAA;AAAA,QACT,SAAS,IAAK,CAAA;AAAA;AAChB,KACF,CAAA;AA/tBE,IAAA,YAAA,CAAA,IAAA,EAAK,KAAQ,EAAA,IAAA,CAAA;AACb,IAAAC,eAAA,CAAgB,SAAS,IAAI,CAAA;AAAA;AAC/B,EAWA,eAAe,SAAmB,EAAA;AAChC,IAAA,OACE,KAAK,OAAQ,CAAA,SAAc,KAAK,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,SAAS,CAAG,EAAA,MAAA;AAAA;AAEtE,EAEA,YAAe,GAAA;AACb,IAAO,OAAA,MAAA,CAAO,IAAK,CAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAChC,EAiGA,IAAI,IAAO,GAAA;AACT,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,KAAA,CAAA;AAAA;AACd,EAEA,0BAA0B,UAAoB,EAAA;AAC5C,IAAA,KAAA,MAAW,aAAiB,IAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,MAAA,EAAU,EAAA;AAC1D,MAAA,KAAA,MAAW,gBAAgB,aAAe,EAAA;AACxC,QAAI,IAAA,YAAA,CAAa,eAAe,UAAY,EAAA;AAC1C,UAAO,OAAA,YAAA;AAAA;AACT;AACF;AAEF,IAAM,MAAA,KAAA;AAAA,MACJ,oEAAoE,UAAU,CAAA;AAAA,KAChF;AAAA;AACF,EAEA,wBAAwB,IAA0B,EAAA;AAChD,IAAA,KAAA,MAAW,aAAiB,IAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,MAAA,EAAU,EAAA;AAC1D,MAAA,KAAA,MAAW,EAAE,UAAA,EAAY,UAAW,EAAA,IAAK,aAAe,EAAA;AACtD,QAAA,IAAI,eAAe,IAAM,EAAA;AACvB,UAAO,OAAA,UAAA;AAAA;AACT;AACF;AAEF,IAAM,MAAA,KAAA,CAAM,CAA4B,yBAAA,EAAA,IAAI,CAAyB,uBAAA,CAAA,CAAA;AAAA;AACvE,EAwHA,YAAY,SAAc,EAAA;AACxB,IAAM,MAAA,aAAA,GAAgB,IAAK,CAAA,QAAA,GAAW,SAAS,CAAA;AAC/C,IAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,aAAa,CAAG,EAAA;AAChC,MAAO,OAAA,YAAA,CAAA,IAAA,EAAK,eAAgB,CAAA,CAAA,MAAA,CAAO,aAAa,CAAA;AAAA,KAC3C,MAAA;AACL,MAAA,OAAO,YAAK,CAAA,IAAA,EAAA,eAAA,CAAA;AAAA;AACd;AACF,EAEA,gBAAgB,SAAc,EAAA;AAC5B,IAAM,MAAA,aAAA,GAAgB,IAAK,CAAA,YAAA,GAAe,SAAS,CAAA;AACnD,IAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,aAAa,CAAG,EAAA;AAChC,MAAO,OAAA,YAAA,CAAA,IAAA,EAAK,mBAAoB,CAAA,CAAA,MAAA,CAAO,aAAa,CAAA;AAAA,KAC/C,MAAA;AACL,MAAA,OAAO,YAAK,CAAA,IAAA,EAAA,mBAAA,CAAA;AAAA;AACd;AACF,EAEA,IAAc,eAAkB,GAAA;AAC9B,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA;AAAA;AACd,EAWU,eAAA,CAAgB,gBAA0B,EAAA,eAAA,GAAkB,IAAM,EAAA;AAC1E,IAAM,MAAA,YAAA,GAAe,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,gBAAgB,CAAA;AAC3D,IAAA,IAAI,YAAc,EAAA;AAChB,MAAO,OAAA,YAAA;AAAA,eACE,eAAiB,EAAA;AAC1B,MAAM,MAAA,KAAA;AAAA,QACJ,+CAA+C,gBAAgB,CAAA;AAAA,OACjE;AAAA;AACF;AACF,EAiCQ,qBAAqB,SAAc,EAAA;AACzC,IAAM,MAAA,MAAA,GACJ,KAAK,OAAQ,CAAA,SAAS,KAAK,IAAK,CAAA,eAAA,CAAgB,SAAS,CAAG,EAAA,MAAA;AAC9D,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,OAAO,MAAO,CAAA,OAAA;AAAA,KACT,MAAA;AACL,MAAM,MAAA,KAAA;AAAA,QACJ,CAA+B,4BAAA,EAAA,YAAA,CAAA,IAAA,EAAK,KAAK,CAAA,CAAA,OAAA,EAAU,SAAS,CAAA;AAAA,OAC9D;AAAA;AACF;AACF,EAyRU,kBACR,CAAA,WAAA,EACA,gBACA,EAAA,eAAA,GAAmC,mBACnC,UACA,EAAA;AACA,IAAI,IAAA,eAAA,CAAgB,QAAS,CAAA,UAAU,CAAG,EAAA;AACxC,MAAO,OAAA,IAAA,CAAK,6BAA8B,CAAA,WAAA,EAAa,gBAAgB,CAAA;AAAA,KACzE,MAAA,IAAW,oBAAoB,eAAiB,EAAA;AAC9C,MAAA,OAAO,IAAK,CAAA,kCAAA;AAAA,QACV,WAAA;AAAA,QACA,gBAAA;AAAA,QACA;AAAA,OACF;AAAA,KACF,MAAA,IAAW,oBAAoB,qBAAuB,EAAA;AACpD,MAAO,OAAA,IAAA,CAAK,uBAAwB,CAAA,WAAA,EAAa,gBAAgB,CAAA;AAAA,KAC5D,MAAA;AACL,MAAM,MAAA,KAAA;AAAA,QACJ,2DAA2D,eAAe,CAAA;AAAA,OAC5E;AAAA;AACF;AACF,EAEU,6BAAA,CACR,aACA,gBACA,EAAA;AACA,IAAO,OAAAC,yBAAA,CAAa,aAAa,gBAAgB,CAAA;AAAA;AACnD,EAEU,uBACR,CAAA,EAAE,MAAO,EAAA,EACT,gBACA,EAAA;AAGA,IAAA,MAAM,gBAAgBC,oCAAmB,CAAA;AAAA,MACvC,GAAG,MAAA;AAAA,MACH,OAAO,EAAE,GAAG,MAAO,CAAA,KAAA,EAAO,OAAO,gBAAiB;AAAA,KACnD,CAAA;AACD,IAAA,OAAO,IAAIC,WAAM,CAAA,aAAA,EAAe,EAAI,EAAAC,kCAAA,CAA6B,aAAa,CAAC,CAAA;AAAA;AACjF,EAEU,mCACR,EAAE,IAAA,EAAM,KAAK,MAAO,EAAA,EACpB,kBACA,UACA,EAAA;AACA,IAAM,MAAA,cAAA,GAAiB,WAAW,iBAAkB,EAAA;AACpD,IAAM,MAAA,QAAA,GAAW,GAAI,CAAA,MAAA,CAAO,GAAG,CAAA;AAC/B,IAAA,MAAM,cAAsC,EAAC;AAC7C,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,cAAA,CAAe,QAAQ,CAAK,EAAA,EAAA;AAC9C,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,QAAA,IAAI,KAAK,CAAC,CAAA,CAAE,QAAQ,CAAM,KAAA,cAAA,CAAe,CAAC,CAAG,EAAA;AAC3C,UAAY,WAAA,CAAA,IAAA,CAAK,IAAK,CAAA,CAAC,CAAC,CAAA;AAAA;AAC1B;AACF;AAIF,IAAM,MAAA,aAAA,GAAgBF,qCAAmB,MAAM,CAAA;AAE/C,IAAA,OAAO,IAAIC,WAAA;AAAA,MACT,aAAA;AAAA,MACA,WAAA;AAAA,MACAC,mCAA6B,aAAa;AAAA,KAC5C;AAAA;AA0CJ;AAvuBE,KAAA,GAAA,IAAA,OAAA,EAAA;AACA,mBAAA,GAAA,IAAA,OAAA,EAAA;AACA,gBAAA,GAAA,IAAA,OAAA,EAAA;AACA,cAAA,GAAA,IAAA,OAAA,EAAA;AACA,gBAAA,GAAA,IAAA,OAAA,EAAA;AAisBA,eAAA,GAAA,IAAA,OAAA,EAAA;AA4BA,mBAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
@@ -34,20 +34,87 @@ class VuuModule {
34
34
  __privateAdd(this, _sessionTableMap, {});
35
35
  __privateAdd(this, _tableServices);
36
36
  __privateAdd(this, _subscriptionMap, /* @__PURE__ */ new Map());
37
+ __publicField(this, "handlePostSubscribeActivities", ({
38
+ clientViewportId,
39
+ tableSchema
40
+ }) => {
41
+ const visualLinks = this.getVisualLinks(tableSchema.table.table);
42
+ const { dataSource } = this.getSubscriptionByViewport(clientViewportId);
43
+ requestAnimationFrame(() => {
44
+ dataSource.links = visualLinks;
45
+ });
46
+ if (this.visualLinks && dataSource.tableSchema) {
47
+ const {
48
+ table: { table: sourceTable }
49
+ } = dataSource.tableSchema;
50
+ for (const [table, links] of Object.entries(
51
+ this.visualLinks
52
+ )) {
53
+ if (links) {
54
+ const potentialTargets = links.filter(
55
+ (l) => l.toTable === sourceTable
56
+ );
57
+ if (potentialTargets.length) {
58
+ for (const subscriptions of __privateGet(this, _subscriptionMap).values()) {
59
+ for (const { dataSource: dataSource2 } of subscriptions) {
60
+ if (dataSource2.tableSchema?.table.table === table) {
61
+ dataSource2.links = this.getVisualLinks(table);
62
+ }
63
+ }
64
+ }
65
+ }
66
+ }
67
+ }
68
+ }
69
+ });
37
70
  __publicField(this, "unregisterViewport", (viewportId) => {
38
- for (const [tableName, subscriptions] of __privateGet(this, _subscriptionMap)) {
71
+ const { dataSource } = this.getSubscriptionByViewport(viewportId);
72
+ const tableName = dataSource.tableSchema?.table.table;
73
+ if (tableName) {
74
+ const subscriptionsForTable = __privateGet(this, _subscriptionMap).get(tableName);
75
+ if (subscriptionsForTable) {
76
+ for (const { viewportId: vp } of subscriptionsForTable) {
77
+ if (vp === viewportId) {
78
+ if (subscriptionsForTable.length === 1) {
79
+ __privateGet(this, _subscriptionMap).delete(tableName);
80
+ } else {
81
+ __privateGet(this, _subscriptionMap).set(
82
+ tableName,
83
+ subscriptionsForTable.filter(
84
+ (s) => s.viewportId !== viewportId
85
+ )
86
+ );
87
+ }
88
+ }
89
+ }
90
+ }
91
+ }
92
+ for (const [tableName2, subscriptions] of __privateGet(this, _subscriptionMap)) {
39
93
  if (subscriptions[0].viewportId.toString() === viewportId) {
40
- __privateGet(this, _subscriptionMap).delete(tableName);
41
- } else {
42
- const links = subscriptions[0].dataSource.links;
94
+ __privateGet(this, _subscriptionMap).delete(tableName2);
95
+ }
96
+ }
97
+ if (this.visualLinks && dataSource.tableSchema) {
98
+ const {
99
+ table: { table: sourceTable }
100
+ } = dataSource.tableSchema;
101
+ for (const [table, links] of Object.entries(
102
+ this.visualLinks
103
+ )) {
43
104
  if (links) {
44
- for (let i = 0; i < links?.length; i++) {
45
- if (links[i].parentClientVpId === viewportId) {
46
- links.splice(i);
105
+ const potentialTargets = links.filter(
106
+ (l) => l.toTable === sourceTable
107
+ );
108
+ if (potentialTargets.length) {
109
+ for (const subscriptions of __privateGet(this, _subscriptionMap).values()) {
110
+ for (const { dataSource: dataSource2 } of subscriptions) {
111
+ if (dataSource2.tableSchema?.table.table === table) {
112
+ dataSource2.links = this.getVisualLinks(table);
113
+ }
114
+ }
47
115
  }
48
116
  }
49
117
  }
50
- subscriptions[0].dataSource.links = links;
51
118
  }
52
119
  }
53
120
  });
@@ -104,11 +171,11 @@ class VuuModule {
104
171
  resolve();
105
172
  }
106
173
  }));
174
+ __publicField(this, "getVisualLinks", (tableName) => {
175
+ const linksForTable = this.visualLinks?.[tableName];
176
+ return linksForTable === void 0 ? void 0 : this.getLinks(__privateGet(this, _subscriptionMap), linksForTable);
177
+ });
107
178
  __publicField(this, "createDataSource", (tableName, viewport, config) => {
108
- const getVisualLinks = (tableName2) => {
109
- const linksForTable = this.visualLinks?.[tableName2];
110
- return linksForTable === void 0 ? void 0 : this.getLinks(__privateGet(this, _subscriptionMap), linksForTable);
111
- };
112
179
  const columnDescriptors = this.getColumnDescriptors(tableName);
113
180
  const table = this.tables[tableName];
114
181
  const sessionTable = __privateGet(this, _sessionTableMap)[tableName];
@@ -116,7 +183,7 @@ class VuuModule {
116
183
  const dataSource = new TickingArrayDataSource({
117
184
  ...config,
118
185
  columnDescriptors,
119
- getVisualLinks,
186
+ getVisualLinks: this.getVisualLinks,
120
187
  keyColumn: this.schemas[tableName] === void 0 ? __privateGet(this, _sessionTableMap)[tableName].schema.key : this.schemas[tableName].key,
121
188
  table: table || sessionTable,
122
189
  menu: this.menus?.[tableName],
@@ -127,6 +194,7 @@ class VuuModule {
127
194
  visualLinkService: this.visualLinkService,
128
195
  vuuModule
129
196
  });
197
+ dataSource.on("subscribed", this.handlePostSubscribeActivities);
130
198
  dataSource.on("unsubscribed", this.unregisterViewport);
131
199
  const existingSubscriptions = __privateGet(this, _subscriptionMap).get(tableName);
132
200
  const subscription = {
@@ -329,9 +397,10 @@ class VuuModule {
329
397
  __publicField(this, "endEditSession", async (rpcRequest) => {
330
398
  if (isEndEditSessionRpcRequest(rpcRequest)) {
331
399
  const { viewPortId } = rpcRequest.context;
332
- const sessionTable = __privateGet(this, _sessionTableMap)[viewPortId];
333
- delete __privateGet(this, _sessionTableMap)[viewPortId];
334
- const { dataSource } = this.getSubscriptionByViewport(viewPortId);
400
+ const subscription = this.getSubscriptionByViewport(viewPortId);
401
+ const sessionTableName = subscription.sessionTableName ?? viewPortId;
402
+ const sessionTable = __privateGet(this, _sessionTableMap)[sessionTableName];
403
+ const { dataSource } = subscription;
335
404
  if (dataSource.table) {
336
405
  const sourceTable = this.tables[dataSource.table.table];
337
406
  if (rpcRequest.params.save === true) {
@@ -362,9 +431,15 @@ class VuuModule {
362
431
  });
363
432
  updates.clear();
364
433
  } else {
434
+ const vuuMsgIdx = sessionTable.map["vuuMsg"];
435
+ const sourceColumns = sourceTable.schema.columns;
365
436
  for (let i = 0; i < sessionTable.data.length; i++) {
366
- const newRow = sessionTable.data[i];
367
- sourceTable.updateRow(newRow);
437
+ const sessionRow = sessionTable.data[i];
438
+ if (sessionRow[vuuMsgIdx]) continue;
439
+ const sourceRow = sourceColumns.map(
440
+ (col) => sessionRow[sessionTable.map[col.name]]
441
+ );
442
+ sourceTable.insert(sourceRow);
368
443
  }
369
444
  }
370
445
  if (rejectedCount > 0) {
@@ -456,7 +531,7 @@ class VuuModule {
456
531
  moduleContainer.register(this);
457
532
  }
458
533
  getTableSchema(tableName) {
459
- return this.schemas[tableName];
534
+ return this.schemas[tableName] ?? __privateGet(this, _sessionTableMap)[tableName]?.schema;
460
535
  }
461
536
  getTableList() {
462
537
  return Object.keys(this.tables);
@@ -535,7 +610,7 @@ class VuuModule {
535
610
  dataSource
536
611
  );
537
612
  } else if (editSessionMode === "empty-session-table") {
538
- return this.createEmptySessionTable(sourceTable);
613
+ return this.createEmptySessionTable(sourceTable, sessionTableName);
539
614
  } else {
540
615
  throw Error(
541
616
  `[VuuModule] createSessionTable, invalid editSessionMode ${editSessionMode}`
@@ -545,8 +620,12 @@ class VuuModule {
545
620
  createSessionTableWithAllRows(sourceTable, sessionTableName) {
546
621
  return SessionTable(sourceTable, sessionTableName);
547
622
  }
548
- createEmptySessionTable({ schema }) {
549
- return new Table(schema, [], buildDataColumnMapFromSchema(schema));
623
+ createEmptySessionTable({ schema }, sessionTableName) {
624
+ const sessionSchema = sessionTableSchema({
625
+ ...schema,
626
+ table: { ...schema.table, table: sessionTableName }
627
+ });
628
+ return new Table(sessionSchema, [], buildDataColumnMapFromSchema(sessionSchema));
550
629
  }
551
630
  createSessionTableFromSelectedRows({ data, map, schema }, sessionTableName, dataSource) {
552
631
  const selectedRowIds = dataSource.getSelectedRowIds();
@@ -1 +1 @@
1
- {"version":3,"file":"VuuModule.js","sources":["../../../../../packages/vuu-data-test/src/core/module/VuuModule.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceConfig,\n DataSourceVisualLinkCreatedMessage,\n EditSessionMode,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuMenu,\n VuuRowDataItemType,\n VuuLink,\n LinkDescriptorWithLabel,\n VuuRpcMenuResponse,\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n VuuRpcServiceRequest,\n RpcResultSuccess,\n RpcResultError,\n VuuRpcMenuRequest,\n VuuTable,\n VuuDataRow,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n isAddRowRpcRequest,\n isBeginEditSessionRpcRequest,\n isEditCellRpcRequest,\n isEndEditSessionRpcRequest,\n isRpcSuccess,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport { Table, buildDataColumnMapFromSchema } from \"../../Table\";\nimport { isProxySessionTable, SessionTable } from \"../../SessionTable\";\nimport { TickingArrayDataSource } from \"../../TickingArrayDataSource\";\nimport { RuntimeVisualLink } from \"../../RuntimeVisualLink\";\nimport moduleContainer from \"./ModuleContainer\";\nimport { sessionTableSchema } from \"../../session-table-utils\";\n\nconst assertUpdateIsValid = (\n schema: TableSchema,\n column: string,\n data: VuuRowDataItemType,\n) => {\n const col = schema.columns.find((col) => col.name === column);\n if (col) {\n console.log(`data type ${col.serverDataType} data ${data}`);\n // switch (col.serverDataType){\n // }\n } else {\n throw Error(\n `schema for table ${schema.table.table} does not include column ${column}`,\n );\n }\n};\n\nexport interface IVuuModule<T extends string = string> {\n createDataSource: (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => DataSource;\n}\n\nexport type SessionTableMap = Record<string, SessionTable | Table>;\n\nexport type ServiceHandler = (\n rpcRequest: VuuRpcServiceRequest,\n) => Promise<RpcResultSuccess | RpcResultError>;\n\nexport type MenuServiceHandler = (\n rpcRequest: VuuRpcMenuRequest,\n) => Promise<VuuRpcMenuResponse>;\n\nexport type RpcService = {\n rpcName: string;\n service: ServiceHandler;\n};\n\nexport type RpcMenuService = {\n rpcName: string;\n service: MenuServiceHandler;\n};\n\ntype Subscription = {\n viewportId: string;\n dataSource: DataSource;\n sessionTableName?: string;\n};\nexport abstract class VuuModule<T extends string = string>\n implements IVuuModule<T>\n{\n #name: string;\n #runtimeVisualLinks = new Map<string, RuntimeVisualLink>();\n #sessionTableMap: SessionTableMap = {};\n #tableServices: Record<T, RpcService[] | undefined> | undefined;\n #subscriptionMap: Map<string, Subscription[]> = new Map();\n\n constructor(name: string) {\n this.#name = name;\n moduleContainer.register(this);\n }\n\n protected abstract menus?: Record<T, VuuMenu | undefined> | undefined;\n protected abstract schemas: Record<T, Readonly<TableSchema>>;\n protected abstract tables: Record<T, Table>;\n protected abstract menuServices?:\n | Record<T, RpcMenuService[] | undefined>\n | undefined;\n protected abstract services?: Record<T, RpcService[] | undefined> | undefined;\n protected abstract visualLinks?: Record<T, VuuLink[] | undefined>;\n\n getTableSchema(tableName: string) {\n return this.schemas[tableName as T];\n }\n\n getTableList() {\n return Object.keys(this.tables);\n }\n\n protected unregisterViewport = (viewportId: string) => {\n for (const [tableName, subscriptions] of this.#subscriptionMap) {\n if (subscriptions[0].viewportId.toString() === viewportId) {\n this.#subscriptionMap.delete(tableName);\n } else {\n const links = subscriptions[0].dataSource.links;\n if (links) {\n for (let i = 0; i < links?.length; i++) {\n if (links[i].parentClientVpId === viewportId) {\n links.splice(i);\n }\n }\n }\n subscriptions[0].dataSource.links = links;\n }\n }\n };\n\n get name() {\n return this.#name;\n }\n\n getSubscriptionByViewport(viewportId: string) {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const subscription of subscriptions) {\n if (subscription.viewportId === viewportId) {\n return subscription;\n }\n }\n }\n throw Error(\n `[VuuModule] getSubscriptionByViewport, no subscription found for ${viewportId}`,\n );\n }\n\n getSubscribedDataSource(vpId: string): DataSource {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { viewportId, dataSource } of subscriptions) {\n if (viewportId === vpId) {\n return dataSource;\n }\n }\n }\n throw Error(`getSubscribedDataSource #${vpId} not in subscriptionMap`);\n }\n\n getLinks = (\n subscriptionMap: Map<string, Subscription[]>,\n vuuLinks: VuuLink[],\n ) => {\n const visualLinks: LinkDescriptorWithLabel[] = [];\n for (let i = 0; i < vuuLinks.length; i++) {\n const subscriptions = subscriptionMap.get(vuuLinks[i].toTable);\n if (subscriptions) {\n subscriptions.forEach(({ viewportId, dataSource: { status } }) => {\n if (status !== \"suspended\") {\n const newLink: LinkDescriptorWithLabel = {\n parentClientVpId: viewportId,\n parentVpId: viewportId,\n link: vuuLinks[i],\n };\n visualLinks.push(newLink);\n }\n });\n }\n }\n return visualLinks;\n };\n\n visualLinkService = (\n message: VuuCreateVisualLink | VuuRemoveVisualLink,\n ): Promise<DataSourceVisualLinkCreatedMessage | void> =>\n new Promise((resolve) => {\n if (message.type === \"CREATE_VISUAL_LINK\") {\n const { childColumnName, childVpId, parentColumnName, parentVpId } =\n message;\n const childDataSource = this.getSubscribedDataSource(childVpId);\n const parentDataSource = this.getSubscribedDataSource(parentVpId);\n const runtimeVisualLink = new RuntimeVisualLink(\n childDataSource,\n parentDataSource,\n childColumnName,\n parentColumnName,\n );\n\n this.#runtimeVisualLinks.set(childVpId, runtimeVisualLink);\n\n resolve({\n clientViewportId: childVpId,\n colName: childColumnName,\n parentColName: parentColumnName,\n parentViewportId: parentVpId,\n type: \"vuu-link-created\",\n } as DataSourceVisualLinkCreatedMessage);\n } else {\n const runtimeVisualLink = this.#runtimeVisualLinks.get(\n message.childVpId,\n );\n if (runtimeVisualLink) {\n runtimeVisualLink.remove();\n this.#runtimeVisualLinks.delete(message.childVpId);\n } else {\n throw Error(\n `visualLinkService no visual link found for viewport #${message.childVpId}`,\n );\n }\n resolve();\n }\n });\n\n createDataSource = (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => {\n const getVisualLinks = (tableName: string) => {\n const linksForTable = this.visualLinks?.[tableName as T] as VuuLink[];\n return linksForTable === undefined\n ? undefined\n : this.getLinks(this.#subscriptionMap, linksForTable);\n };\n\n const columnDescriptors = this.getColumnDescriptors(tableName);\n const table = this.tables[tableName];\n const sessionTable = this.#sessionTableMap[tableName];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const vuuModule = this as IVuuModule<any>;\n\n const dataSource: DataSource = new TickingArrayDataSource({\n ...config,\n columnDescriptors,\n getVisualLinks,\n keyColumn:\n this.schemas[tableName] === undefined\n ? this.#sessionTableMap[tableName].schema.key\n : this.schemas[tableName].key,\n table: table || sessionTable,\n menu: this.menus?.[tableName],\n rpcServices: this.getServices(tableName),\n rpcMenuServices: this.getMenuServices(tableName),\n sessionTables: this.#sessionTableMap,\n viewport,\n visualLinkService: this.visualLinkService,\n vuuModule,\n });\n\n dataSource.on(\"unsubscribed\", this.unregisterViewport);\n\n const existingSubscriptions = this.#subscriptionMap.get(tableName);\n const subscription = {\n viewportId: dataSource.viewport as string,\n dataSource,\n };\n if (existingSubscriptions) {\n existingSubscriptions.push(subscription);\n } else {\n this.#subscriptionMap.set(tableName, [subscription]);\n }\n\n return dataSource;\n };\n\n getServices(tableName: T) {\n const tableServices = this.services?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleServices.concat(tableServices);\n } else {\n return this.#moduleServices;\n }\n }\n\n getMenuServices(tableName: T) {\n const tableServices = this.menuServices?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleMenuServices.concat(tableServices);\n } else {\n return this.#moduleMenuServices;\n }\n }\n\n protected get sessionTableMap() {\n return this.#sessionTableMap;\n }\n\n protected getSessionTable(sessionTableName: string): SessionTable;\n protected getSessionTable(\n sessionTableName: string,\n throwIfNotFound: true,\n ): SessionTable;\n protected getSessionTable(\n sessionTableName: string,\n throwIfNotFound: false,\n ): SessionTable | undefined;\n protected getSessionTable(sessionTableName: string, throwIfNotFound = true) {\n const sessionTable = this.#sessionTableMap[sessionTableName];\n if (sessionTable) {\n return sessionTable;\n } else if (throwIfNotFound) {\n throw Error(\n `getSessionTable: no session table with name ${sessionTableName}`,\n );\n }\n }\n\n protected deleteRow: ServiceHandler = async (rpcRequest) => {\n if (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\n const { viewPortId } = rpcRequest.context;\n const { key } = rpcRequest.params;\n const sessionTable = this.getSessionTable(viewPortId, false);\n if (sessionTable) {\n sessionTable.delete(key as string);\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } else {\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n if (dataSource.table) {\n const table = this.tables[dataSource.table.table as T];\n if (table) {\n table.delete(key as string);\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n }\n }\n }\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"something went wrong\",\n };\n };\n\n private getColumnDescriptors(tableName: T) {\n const schema =\n this.schemas[tableName] || this.getSessionTable(tableName)?.schema;\n if (schema) {\n return schema.columns;\n } else {\n throw Error(\n ` no schema found for module ${this.#name} table ${tableName}`,\n );\n }\n }\n\n private editCell: ServiceHandler = async (rpcRequest) => {\n if (isEditCellRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { column, data, key } = rpcRequest.params;\n let targetTable: SessionTable | Table = this.#sessionTableMap[viewPortId];\n if (!targetTable) {\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n if (dataSource.table) {\n targetTable = this.tables[dataSource.table.table as T];\n }\n }\n if (targetTable) {\n try {\n assertUpdateIsValid(targetTable.schema, column as string, data);\n targetTable.update(key as string, column as string, data);\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } catch (e) {\n const { message } = e as Error;\n return {\n type: \"ERROR_RESULT\",\n errorMessage: message,\n };\n }\n } else {\n throw Error(\"[VuuModule] editCell unable to find table for dataSource\");\n }\n } else {\n throw Error(`[VuuModule] editCell invalid rpc type`);\n }\n };\n\n private beginEditSessionMenuHandler: MenuServiceHandler = async ({\n rpcName,\n type,\n vpId,\n }) => {\n if (type === \"VIEW_PORT_MENUS_SELECT_RPC\") {\n console.log(`rpcName ${rpcName}`);\n\n const result = await this.beginEditSession({\n context: {\n type: \"VIEWPORT_CONTEXT\",\n viewPortId: vpId,\n },\n params: {\n editSessionMode: \"selected-rows\",\n },\n rpcName,\n type: \"RPC_REQUEST\",\n });\n if (isRpcSuccess(result)) {\n const { table } = result.data as { table: VuuTable };\n return {\n type: \"VIEW_PORT_MENU_RESP\",\n rpcName,\n action: {\n renderComponent: \"grid\",\n type: \"OPEN_DIALOG_ACTION\",\n table,\n },\n vpId,\n };\n } else {\n return {\n error: result.errorMessage,\n rpcName,\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n };\n }\n } else {\n return {\n error: \"no can do\",\n rpcName,\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n };\n }\n };\n\n private beginEditSession: ServiceHandler = async (rpcRequest) => {\n if (isBeginEditSessionRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { editSessionMode = \"inline-all-rows\" } = rpcRequest.params;\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const { dataSource } = subscription;\n const { table: vuuTable } = dataSource;\n if (vuuTable) {\n const sourceTable = this.tables[vuuTable.table as T];\n if (sourceTable) {\n const sessionTableName = `session-${uuid()}`;\n try {\n const sessionTable = this.createSessionTable(\n sourceTable,\n sessionTableName,\n editSessionMode as EditSessionMode,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n dataSource as TickingArrayDataSource,\n );\n this.#sessionTableMap[sessionTableName] = sessionTable;\n subscription.sessionTableName = sessionTableName;\n\n return {\n data: {\n renderComponent: \"inline-form\",\n table: {\n module: vuuTable.module,\n table: sessionTableName,\n },\n },\n type: \"SUCCESS_RESULT\",\n };\n } catch (e) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: (e as Error).message,\n };\n }\n }\n }\n } else {\n throw Error(`[VuuModule] endEditSession invalid rpc type`);\n }\n\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"not implemented yet\",\n };\n };\n\n private addRow: ServiceHandler = async (rpcRequest) => {\n if (isAddRowRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const sessionTable = subscription.sessionTableName\n ? this.#sessionTableMap[subscription.sessionTableName]\n : undefined;\n if (!sessionTable) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `addRow: no active session table for viewport ${viewPortId}`,\n };\n }\n const { data } = rpcRequest.params;\n\n const columnMap = sessionTable.map;\n const columnCount = Object.keys(columnMap).length;\n const row: VuuDataRow = new Array(columnCount).fill(\"\");\n for (const [col, idx] of Object.entries(columnMap)) {\n if (data[col] !== undefined) {\n row[idx] = data[col];\n }\n }\n sessionTable.insert(row);\n return { type: \"SUCCESS_RESULT\", data: undefined };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"addRow: invalid rpc context\",\n };\n };\n\n private endEditSession: ServiceHandler = async (rpcRequest) => {\n if (isEndEditSessionRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n // the viewport Id is the session table name\n const sessionTable = this.#sessionTableMap[viewPortId];\n delete this.#sessionTableMap[viewPortId];\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n\n if (dataSource.table) {\n const sourceTable = this.tables[dataSource.table.table as T];\n\n if (rpcRequest.params.save === true) {\n let rejectedCount = 0;\n if (isProxySessionTable(sessionTable)) {\n const updates = sessionTable.getSessionUpdates();\n updates.forEach((rowUpdates, key) => {\n const { cellUpdates, lastUpdateTimestamp } = rowUpdates;\n const currentRow = sourceTable.findByKey(key);\n const lastUpdateTimestampOnTable =\n currentRow[sourceTable.map.vuuUpdatedTimestamp];\n if (lastUpdateTimestamp !== lastUpdateTimestampOnTable) {\n // We will reject updates for this row, update sessionn table row with message\n rejectedCount += 1;\n const sessionTableRow = sessionTable.findByKey(key);\n const newRow = sessionTableRow.slice();\n const messages: string[] = [];\n Object.entries(cellUpdates).forEach(([column, value]) => {\n messages.push(`${column}:${value}`);\n });\n newRow[sessionTable.map.vuuMsg] = messages.join(\",\");\n sessionTable.updateRow(newRow);\n } else {\n const newRow = currentRow.slice();\n Object.entries(cellUpdates).forEach(([column, value]) => {\n newRow[sourceTable.map[column]] = value;\n });\n sourceTable.updateRow(newRow);\n }\n });\n updates.clear();\n } else {\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n sourceTable.updateRow(newRow);\n }\n }\n\n if (rejectedCount > 0) {\n return {\n errorMessage: \"stale update\",\n type: \"ERROR_RESULT\",\n };\n } else {\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n }\n } else {\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n }\n } else {\n throw Error(\"[VuuModule], exitEditMode\");\n }\n } else {\n throw Error(`[VuuModule] endEditSession invalid rpc type`);\n }\n\n // return {\n // type: \"ERROR_RESULT\",\n // errorMessage: \"not implemented yet\",\n // };\n };\n\n // Bulk-edit with input in session table\n private applyBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\n const { viewPortId } = rpcRequest.context;\n const sessionTable = this.getSessionTable(viewPortId);\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n const { column, value } = rpcRequest.params as {\n column: NamedCurve;\n value: VuuRowDataItemType;\n };\n const keyIndex = sessionTable.map[sessionTable.schema.key];\n sessionTable.update(\n String(newRow[keyIndex]),\n column as string,\n value as VuuRowDataItemType,\n );\n }\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } else {\n throw Error(`[VuuModule] applyBulkEdits invalid rpc type`);\n }\n };\n\n protected createSessionTable(\n sourceTable: Table,\n sessionTableName: string,\n editSessionMode: EditSessionMode = \"inline-all-rows\",\n dataSource: TickingArrayDataSource,\n ) {\n if (editSessionMode.endsWith(\"all-rows\")) {\n return this.createSessionTableWithAllRows(sourceTable, sessionTableName);\n } else if (editSessionMode === \"selected-rows\") {\n return this.createSessionTableFromSelectedRows(\n sourceTable,\n sessionTableName,\n dataSource,\n );\n } else if (editSessionMode === \"empty-session-table\") {\n return this.createEmptySessionTable(sourceTable);\n } else {\n throw Error(\n `[VuuModule] createSessionTable, invalid editSessionMode ${editSessionMode}`,\n );\n }\n }\n\n protected createSessionTableWithAllRows(\n sourceTable: Table,\n sessionTableName: string,\n ) {\n return SessionTable(sourceTable, sessionTableName);\n }\n\n protected createEmptySessionTable({ schema }: Table) {\n // Note we use the original table schema for the session table, including table name.\n // This will later be used to retrieve source table\n return new Table(schema, [], buildDataColumnMapFromSchema(schema));\n }\n\n protected createSessionTableFromSelectedRows(\n { data, map, schema }: Table,\n sessionTableName: string,\n dataSource: TickingArrayDataSource,\n ) {\n const selectedRowIds = dataSource.getSelectedRowIds();\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 // Note we preserve the original table name on the schema for the session table,\n // this will later be used to retrieve source table\n const sessionSchema = sessionTableSchema(schema);\n\n return new Table(\n sessionSchema,\n sessionData,\n buildDataColumnMapFromSchema(sessionSchema),\n );\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: \"addRow\",\n service: this.addRow,\n },\n {\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n service: this.applyBulkEdits,\n },\n {\n rpcName: \"beginEditSession\",\n service: this.beginEditSession,\n },\n {\n rpcName: \"endEditSession\",\n service: this.endEditSession,\n },\n {\n rpcName: \"editCell\",\n service: this.editCell,\n },\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 #moduleMenuServices: RpcMenuService[] = [\n {\n rpcName: \"beginEditSession\",\n service: this.beginEditSessionMenuHandler,\n },\n ];\n}\n"],"names":["col","tableName"],"mappings":"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"}
1
+ {"version":3,"file":"VuuModule.js","sources":["../../../../../packages/vuu-data-test/src/core/module/VuuModule.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceConfig,\n DataSourceSubscribedMessage,\n DataSourceVisualLinkCreatedMessage,\n EditSessionMode,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuMenu,\n VuuRowDataItemType,\n VuuLink,\n LinkDescriptorWithLabel,\n VuuRpcMenuResponse,\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n VuuRpcServiceRequest,\n RpcResultSuccess,\n RpcResultError,\n VuuRpcMenuRequest,\n VuuTable,\n VuuDataRow,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n isAddRowRpcRequest,\n isBeginEditSessionRpcRequest,\n isEditCellRpcRequest,\n isEndEditSessionRpcRequest,\n isRpcSuccess,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport { Table, buildDataColumnMapFromSchema } from \"../../Table\";\nimport { isProxySessionTable, SessionTable } from \"../../SessionTable\";\nimport { TickingArrayDataSource } from \"../../TickingArrayDataSource\";\nimport { RuntimeVisualLink } from \"../../RuntimeVisualLink\";\nimport moduleContainer from \"./ModuleContainer\";\nimport { sessionTableSchema } from \"../../session-table-utils\";\n\nconst assertUpdateIsValid = (\n schema: TableSchema,\n column: string,\n data: VuuRowDataItemType,\n) => {\n const col = schema.columns.find((col) => col.name === column);\n if (col) {\n console.log(`data type ${col.serverDataType} data ${data}`);\n // switch (col.serverDataType){\n // }\n } else {\n throw Error(\n `schema for table ${schema.table.table} does not include column ${column}`,\n );\n }\n};\n\nexport interface IVuuModule<T extends string = string> {\n createDataSource: (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => DataSource;\n}\n\nexport type SessionTableMap = Record<string, SessionTable | Table>;\n\nexport type ServiceHandler = (\n rpcRequest: VuuRpcServiceRequest,\n) => Promise<RpcResultSuccess | RpcResultError>;\n\nexport type MenuServiceHandler = (\n rpcRequest: VuuRpcMenuRequest,\n) => Promise<VuuRpcMenuResponse>;\n\nexport type RpcService = {\n rpcName: string;\n service: ServiceHandler;\n};\n\nexport type RpcMenuService = {\n rpcName: string;\n service: MenuServiceHandler;\n};\n\ntype Subscription = {\n viewportId: string;\n dataSource: DataSource;\n sessionTableName?: string;\n};\nexport abstract class VuuModule<T extends string = string>\n implements IVuuModule<T>\n{\n #name: string;\n #runtimeVisualLinks = new Map<string, RuntimeVisualLink>();\n #sessionTableMap: SessionTableMap = {};\n #tableServices: Record<T, RpcService[] | undefined> | undefined;\n #subscriptionMap: Map<string, Subscription[]> = new Map();\n\n constructor(name: string) {\n this.#name = name;\n moduleContainer.register(this);\n }\n\n protected abstract menus?: Record<T, VuuMenu | undefined> | undefined;\n protected abstract schemas: Record<T, Readonly<TableSchema>>;\n protected abstract tables: Record<T, Table>;\n protected abstract menuServices?:\n | Record<T, RpcMenuService[] | undefined>\n | undefined;\n protected abstract services?: Record<T, RpcService[] | undefined> | undefined;\n protected abstract visualLinks?: Record<T, VuuLink[] | undefined>;\n\n getTableSchema(tableName: string) {\n return (\n this.schemas[tableName as T] ?? this.#sessionTableMap[tableName]?.schema\n );\n }\n\n getTableList() {\n return Object.keys(this.tables);\n }\n\n protected handlePostSubscribeActivities = ({\n clientViewportId,\n tableSchema,\n }: DataSourceSubscribedMessage) => {\n const visualLinks = this.getVisualLinks(tableSchema.table.table);\n const { dataSource } = this.getSubscriptionByViewport(clientViewportId);\n requestAnimationFrame(() => {\n dataSource.links = visualLinks;\n });\n\n // check whether newly subscribed viewport is associated with table that is a potential\n // visual link target. If so send links update message to any active subscription\n // associated with a table that is a potential link source\n if (this.visualLinks && dataSource.tableSchema) {\n const {\n table: { table: sourceTable },\n } = dataSource.tableSchema;\n for (const [table, links] of Object.entries<VuuLink[] | undefined>(\n this.visualLinks,\n )) {\n if (links) {\n const potentialTargets = links.filter(\n (l) => l.toTable === sourceTable,\n );\n if (potentialTargets.length) {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { dataSource } of subscriptions) {\n if (dataSource.tableSchema?.table.table === table) {\n dataSource.links = this.getVisualLinks(table);\n }\n }\n }\n }\n }\n }\n }\n };\n\n protected unregisterViewport = (viewportId: string) => {\n const { dataSource } = this.getSubscriptionByViewport(viewportId);\n const tableName = dataSource.tableSchema?.table.table;\n if (tableName) {\n const subscriptionsForTable = this.#subscriptionMap.get(tableName);\n if (subscriptionsForTable) {\n for (const { viewportId: vp } of subscriptionsForTable) {\n if (vp === viewportId) {\n if (subscriptionsForTable.length === 1) {\n this.#subscriptionMap.delete(tableName);\n } else {\n this.#subscriptionMap.set(\n tableName,\n subscriptionsForTable.filter(\n (s) => s.viewportId !== viewportId,\n ),\n );\n }\n }\n }\n }\n }\n\n for (const [tableName, subscriptions] of this.#subscriptionMap) {\n if (subscriptions[0].viewportId.toString() === viewportId) {\n this.#subscriptionMap.delete(tableName);\n }\n }\n\n // check whether newly unsubscribed viewport is associated with table that is a potential\n // visual link target. If so send links update message to any active subscription\n // associated with a table that is a potential link source\n if (this.visualLinks && dataSource.tableSchema) {\n const {\n table: { table: sourceTable },\n } = dataSource.tableSchema;\n for (const [table, links] of Object.entries<VuuLink[] | undefined>(\n this.visualLinks,\n )) {\n if (links) {\n const potentialTargets = links.filter(\n (l) => l.toTable === sourceTable,\n );\n if (potentialTargets.length) {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { dataSource } of subscriptions) {\n if (dataSource.tableSchema?.table.table === table) {\n dataSource.links = this.getVisualLinks(table);\n }\n }\n }\n }\n }\n }\n }\n };\n\n get name() {\n return this.#name;\n }\n\n getSubscriptionByViewport(viewportId: string) {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const subscription of subscriptions) {\n if (subscription.viewportId === viewportId) {\n return subscription;\n }\n }\n }\n throw Error(\n `[VuuModule] getSubscriptionByViewport, no subscription found for ${viewportId}`,\n );\n }\n\n getSubscribedDataSource(vpId: string): DataSource {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { viewportId, dataSource } of subscriptions) {\n if (viewportId === vpId) {\n return dataSource;\n }\n }\n }\n throw Error(`getSubscribedDataSource #${vpId} not in subscriptionMap`);\n }\n\n getLinks = (\n subscriptionMap: Map<string, Subscription[]>,\n vuuLinks: VuuLink[],\n ) => {\n const visualLinks: LinkDescriptorWithLabel[] = [];\n for (let i = 0; i < vuuLinks.length; i++) {\n const subscriptions = subscriptionMap.get(vuuLinks[i].toTable);\n if (subscriptions) {\n subscriptions.forEach(({ viewportId, dataSource: { status } }) => {\n if (status !== \"suspended\") {\n const newLink: LinkDescriptorWithLabel = {\n parentClientVpId: viewportId,\n parentVpId: viewportId,\n link: vuuLinks[i],\n };\n visualLinks.push(newLink);\n }\n });\n }\n }\n return visualLinks;\n };\n\n visualLinkService = (\n message: VuuCreateVisualLink | VuuRemoveVisualLink,\n ): Promise<DataSourceVisualLinkCreatedMessage | void> =>\n new Promise((resolve) => {\n if (message.type === \"CREATE_VISUAL_LINK\") {\n const { childColumnName, childVpId, parentColumnName, parentVpId } =\n message;\n const childDataSource = this.getSubscribedDataSource(childVpId);\n const parentDataSource = this.getSubscribedDataSource(parentVpId);\n const runtimeVisualLink = new RuntimeVisualLink(\n childDataSource,\n parentDataSource,\n childColumnName,\n parentColumnName,\n );\n\n this.#runtimeVisualLinks.set(childVpId, runtimeVisualLink);\n\n resolve({\n clientViewportId: childVpId,\n colName: childColumnName,\n parentColName: parentColumnName,\n parentViewportId: parentVpId,\n type: \"vuu-link-created\",\n } as DataSourceVisualLinkCreatedMessage);\n } else {\n const runtimeVisualLink = this.#runtimeVisualLinks.get(\n message.childVpId,\n );\n if (runtimeVisualLink) {\n runtimeVisualLink.remove();\n this.#runtimeVisualLinks.delete(message.childVpId);\n } else {\n throw Error(\n `visualLinkService no visual link found for viewport #${message.childVpId}`,\n );\n }\n resolve();\n }\n });\n\n getVisualLinks = (tableName: string) => {\n const linksForTable = this.visualLinks?.[tableName as T] as VuuLink[];\n return linksForTable === undefined\n ? undefined\n : this.getLinks(this.#subscriptionMap, linksForTable);\n };\n\n createDataSource = (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => {\n const columnDescriptors = this.getColumnDescriptors(tableName);\n const table = this.tables[tableName];\n const sessionTable = this.#sessionTableMap[tableName];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const vuuModule = this as IVuuModule<any>;\n\n const dataSource: DataSource = new TickingArrayDataSource({\n ...config,\n columnDescriptors,\n getVisualLinks: this.getVisualLinks,\n keyColumn:\n this.schemas[tableName] === undefined\n ? this.#sessionTableMap[tableName].schema.key\n : this.schemas[tableName].key,\n table: table || sessionTable,\n menu: this.menus?.[tableName],\n rpcServices: this.getServices(tableName),\n rpcMenuServices: this.getMenuServices(tableName),\n sessionTables: this.#sessionTableMap,\n viewport,\n visualLinkService: this.visualLinkService,\n vuuModule,\n });\n\n dataSource.on(\"subscribed\", this.handlePostSubscribeActivities);\n dataSource.on(\"unsubscribed\", this.unregisterViewport);\n\n const existingSubscriptions = this.#subscriptionMap.get(tableName);\n const subscription = {\n viewportId: dataSource.viewport as string,\n dataSource,\n };\n if (existingSubscriptions) {\n existingSubscriptions.push(subscription);\n } else {\n this.#subscriptionMap.set(tableName, [subscription]);\n }\n\n return dataSource;\n };\n\n getServices(tableName: T) {\n const tableServices = this.services?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleServices.concat(tableServices);\n } else {\n return this.#moduleServices;\n }\n }\n\n getMenuServices(tableName: T) {\n const tableServices = this.menuServices?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleMenuServices.concat(tableServices);\n } else {\n return this.#moduleMenuServices;\n }\n }\n\n protected get sessionTableMap() {\n return this.#sessionTableMap;\n }\n\n protected getSessionTable(sessionTableName: string): SessionTable;\n protected getSessionTable(\n sessionTableName: string,\n throwIfNotFound: true,\n ): SessionTable;\n protected getSessionTable(\n sessionTableName: string,\n throwIfNotFound: false,\n ): SessionTable | undefined;\n protected getSessionTable(sessionTableName: string, throwIfNotFound = true) {\n const sessionTable = this.#sessionTableMap[sessionTableName];\n if (sessionTable) {\n return sessionTable;\n } else if (throwIfNotFound) {\n throw Error(\n `getSessionTable: no session table with name ${sessionTableName}`,\n );\n }\n }\n\n protected deleteRow: ServiceHandler = async (rpcRequest) => {\n if (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\n const { viewPortId } = rpcRequest.context;\n const { key } = rpcRequest.params;\n const sessionTable = this.getSessionTable(viewPortId, false);\n if (sessionTable) {\n sessionTable.delete(key as string);\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } else {\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n if (dataSource.table) {\n const table = this.tables[dataSource.table.table as T];\n if (table) {\n table.delete(key as string);\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n }\n }\n }\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"something went wrong\",\n };\n };\n\n private getColumnDescriptors(tableName: T) {\n const schema =\n this.schemas[tableName] || this.getSessionTable(tableName)?.schema;\n if (schema) {\n return schema.columns;\n } else {\n throw Error(\n ` no schema found for module ${this.#name} table ${tableName}`,\n );\n }\n }\n\n private editCell: ServiceHandler = async (rpcRequest) => {\n if (isEditCellRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { column, data, key } = rpcRequest.params;\n let targetTable: SessionTable | Table = this.#sessionTableMap[viewPortId];\n if (!targetTable) {\n const { dataSource } = this.getSubscriptionByViewport(viewPortId);\n if (dataSource.table) {\n targetTable = this.tables[dataSource.table.table as T];\n }\n }\n if (targetTable) {\n try {\n assertUpdateIsValid(targetTable.schema, column as string, data);\n targetTable.update(key as string, column as string, data);\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } catch (e) {\n const { message } = e as Error;\n return {\n type: \"ERROR_RESULT\",\n errorMessage: message,\n };\n }\n } else {\n throw Error(\"[VuuModule] editCell unable to find table for dataSource\");\n }\n } else {\n throw Error(`[VuuModule] editCell invalid rpc type`);\n }\n };\n\n private beginEditSessionMenuHandler: MenuServiceHandler = async ({\n rpcName,\n type,\n vpId,\n }) => {\n if (type === \"VIEW_PORT_MENUS_SELECT_RPC\") {\n console.log(`rpcName ${rpcName}`);\n\n const result = await this.beginEditSession({\n context: {\n type: \"VIEWPORT_CONTEXT\",\n viewPortId: vpId,\n },\n params: {\n editSessionMode: \"selected-rows\",\n },\n rpcName,\n type: \"RPC_REQUEST\",\n });\n if (isRpcSuccess(result)) {\n const { table } = result.data as { table: VuuTable };\n return {\n type: \"VIEW_PORT_MENU_RESP\",\n rpcName,\n action: {\n renderComponent: \"grid\",\n type: \"OPEN_DIALOG_ACTION\",\n table,\n },\n vpId,\n };\n } else {\n return {\n error: result.errorMessage,\n rpcName,\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n };\n }\n } else {\n return {\n error: \"no can do\",\n rpcName,\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n };\n }\n };\n\n private beginEditSession: ServiceHandler = async (rpcRequest) => {\n if (isBeginEditSessionRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const { editSessionMode = \"inline-all-rows\" } = rpcRequest.params;\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const { dataSource } = subscription;\n const { table: vuuTable } = dataSource;\n if (vuuTable) {\n const sourceTable = this.tables[vuuTable.table as T];\n if (sourceTable) {\n const sessionTableName = `session-${uuid()}`;\n try {\n const sessionTable = this.createSessionTable(\n sourceTable,\n sessionTableName,\n editSessionMode as EditSessionMode,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n dataSource as TickingArrayDataSource,\n );\n this.#sessionTableMap[sessionTableName] = sessionTable;\n subscription.sessionTableName = sessionTableName;\n\n return {\n data: {\n renderComponent: \"inline-form\",\n table: {\n module: vuuTable.module,\n table: sessionTableName,\n },\n },\n type: \"SUCCESS_RESULT\",\n };\n } catch (e) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: (e as Error).message,\n };\n }\n }\n }\n } else {\n throw Error(`[VuuModule] endEditSession invalid rpc type`);\n }\n\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"not implemented yet\",\n };\n };\n\n private addRow: ServiceHandler = async (rpcRequest) => {\n if (isAddRowRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const sessionTable = subscription.sessionTableName\n ? this.#sessionTableMap[subscription.sessionTableName]\n : undefined;\n if (!sessionTable) {\n return {\n type: \"ERROR_RESULT\",\n errorMessage: `addRow: no active session table for viewport ${viewPortId}`,\n };\n }\n const { data } = rpcRequest.params;\n\n const columnMap = sessionTable.map;\n const columnCount = Object.keys(columnMap).length;\n const row: VuuDataRow = new Array(columnCount).fill(\"\");\n for (const [col, idx] of Object.entries(columnMap)) {\n if (data[col] !== undefined) {\n row[idx] = data[col];\n }\n }\n sessionTable.insert(row);\n return { type: \"SUCCESS_RESULT\", data: undefined };\n }\n return {\n type: \"ERROR_RESULT\",\n errorMessage: \"addRow: invalid rpc context\",\n };\n };\n\n private endEditSession: ServiceHandler = async (rpcRequest) => {\n if (isEndEditSessionRpcRequest(rpcRequest)) {\n const { viewPortId } = rpcRequest.context;\n // the viewport Id is the session table name\n const subscription = this.getSubscriptionByViewport(viewPortId);\n const sessionTableName = subscription.sessionTableName ?? viewPortId;\n const sessionTable = this.#sessionTableMap[sessionTableName];\n const { dataSource } = subscription;\n\n if (dataSource.table) {\n const sourceTable = this.tables[dataSource.table.table as T];\n\n if (rpcRequest.params.save === true) {\n let rejectedCount = 0;\n if (isProxySessionTable(sessionTable)) {\n const updates = sessionTable.getSessionUpdates();\n updates.forEach((rowUpdates, key) => {\n const { cellUpdates, lastUpdateTimestamp } = rowUpdates;\n const currentRow = sourceTable.findByKey(key);\n const lastUpdateTimestampOnTable =\n currentRow[sourceTable.map.vuuUpdatedTimestamp];\n if (lastUpdateTimestamp !== lastUpdateTimestampOnTable) {\n // We will reject updates for this row, update sessionn table row with message\n rejectedCount += 1;\n const sessionTableRow = sessionTable.findByKey(key);\n const newRow = sessionTableRow.slice();\n const messages: string[] = [];\n Object.entries(cellUpdates).forEach(([column, value]) => {\n messages.push(`${column}:${value}`);\n });\n newRow[sessionTable.map.vuuMsg] = messages.join(\",\");\n sessionTable.updateRow(newRow);\n } else {\n const newRow = currentRow.slice();\n Object.entries(cellUpdates).forEach(([column, value]) => {\n newRow[sourceTable.map[column]] = value;\n });\n sourceTable.updateRow(newRow);\n }\n });\n updates.clear();\n } else {\n // empty-session-table / csv-upload: insert only rows with no errors.\n // vuuMsg is empty string for valid rows and non-empty for error rows.\n const vuuMsgIdx = sessionTable.map[\"vuuMsg\"];\n const sourceColumns = sourceTable.schema.columns;\n for (let i = 0; i < sessionTable.data.length; i++) {\n const sessionRow = sessionTable.data[i];\n if (sessionRow[vuuMsgIdx]) continue;\n const sourceRow: VuuRowDataItemType[] = sourceColumns.map(\n (col) => sessionRow[sessionTable.map[col.name]],\n );\n sourceTable.insert(sourceRow);\n }\n }\n\n if (rejectedCount > 0) {\n return {\n errorMessage: \"stale update\",\n type: \"ERROR_RESULT\",\n };\n } else {\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n }\n } else {\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n }\n } else {\n throw Error(\"[VuuModule], exitEditMode\");\n }\n } else {\n throw Error(`[VuuModule] endEditSession invalid rpc type`);\n }\n\n // return {\n // type: \"ERROR_RESULT\",\n // errorMessage: \"not implemented yet\",\n // };\n };\n\n // Bulk-edit with input in session table\n private applyBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\n const { viewPortId } = rpcRequest.context;\n const sessionTable = this.getSessionTable(viewPortId);\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n const { column, value } = rpcRequest.params as {\n column: NamedCurve;\n value: VuuRowDataItemType;\n };\n const keyIndex = sessionTable.map[sessionTable.schema.key];\n sessionTable.update(\n String(newRow[keyIndex]),\n column as string,\n value as VuuRowDataItemType,\n );\n }\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\n };\n } else {\n throw Error(`[VuuModule] applyBulkEdits invalid rpc type`);\n }\n };\n\n protected createSessionTable(\n sourceTable: Table,\n sessionTableName: string,\n editSessionMode: EditSessionMode = \"inline-all-rows\",\n dataSource: TickingArrayDataSource,\n ) {\n if (editSessionMode.endsWith(\"all-rows\")) {\n return this.createSessionTableWithAllRows(sourceTable, sessionTableName);\n } else if (editSessionMode === \"selected-rows\") {\n return this.createSessionTableFromSelectedRows(\n sourceTable,\n sessionTableName,\n dataSource,\n );\n } else if (editSessionMode === \"empty-session-table\") {\n return this.createEmptySessionTable(sourceTable, sessionTableName);\n } else {\n throw Error(\n `[VuuModule] createSessionTable, invalid editSessionMode ${editSessionMode}`,\n );\n }\n }\n\n protected createSessionTableWithAllRows(\n sourceTable: Table,\n sessionTableName: string,\n ) {\n return SessionTable(sourceTable, sessionTableName);\n }\n\n protected createEmptySessionTable(\n { schema }: Table,\n sessionTableName: string,\n ) {\n // Override schema.table.table so isSessionTable() returns true for this session.\n // sessionTableSchema adds the vuuMsg column, consistent with all other session tables.\n const sessionSchema = sessionTableSchema({\n ...schema,\n table: { ...schema.table, table: sessionTableName },\n });\n return new Table(sessionSchema, [], buildDataColumnMapFromSchema(sessionSchema));\n }\n\n protected createSessionTableFromSelectedRows(\n { data, map, schema }: Table,\n sessionTableName: string,\n dataSource: TickingArrayDataSource,\n ) {\n const selectedRowIds = dataSource.getSelectedRowIds();\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 // Note we preserve the original table name on the schema for the session table,\n // this will later be used to retrieve source table\n const sessionSchema = sessionTableSchema(schema);\n\n return new Table(\n sessionSchema,\n sessionData,\n buildDataColumnMapFromSchema(sessionSchema),\n );\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: \"addRow\",\n service: this.addRow,\n },\n {\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n service: this.applyBulkEdits,\n },\n {\n rpcName: \"beginEditSession\",\n service: this.beginEditSession,\n },\n {\n rpcName: \"endEditSession\",\n service: this.endEditSession,\n },\n {\n rpcName: \"editCell\",\n service: this.editCell,\n },\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 #moduleMenuServices: RpcMenuService[] = [\n {\n rpcName: \"beginEditSession\",\n service: this.beginEditSessionMenuHandler,\n },\n ];\n}\n"],"names":["col","dataSource","tableName"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,IAAA,KAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,mBAAA;AAsCA,MAAM,mBAAsB,GAAA,CAC1B,MACA,EAAA,MAAA,EACA,IACG,KAAA;AACH,EAAM,MAAA,GAAA,GAAM,OAAO,OAAQ,CAAA,IAAA,CAAK,CAACA,IAAQA,KAAAA,IAAAA,CAAI,SAAS,MAAM,CAAA;AAC5D,EAAA,IAAI,GAAK,EAAA;AACP,IAAA,OAAA,CAAQ,IAAI,CAAa,UAAA,EAAA,GAAA,CAAI,cAAc,CAAA,MAAA,EAAS,IAAI,CAAE,CAAA,CAAA;AAAA,GAGrD,MAAA;AACL,IAAM,MAAA,KAAA;AAAA,MACJ,CAAoB,iBAAA,EAAA,MAAA,CAAO,KAAM,CAAA,KAAK,4BAA4B,MAAM,CAAA;AAAA,KAC1E;AAAA;AAEJ,CAAA;AAmCO,MAAe,SAEtB,CAAA;AAAA,EAOE,YAAY,IAAc,EAAA;AAN1B,IAAA,YAAA,CAAA,IAAA,EAAA,KAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,mBAAA,sBAA0B,GAA+B,EAAA,CAAA;AACzD,IAAA,YAAA,CAAA,IAAA,EAAA,gBAAA,EAAoC,EAAC,CAAA;AACrC,IAAA,YAAA,CAAA,IAAA,EAAA,cAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,gBAAA,sBAAoD,GAAI,EAAA,CAAA;AA0BxD,IAAA,aAAA,CAAA,IAAA,EAAU,iCAAgC,CAAC;AAAA,MACzC,gBAAA;AAAA,MACA;AAAA,KACiC,KAAA;AACjC,MAAA,MAAM,WAAc,GAAA,IAAA,CAAK,cAAe,CAAA,WAAA,CAAY,MAAM,KAAK,CAAA;AAC/D,MAAA,MAAM,EAAE,UAAA,EAAe,GAAA,IAAA,CAAK,0BAA0B,gBAAgB,CAAA;AACtE,MAAA,qBAAA,CAAsB,MAAM;AAC1B,QAAA,UAAA,CAAW,KAAQ,GAAA,WAAA;AAAA,OACpB,CAAA;AAKD,MAAI,IAAA,IAAA,CAAK,WAAe,IAAA,UAAA,CAAW,WAAa,EAAA;AAC9C,QAAM,MAAA;AAAA,UACJ,KAAA,EAAO,EAAE,KAAA,EAAO,WAAY;AAAA,YAC1B,UAAW,CAAA,WAAA;AACf,QAAA,KAAA,MAAW,CAAC,KAAA,EAAO,KAAK,CAAA,IAAK,MAAO,CAAA,OAAA;AAAA,UAClC,IAAK,CAAA;AAAA,SACJ,EAAA;AACD,UAAA,IAAI,KAAO,EAAA;AACT,YAAA,MAAM,mBAAmB,KAAM,CAAA,MAAA;AAAA,cAC7B,CAAC,CAAM,KAAA,CAAA,CAAE,OAAY,KAAA;AAAA,aACvB;AACA,YAAA,IAAI,iBAAiB,MAAQ,EAAA;AAC3B,cAAA,KAAA,MAAW,aAAiB,IAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,MAAA,EAAU,EAAA;AAC1D,gBAAA,KAAA,MAAW,EAAE,UAAA,EAAAC,WAAW,EAAA,IAAK,aAAe,EAAA;AAC1C,kBAAA,IAAIA,WAAW,CAAA,WAAA,EAAa,KAAM,CAAA,KAAA,KAAU,KAAO,EAAA;AACjD,oBAAAA,WAAW,CAAA,KAAA,GAAQ,IAAK,CAAA,cAAA,CAAe,KAAK,CAAA;AAAA;AAC9C;AACF;AACF;AACF;AACF;AACF;AACF,KACF,CAAA;AAEA,IAAU,aAAA,CAAA,IAAA,EAAA,oBAAA,EAAqB,CAAC,UAAuB,KAAA;AACrD,MAAA,MAAM,EAAE,UAAA,EAAe,GAAA,IAAA,CAAK,0BAA0B,UAAU,CAAA;AAChE,MAAM,MAAA,SAAA,GAAY,UAAW,CAAA,WAAA,EAAa,KAAM,CAAA,KAAA;AAChD,MAAA,IAAI,SAAW,EAAA;AACb,QAAA,MAAM,qBAAwB,GAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,GAAA,CAAI,SAAS,CAAA;AACjE,QAAA,IAAI,qBAAuB,EAAA;AACzB,UAAA,KAAA,MAAW,EAAE,UAAA,EAAY,EAAG,EAAA,IAAK,qBAAuB,EAAA;AACtD,YAAA,IAAI,OAAO,UAAY,EAAA;AACrB,cAAI,IAAA,qBAAA,CAAsB,WAAW,CAAG,EAAA;AACtC,gBAAK,YAAA,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,OAAO,SAAS,CAAA;AAAA,eACjC,MAAA;AACL,gBAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,GAAA;AAAA,kBACpB,SAAA;AAAA,kBACA,qBAAsB,CAAA,MAAA;AAAA,oBACpB,CAAC,CAAM,KAAA,CAAA,CAAE,UAAe,KAAA;AAAA;AAC1B,iBACF;AAAA;AACF;AACF;AACF;AACF;AAGF,MAAA,KAAA,MAAW,CAACC,UAAAA,EAAW,aAAa,CAAA,IAAK,mBAAK,gBAAkB,CAAA,EAAA;AAC9D,QAAA,IAAI,cAAc,CAAC,CAAA,CAAE,UAAW,CAAA,QAAA,OAAe,UAAY,EAAA;AACzD,UAAK,YAAA,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,OAAOA,UAAS,CAAA;AAAA;AACxC;AAMF,MAAI,IAAA,IAAA,CAAK,WAAe,IAAA,UAAA,CAAW,WAAa,EAAA;AAC9C,QAAM,MAAA;AAAA,UACJ,KAAA,EAAO,EAAE,KAAA,EAAO,WAAY;AAAA,YAC1B,UAAW,CAAA,WAAA;AACf,QAAA,KAAA,MAAW,CAAC,KAAA,EAAO,KAAK,CAAA,IAAK,MAAO,CAAA,OAAA;AAAA,UAClC,IAAK,CAAA;AAAA,SACJ,EAAA;AACD,UAAA,IAAI,KAAO,EAAA;AACT,YAAA,MAAM,mBAAmB,KAAM,CAAA,MAAA;AAAA,cAC7B,CAAC,CAAM,KAAA,CAAA,CAAE,OAAY,KAAA;AAAA,aACvB;AACA,YAAA,IAAI,iBAAiB,MAAQ,EAAA;AAC3B,cAAA,KAAA,MAAW,aAAiB,IAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,MAAA,EAAU,EAAA;AAC1D,gBAAA,KAAA,MAAW,EAAE,UAAA,EAAAD,WAAW,EAAA,IAAK,aAAe,EAAA;AAC1C,kBAAA,IAAIA,WAAW,CAAA,WAAA,EAAa,KAAM,CAAA,KAAA,KAAU,KAAO,EAAA;AACjD,oBAAAA,WAAW,CAAA,KAAA,GAAQ,IAAK,CAAA,cAAA,CAAe,KAAK,CAAA;AAAA;AAC9C;AACF;AACF;AACF;AACF;AACF;AACF,KACF,CAAA;AA8BA,IAAW,aAAA,CAAA,IAAA,EAAA,UAAA,EAAA,CACT,iBACA,QACG,KAAA;AACH,MAAA,MAAM,cAAyC,EAAC;AAChD,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,QAAA,CAAS,QAAQ,CAAK,EAAA,EAAA;AACxC,QAAA,MAAM,gBAAgB,eAAgB,CAAA,GAAA,CAAI,QAAS,CAAA,CAAC,EAAE,OAAO,CAAA;AAC7D,QAAA,IAAI,aAAe,EAAA;AACjB,UAAc,aAAA,CAAA,OAAA,CAAQ,CAAC,EAAE,UAAA,EAAY,YAAY,EAAE,MAAA,IAAe,KAAA;AAChE,YAAA,IAAI,WAAW,WAAa,EAAA;AAC1B,cAAA,MAAM,OAAmC,GAAA;AAAA,gBACvC,gBAAkB,EAAA,UAAA;AAAA,gBAClB,UAAY,EAAA,UAAA;AAAA,gBACZ,IAAA,EAAM,SAAS,CAAC;AAAA,eAClB;AACA,cAAA,WAAA,CAAY,KAAK,OAAO,CAAA;AAAA;AAC1B,WACD,CAAA;AAAA;AACH;AAEF,MAAO,OAAA,WAAA;AAAA,KACT,CAAA;AAEA,IAAA,aAAA,CAAA,IAAA,EAAA,mBAAA,EAAoB,CAClB,OAAA,KAEA,IAAI,OAAA,CAAQ,CAAC,OAAY,KAAA;AACvB,MAAI,IAAA,OAAA,CAAQ,SAAS,oBAAsB,EAAA;AACzC,QAAA,MAAM,EAAE,eAAA,EAAiB,SAAW,EAAA,gBAAA,EAAkB,YACpD,GAAA,OAAA;AACF,QAAM,MAAA,eAAA,GAAkB,IAAK,CAAA,uBAAA,CAAwB,SAAS,CAAA;AAC9D,QAAM,MAAA,gBAAA,GAAmB,IAAK,CAAA,uBAAA,CAAwB,UAAU,CAAA;AAChE,QAAA,MAAM,oBAAoB,IAAI,iBAAA;AAAA,UAC5B,eAAA;AAAA,UACA,gBAAA;AAAA,UACA,eAAA;AAAA,UACA;AAAA,SACF;AAEA,QAAK,YAAA,CAAA,IAAA,EAAA,mBAAA,CAAA,CAAoB,GAAI,CAAA,SAAA,EAAW,iBAAiB,CAAA;AAEzD,QAAQ,OAAA,CAAA;AAAA,UACN,gBAAkB,EAAA,SAAA;AAAA,UAClB,OAAS,EAAA,eAAA;AAAA,UACT,aAAe,EAAA,gBAAA;AAAA,UACf,gBAAkB,EAAA,UAAA;AAAA,UAClB,IAAM,EAAA;AAAA,SAC+B,CAAA;AAAA,OAClC,MAAA;AACL,QAAM,MAAA,iBAAA,GAAoB,mBAAK,mBAAoB,CAAA,CAAA,GAAA;AAAA,UACjD,OAAQ,CAAA;AAAA,SACV;AACA,QAAA,IAAI,iBAAmB,EAAA;AACrB,UAAA,iBAAA,CAAkB,MAAO,EAAA;AACzB,UAAK,YAAA,CAAA,IAAA,EAAA,mBAAA,CAAA,CAAoB,MAAO,CAAA,OAAA,CAAQ,SAAS,CAAA;AAAA,SAC5C,MAAA;AACL,UAAM,MAAA,KAAA;AAAA,YACJ,CAAA,qDAAA,EAAwD,QAAQ,SAAS,CAAA;AAAA,WAC3E;AAAA;AAEF,QAAQ,OAAA,EAAA;AAAA;AACV,KACD,CAAA,CAAA;AAEH,IAAA,aAAA,CAAA,IAAA,EAAA,gBAAA,EAAiB,CAAC,SAAsB,KAAA;AACtC,MAAM,MAAA,aAAA,GAAgB,IAAK,CAAA,WAAA,GAAc,SAAc,CAAA;AACvD,MAAA,OAAO,kBAAkB,KACrB,CAAA,GAAA,KAAA,CAAA,GACA,KAAK,QAAS,CAAA,YAAA,CAAA,IAAA,EAAK,mBAAkB,aAAa,CAAA;AAAA,KACxD,CAAA;AAEA,IAAmB,aAAA,CAAA,IAAA,EAAA,kBAAA,EAAA,CACjB,SACA,EAAA,QAAA,EACA,MACG,KAAA;AACH,MAAM,MAAA,iBAAA,GAAoB,IAAK,CAAA,oBAAA,CAAqB,SAAS,CAAA;AAC7D,MAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,MAAA,CAAO,SAAS,CAAA;AACnC,MAAM,MAAA,YAAA,GAAe,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,SAAS,CAAA;AAGpD,MAAA,MAAM,SAAY,GAAA,IAAA;AAElB,MAAM,MAAA,UAAA,GAAyB,IAAI,sBAAuB,CAAA;AAAA,QACxD,GAAG,MAAA;AAAA,QACH,iBAAA;AAAA,QACA,gBAAgB,IAAK,CAAA,cAAA;AAAA,QACrB,SACE,EAAA,IAAA,CAAK,OAAQ,CAAA,SAAS,MAAM,KACxB,CAAA,GAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,SAAS,EAAE,MAAO,CAAA,GAAA,GACxC,IAAK,CAAA,OAAA,CAAQ,SAAS,CAAE,CAAA,GAAA;AAAA,QAC9B,OAAO,KAAS,IAAA,YAAA;AAAA,QAChB,IAAA,EAAM,IAAK,CAAA,KAAA,GAAQ,SAAS,CAAA;AAAA,QAC5B,WAAA,EAAa,IAAK,CAAA,WAAA,CAAY,SAAS,CAAA;AAAA,QACvC,eAAA,EAAiB,IAAK,CAAA,eAAA,CAAgB,SAAS,CAAA;AAAA,QAC/C,eAAe,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA;AAAA,QACpB,QAAA;AAAA,QACA,mBAAmB,IAAK,CAAA,iBAAA;AAAA,QACxB;AAAA,OACD,CAAA;AAED,MAAW,UAAA,CAAA,EAAA,CAAG,YAAc,EAAA,IAAA,CAAK,6BAA6B,CAAA;AAC9D,MAAW,UAAA,CAAA,EAAA,CAAG,cAAgB,EAAA,IAAA,CAAK,kBAAkB,CAAA;AAErD,MAAA,MAAM,qBAAwB,GAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,GAAA,CAAI,SAAS,CAAA;AACjE,MAAA,MAAM,YAAe,GAAA;AAAA,QACnB,YAAY,UAAW,CAAA,QAAA;AAAA,QACvB;AAAA,OACF;AACA,MAAA,IAAI,qBAAuB,EAAA;AACzB,QAAA,qBAAA,CAAsB,KAAK,YAAY,CAAA;AAAA,OAClC,MAAA;AACL,QAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,GAAA,CAAI,SAAW,EAAA,CAAC,YAAY,CAAC,CAAA;AAAA;AAGrD,MAAO,OAAA,UAAA;AAAA,KACT,CAAA;AA4CA,IAAU,aAAA,CAAA,IAAA,EAAA,WAAA,EAA4B,OAAO,UAAe,KAAA;AAC1D,MAAI,IAAA,UAAA,CAAW,OAAQ,CAAA,IAAA,KAAS,kBAAoB,EAAA;AAClD,QAAM,MAAA,EAAE,UAAW,EAAA,GAAI,UAAW,CAAA,OAAA;AAClC,QAAM,MAAA,EAAE,GAAI,EAAA,GAAI,UAAW,CAAA,MAAA;AAC3B,QAAA,MAAM,YAAe,GAAA,IAAA,CAAK,eAAgB,CAAA,UAAA,EAAY,KAAK,CAAA;AAC3D,QAAA,IAAI,YAAc,EAAA;AAChB,UAAA,YAAA,CAAa,OAAO,GAAa,CAAA;AACjC,UAAO,OAAA;AAAA,YACL,IAAM,EAAA,gBAAA;AAAA,YACN,IAAM,EAAA,KAAA;AAAA,WACR;AAAA,SACK,MAAA;AACL,UAAA,MAAM,EAAE,UAAA,EAAe,GAAA,IAAA,CAAK,0BAA0B,UAAU,CAAA;AAChE,UAAA,IAAI,WAAW,KAAO,EAAA;AACpB,YAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,MAAO,CAAA,UAAA,CAAW,MAAM,KAAU,CAAA;AACrD,YAAA,IAAI,KAAO,EAAA;AACT,cAAA,KAAA,CAAM,OAAO,GAAa,CAAA;AAC1B,cAAO,OAAA;AAAA,gBACL,IAAM,EAAA,gBAAA;AAAA,gBACN,IAAM,EAAA,KAAA;AAAA,eACR;AAAA;AACF;AACF;AACF;AAEF,MAAO,OAAA;AAAA,QACL,IAAM,EAAA,cAAA;AAAA,QACN,YAAc,EAAA;AAAA,OAChB;AAAA,KACF,CAAA;AAcA,IAAQ,aAAA,CAAA,IAAA,EAAA,UAAA,EAA2B,OAAO,UAAe,KAAA;AACvD,MAAI,IAAA,oBAAA,CAAqB,UAAU,CAAG,EAAA;AACpC,QAAM,MAAA,EAAE,UAAW,EAAA,GAAI,UAAW,CAAA,OAAA;AAClC,QAAA,MAAM,EAAE,MAAA,EAAQ,IAAM,EAAA,GAAA,KAAQ,UAAW,CAAA,MAAA;AACzC,QAAI,IAAA,WAAA,GAAoC,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,UAAU,CAAA;AACxE,QAAA,IAAI,CAAC,WAAa,EAAA;AAChB,UAAA,MAAM,EAAE,UAAA,EAAe,GAAA,IAAA,CAAK,0BAA0B,UAAU,CAAA;AAChE,UAAA,IAAI,WAAW,KAAO,EAAA;AACpB,YAAA,WAAA,GAAc,IAAK,CAAA,MAAA,CAAO,UAAW,CAAA,KAAA,CAAM,KAAU,CAAA;AAAA;AACvD;AAEF,QAAA,IAAI,WAAa,EAAA;AACf,UAAI,IAAA;AACF,YAAoB,mBAAA,CAAA,WAAA,CAAY,MAAQ,EAAA,MAAA,EAAkB,IAAI,CAAA;AAC9D,YAAY,WAAA,CAAA,MAAA,CAAO,GAAe,EAAA,MAAA,EAAkB,IAAI,CAAA;AACxD,YAAO,OAAA;AAAA,cACL,IAAM,EAAA,gBAAA;AAAA,cACN,IAAM,EAAA,KAAA;AAAA,aACR;AAAA,mBACO,CAAG,EAAA;AACV,YAAM,MAAA,EAAE,SAAY,GAAA,CAAA;AACpB,YAAO,OAAA;AAAA,cACL,IAAM,EAAA,cAAA;AAAA,cACN,YAAc,EAAA;AAAA,aAChB;AAAA;AACF,SACK,MAAA;AACL,UAAA,MAAM,MAAM,0DAA0D,CAAA;AAAA;AACxE,OACK,MAAA;AACL,QAAA,MAAM,MAAM,CAAuC,qCAAA,CAAA,CAAA;AAAA;AACrD,KACF,CAAA;AAEA,IAAA,aAAA,CAAA,IAAA,EAAQ,+BAAkD,OAAO;AAAA,MAC/D,OAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACI,KAAA;AACJ,MAAA,IAAI,SAAS,4BAA8B,EAAA;AACzC,QAAQ,OAAA,CAAA,GAAA,CAAI,CAAW,QAAA,EAAA,OAAO,CAAE,CAAA,CAAA;AAEhC,QAAM,MAAA,MAAA,GAAS,MAAM,IAAA,CAAK,gBAAiB,CAAA;AAAA,UACzC,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,kBAAA;AAAA,YACN,UAAY,EAAA;AAAA,WACd;AAAA,UACA,MAAQ,EAAA;AAAA,YACN,eAAiB,EAAA;AAAA,WACnB;AAAA,UACA,OAAA;AAAA,UACA,IAAM,EAAA;AAAA,SACP,CAAA;AACD,QAAI,IAAA,YAAA,CAAa,MAAM,CAAG,EAAA;AACxB,UAAM,MAAA,EAAE,KAAM,EAAA,GAAI,MAAO,CAAA,IAAA;AACzB,UAAO,OAAA;AAAA,YACL,IAAM,EAAA,qBAAA;AAAA,YACN,OAAA;AAAA,YACA,MAAQ,EAAA;AAAA,cACN,eAAiB,EAAA,MAAA;AAAA,cACjB,IAAM,EAAA,oBAAA;AAAA,cACN;AAAA,aACF;AAAA,YACA;AAAA,WACF;AAAA,SACK,MAAA;AACL,UAAO,OAAA;AAAA,YACL,OAAO,MAAO,CAAA,YAAA;AAAA,YACd,OAAA;AAAA,YACA,IAAM,EAAA,oBAAA;AAAA,YACN;AAAA,WACF;AAAA;AACF,OACK,MAAA;AACL,QAAO,OAAA;AAAA,UACL,KAAO,EAAA,WAAA;AAAA,UACP,OAAA;AAAA,UACA,IAAM,EAAA,oBAAA;AAAA,UACN;AAAA,SACF;AAAA;AACF,KACF,CAAA;AAEA,IAAQ,aAAA,CAAA,IAAA,EAAA,kBAAA,EAAmC,OAAO,UAAe,KAAA;AAC/D,MAAI,IAAA,4BAAA,CAA6B,UAAU,CAAG,EAAA;AAC5C,QAAM,MAAA,EAAE,UAAW,EAAA,GAAI,UAAW,CAAA,OAAA;AAClC,QAAA,MAAM,EAAE,eAAA,GAAkB,iBAAkB,EAAA,GAAI,UAAW,CAAA,MAAA;AAC3D,QAAM,MAAA,YAAA,GAAe,IAAK,CAAA,yBAAA,CAA0B,UAAU,CAAA;AAC9D,QAAM,MAAA,EAAE,YAAe,GAAA,YAAA;AACvB,QAAM,MAAA,EAAE,KAAO,EAAA,QAAA,EAAa,GAAA,UAAA;AAC5B,QAAA,IAAI,QAAU,EAAA;AACZ,UAAA,MAAM,WAAc,GAAA,IAAA,CAAK,MAAO,CAAA,QAAA,CAAS,KAAU,CAAA;AACnD,UAAA,IAAI,WAAa,EAAA;AACf,YAAM,MAAA,gBAAA,GAAmB,CAAW,QAAA,EAAA,IAAA,EAAM,CAAA,CAAA;AAC1C,YAAI,IAAA;AACF,cAAA,MAAM,eAAe,IAAK,CAAA,kBAAA;AAAA,gBACxB,WAAA;AAAA,gBACA,gBAAA;AAAA,gBACA,eAAA;AAAA;AAAA;AAAA,gBAGA;AAAA,eACF;AACA,cAAK,YAAA,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,gBAAgB,CAAI,GAAA,YAAA;AAC1C,cAAA,YAAA,CAAa,gBAAmB,GAAA,gBAAA;AAEhC,cAAO,OAAA;AAAA,gBACL,IAAM,EAAA;AAAA,kBACJ,eAAiB,EAAA,aAAA;AAAA,kBACjB,KAAO,EAAA;AAAA,oBACL,QAAQ,QAAS,CAAA,MAAA;AAAA,oBACjB,KAAO,EAAA;AAAA;AACT,iBACF;AAAA,gBACA,IAAM,EAAA;AAAA,eACR;AAAA,qBACO,CAAG,EAAA;AACV,cAAO,OAAA;AAAA,gBACL,IAAM,EAAA,cAAA;AAAA,gBACN,cAAe,CAAY,CAAA;AAAA,eAC7B;AAAA;AACF;AACF;AACF,OACK,MAAA;AACL,QAAA,MAAM,MAAM,CAA6C,2CAAA,CAAA,CAAA;AAAA;AAG3D,MAAO,OAAA;AAAA,QACL,IAAM,EAAA,cAAA;AAAA,QACN,YAAc,EAAA;AAAA,OAChB;AAAA,KACF,CAAA;AAEA,IAAQ,aAAA,CAAA,IAAA,EAAA,QAAA,EAAyB,OAAO,UAAe,KAAA;AACrD,MAAI,IAAA,kBAAA,CAAmB,UAAU,CAAG,EAAA;AAClC,QAAM,MAAA,EAAE,UAAW,EAAA,GAAI,UAAW,CAAA,OAAA;AAClC,QAAM,MAAA,YAAA,GAAe,IAAK,CAAA,yBAAA,CAA0B,UAAU,CAAA;AAC9D,QAAA,MAAM,eAAe,YAAa,CAAA,gBAAA,GAC9B,mBAAK,gBAAiB,CAAA,CAAA,YAAA,CAAa,gBAAgB,CACnD,GAAA,KAAA,CAAA;AACJ,QAAA,IAAI,CAAC,YAAc,EAAA;AACjB,UAAO,OAAA;AAAA,YACL,IAAM,EAAA,cAAA;AAAA,YACN,YAAA,EAAc,gDAAgD,UAAU,CAAA;AAAA,WAC1E;AAAA;AAEF,QAAM,MAAA,EAAE,IAAK,EAAA,GAAI,UAAW,CAAA,MAAA;AAE5B,QAAA,MAAM,YAAY,YAAa,CAAA,GAAA;AAC/B,QAAA,MAAM,WAAc,GAAA,MAAA,CAAO,IAAK,CAAA,SAAS,CAAE,CAAA,MAAA;AAC3C,QAAA,MAAM,MAAkB,IAAI,KAAA,CAAM,WAAW,CAAA,CAAE,KAAK,EAAE,CAAA;AACtD,QAAA,KAAA,MAAW,CAAC,GAAK,EAAA,GAAG,KAAK,MAAO,CAAA,OAAA,CAAQ,SAAS,CAAG,EAAA;AAClD,UAAI,IAAA,IAAA,CAAK,GAAG,CAAA,KAAM,KAAW,CAAA,EAAA;AAC3B,YAAI,GAAA,CAAA,GAAG,CAAI,GAAA,IAAA,CAAK,GAAG,CAAA;AAAA;AACrB;AAEF,QAAA,YAAA,CAAa,OAAO,GAAG,CAAA;AACvB,QAAA,OAAO,EAAE,IAAA,EAAM,gBAAkB,EAAA,IAAA,EAAM,KAAU,CAAA,EAAA;AAAA;AAEnD,MAAO,OAAA;AAAA,QACL,IAAM,EAAA,cAAA;AAAA,QACN,YAAc,EAAA;AAAA,OAChB;AAAA,KACF,CAAA;AAEA,IAAQ,aAAA,CAAA,IAAA,EAAA,gBAAA,EAAiC,OAAO,UAAe,KAAA;AAC7D,MAAI,IAAA,0BAAA,CAA2B,UAAU,CAAG,EAAA;AAC1C,QAAM,MAAA,EAAE,UAAW,EAAA,GAAI,UAAW,CAAA,OAAA;AAElC,QAAM,MAAA,YAAA,GAAe,IAAK,CAAA,yBAAA,CAA0B,UAAU,CAAA;AAC9D,QAAM,MAAA,gBAAA,GAAmB,aAAa,gBAAoB,IAAA,UAAA;AAC1D,QAAM,MAAA,YAAA,GAAe,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,gBAAgB,CAAA;AAC3D,QAAM,MAAA,EAAE,YAAe,GAAA,YAAA;AAEvB,QAAA,IAAI,WAAW,KAAO,EAAA;AACpB,UAAA,MAAM,WAAc,GAAA,IAAA,CAAK,MAAO,CAAA,UAAA,CAAW,MAAM,KAAU,CAAA;AAE3D,UAAI,IAAA,UAAA,CAAW,MAAO,CAAA,IAAA,KAAS,IAAM,EAAA;AACnC,YAAA,IAAI,aAAgB,GAAA,CAAA;AACpB,YAAI,IAAA,mBAAA,CAAoB,YAAY,CAAG,EAAA;AACrC,cAAM,MAAA,OAAA,GAAU,aAAa,iBAAkB,EAAA;AAC/C,cAAQ,OAAA,CAAA,OAAA,CAAQ,CAAC,UAAA,EAAY,GAAQ,KAAA;AACnC,gBAAM,MAAA,EAAE,WAAa,EAAA,mBAAA,EAAwB,GAAA,UAAA;AAC7C,gBAAM,MAAA,UAAA,GAAa,WAAY,CAAA,SAAA,CAAU,GAAG,CAAA;AAC5C,gBAAA,MAAM,0BACJ,GAAA,UAAA,CAAW,WAAY,CAAA,GAAA,CAAI,mBAAmB,CAAA;AAChD,gBAAA,IAAI,wBAAwB,0BAA4B,EAAA;AAEtD,kBAAiB,aAAA,IAAA,CAAA;AACjB,kBAAM,MAAA,eAAA,GAAkB,YAAa,CAAA,SAAA,CAAU,GAAG,CAAA;AAClD,kBAAM,MAAA,MAAA,GAAS,gBAAgB,KAAM,EAAA;AACrC,kBAAA,MAAM,WAAqB,EAAC;AAC5B,kBAAO,MAAA,CAAA,OAAA,CAAQ,WAAW,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAC,MAAA,EAAQ,KAAK,CAAM,KAAA;AACvD,oBAAA,QAAA,CAAS,IAAK,CAAA,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,KAAK,CAAE,CAAA,CAAA;AAAA,mBACnC,CAAA;AACD,kBAAA,MAAA,CAAO,aAAa,GAAI,CAAA,MAAM,CAAI,GAAA,QAAA,CAAS,KAAK,GAAG,CAAA;AACnD,kBAAA,YAAA,CAAa,UAAU,MAAM,CAAA;AAAA,iBACxB,MAAA;AACL,kBAAM,MAAA,MAAA,GAAS,WAAW,KAAM,EAAA;AAChC,kBAAO,MAAA,CAAA,OAAA,CAAQ,WAAW,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAC,MAAA,EAAQ,KAAK,CAAM,KAAA;AACvD,oBAAA,MAAA,CAAO,WAAY,CAAA,GAAA,CAAI,MAAM,CAAC,CAAI,GAAA,KAAA;AAAA,mBACnC,CAAA;AACD,kBAAA,WAAA,CAAY,UAAU,MAAM,CAAA;AAAA;AAC9B,eACD,CAAA;AACD,cAAA,OAAA,CAAQ,KAAM,EAAA;AAAA,aACT,MAAA;AAGL,cAAM,MAAA,SAAA,GAAY,YAAa,CAAA,GAAA,CAAI,QAAQ,CAAA;AAC3C,cAAM,MAAA,aAAA,GAAgB,YAAY,MAAO,CAAA,OAAA;AACzC,cAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,YAAa,CAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACjD,gBAAM,MAAA,UAAA,GAAa,YAAa,CAAA,IAAA,CAAK,CAAC,CAAA;AACtC,gBAAI,IAAA,UAAA,CAAW,SAAS,CAAG,EAAA;AAC3B,gBAAA,MAAM,YAAkC,aAAc,CAAA,GAAA;AAAA,kBACpD,CAAC,GAAQ,KAAA,UAAA,CAAW,aAAa,GAAI,CAAA,GAAA,CAAI,IAAI,CAAC;AAAA,iBAChD;AACA,gBAAA,WAAA,CAAY,OAAO,SAAS,CAAA;AAAA;AAC9B;AAGF,YAAA,IAAI,gBAAgB,CAAG,EAAA;AACrB,cAAO,OAAA;AAAA,gBACL,YAAc,EAAA,cAAA;AAAA,gBACd,IAAM,EAAA;AAAA,eACR;AAAA,aACK,MAAA;AACL,cAAO,OAAA;AAAA,gBACL,IAAM,EAAA,gBAAA;AAAA,gBACN,IAAM,EAAA,KAAA;AAAA,eACR;AAAA;AACF,WACK,MAAA;AACL,YAAO,OAAA;AAAA,cACL,IAAM,EAAA,gBAAA;AAAA,cACN,IAAM,EAAA,KAAA;AAAA,aACR;AAAA;AACF,SACK,MAAA;AACL,UAAA,MAAM,MAAM,2BAA2B,CAAA;AAAA;AACzC,OACK,MAAA;AACL,QAAA,MAAM,MAAM,CAA6C,2CAAA,CAAA,CAAA;AAAA;AAC3D,KAMF,CAAA;AAGA;AAAA,IAAQ,aAAA,CAAA,IAAA,EAAA,gBAAA,EAAiC,OAAO,UAAe,KAAA;AAC7D,MAAI,IAAA,UAAA,CAAW,OAAQ,CAAA,IAAA,KAAS,kBAAoB,EAAA;AAClD,QAAM,MAAA,EAAE,UAAW,EAAA,GAAI,UAAW,CAAA,OAAA;AAClC,QAAM,MAAA,YAAA,GAAe,IAAK,CAAA,eAAA,CAAgB,UAAU,CAAA;AACpD,QAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,YAAa,CAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACjD,UAAM,MAAA,MAAA,GAAS,YAAa,CAAA,IAAA,CAAK,CAAC,CAAA;AAClC,UAAA,MAAM,EAAE,MAAA,EAAQ,KAAM,EAAA,GAAI,UAAW,CAAA,MAAA;AAIrC,UAAA,MAAM,QAAW,GAAA,YAAA,CAAa,GAAI,CAAA,YAAA,CAAa,OAAO,GAAG,CAAA;AACzD,UAAa,YAAA,CAAA,MAAA;AAAA,YACX,MAAA,CAAO,MAAO,CAAA,QAAQ,CAAC,CAAA;AAAA,YACvB,MAAA;AAAA,YACA;AAAA,WACF;AAAA;AAEF,QAAO,OAAA;AAAA,UACL,IAAM,EAAA,gBAAA;AAAA,UACN,IAAM,EAAA,KAAA;AAAA,SACR;AAAA,OACK,MAAA;AACL,QAAA,MAAM,MAAM,CAA6C,2CAAA,CAAA,CAAA;AAAA;AAC3D,KACF,CAAA;AA4EA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAgC,YAAA,CAAA,IAAA,EAAA,eAAA,EAAA;AAAA,MAC9B;AAAA,QACE,OAAS,EAAA,QAAA;AAAA,QACT,SAAS,IAAK,CAAA;AAAA,OAChB;AAAA,MACA;AAAA,QACE,OAAS,EAAA,+BAAA;AAAA,QACT,SAAS,IAAK,CAAA;AAAA,OAChB;AAAA,MACA;AAAA,QACE,OAAS,EAAA,kBAAA;AAAA,QACT,SAAS,IAAK,CAAA;AAAA,OAChB;AAAA,MACA;AAAA,QACE,OAAS,EAAA,gBAAA;AAAA,QACT,SAAS,IAAK,CAAA;AAAA,OAChB;AAAA,MACA;AAAA,QACE,OAAS,EAAA,UAAA;AAAA,QACT,SAAS,IAAK,CAAA;AAAA;AAChB,KACF,CAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAwC,YAAA,CAAA,IAAA,EAAA,mBAAA,EAAA;AAAA,MACtC;AAAA,QACE,OAAS,EAAA,kBAAA;AAAA,QACT,SAAS,IAAK,CAAA;AAAA;AAChB,KACF,CAAA;AA/tBE,IAAA,YAAA,CAAA,IAAA,EAAK,KAAQ,EAAA,IAAA,CAAA;AACb,IAAA,eAAA,CAAgB,SAAS,IAAI,CAAA;AAAA;AAC/B,EAWA,eAAe,SAAmB,EAAA;AAChC,IAAA,OACE,KAAK,OAAQ,CAAA,SAAc,KAAK,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,SAAS,CAAG,EAAA,MAAA;AAAA;AAEtE,EAEA,YAAe,GAAA;AACb,IAAO,OAAA,MAAA,CAAO,IAAK,CAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAChC,EAiGA,IAAI,IAAO,GAAA;AACT,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,KAAA,CAAA;AAAA;AACd,EAEA,0BAA0B,UAAoB,EAAA;AAC5C,IAAA,KAAA,MAAW,aAAiB,IAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,MAAA,EAAU,EAAA;AAC1D,MAAA,KAAA,MAAW,gBAAgB,aAAe,EAAA;AACxC,QAAI,IAAA,YAAA,CAAa,eAAe,UAAY,EAAA;AAC1C,UAAO,OAAA,YAAA;AAAA;AACT;AACF;AAEF,IAAM,MAAA,KAAA;AAAA,MACJ,oEAAoE,UAAU,CAAA;AAAA,KAChF;AAAA;AACF,EAEA,wBAAwB,IAA0B,EAAA;AAChD,IAAA,KAAA,MAAW,aAAiB,IAAA,YAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,MAAA,EAAU,EAAA;AAC1D,MAAA,KAAA,MAAW,EAAE,UAAA,EAAY,UAAW,EAAA,IAAK,aAAe,EAAA;AACtD,QAAA,IAAI,eAAe,IAAM,EAAA;AACvB,UAAO,OAAA,UAAA;AAAA;AACT;AACF;AAEF,IAAM,MAAA,KAAA,CAAM,CAA4B,yBAAA,EAAA,IAAI,CAAyB,uBAAA,CAAA,CAAA;AAAA;AACvE,EAwHA,YAAY,SAAc,EAAA;AACxB,IAAM,MAAA,aAAA,GAAgB,IAAK,CAAA,QAAA,GAAW,SAAS,CAAA;AAC/C,IAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,aAAa,CAAG,EAAA;AAChC,MAAO,OAAA,YAAA,CAAA,IAAA,EAAK,eAAgB,CAAA,CAAA,MAAA,CAAO,aAAa,CAAA;AAAA,KAC3C,MAAA;AACL,MAAA,OAAO,YAAK,CAAA,IAAA,EAAA,eAAA,CAAA;AAAA;AACd;AACF,EAEA,gBAAgB,SAAc,EAAA;AAC5B,IAAM,MAAA,aAAA,GAAgB,IAAK,CAAA,YAAA,GAAe,SAAS,CAAA;AACnD,IAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,aAAa,CAAG,EAAA;AAChC,MAAO,OAAA,YAAA,CAAA,IAAA,EAAK,mBAAoB,CAAA,CAAA,MAAA,CAAO,aAAa,CAAA;AAAA,KAC/C,MAAA;AACL,MAAA,OAAO,YAAK,CAAA,IAAA,EAAA,mBAAA,CAAA;AAAA;AACd;AACF,EAEA,IAAc,eAAkB,GAAA;AAC9B,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA;AAAA;AACd,EAWU,eAAA,CAAgB,gBAA0B,EAAA,eAAA,GAAkB,IAAM,EAAA;AAC1E,IAAM,MAAA,YAAA,GAAe,YAAK,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,gBAAgB,CAAA;AAC3D,IAAA,IAAI,YAAc,EAAA;AAChB,MAAO,OAAA,YAAA;AAAA,eACE,eAAiB,EAAA;AAC1B,MAAM,MAAA,KAAA;AAAA,QACJ,+CAA+C,gBAAgB,CAAA;AAAA,OACjE;AAAA;AACF;AACF,EAiCQ,qBAAqB,SAAc,EAAA;AACzC,IAAM,MAAA,MAAA,GACJ,KAAK,OAAQ,CAAA,SAAS,KAAK,IAAK,CAAA,eAAA,CAAgB,SAAS,CAAG,EAAA,MAAA;AAC9D,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,OAAO,MAAO,CAAA,OAAA;AAAA,KACT,MAAA;AACL,MAAM,MAAA,KAAA;AAAA,QACJ,CAA+B,4BAAA,EAAA,YAAA,CAAA,IAAA,EAAK,KAAK,CAAA,CAAA,OAAA,EAAU,SAAS,CAAA;AAAA,OAC9D;AAAA;AACF;AACF,EAyRU,kBACR,CAAA,WAAA,EACA,gBACA,EAAA,eAAA,GAAmC,mBACnC,UACA,EAAA;AACA,IAAI,IAAA,eAAA,CAAgB,QAAS,CAAA,UAAU,CAAG,EAAA;AACxC,MAAO,OAAA,IAAA,CAAK,6BAA8B,CAAA,WAAA,EAAa,gBAAgB,CAAA;AAAA,KACzE,MAAA,IAAW,oBAAoB,eAAiB,EAAA;AAC9C,MAAA,OAAO,IAAK,CAAA,kCAAA;AAAA,QACV,WAAA;AAAA,QACA,gBAAA;AAAA,QACA;AAAA,OACF;AAAA,KACF,MAAA,IAAW,oBAAoB,qBAAuB,EAAA;AACpD,MAAO,OAAA,IAAA,CAAK,uBAAwB,CAAA,WAAA,EAAa,gBAAgB,CAAA;AAAA,KAC5D,MAAA;AACL,MAAM,MAAA,KAAA;AAAA,QACJ,2DAA2D,eAAe,CAAA;AAAA,OAC5E;AAAA;AACF;AACF,EAEU,6BAAA,CACR,aACA,gBACA,EAAA;AACA,IAAO,OAAA,YAAA,CAAa,aAAa,gBAAgB,CAAA;AAAA;AACnD,EAEU,uBACR,CAAA,EAAE,MAAO,EAAA,EACT,gBACA,EAAA;AAGA,IAAA,MAAM,gBAAgB,kBAAmB,CAAA;AAAA,MACvC,GAAG,MAAA;AAAA,MACH,OAAO,EAAE,GAAG,MAAO,CAAA,KAAA,EAAO,OAAO,gBAAiB;AAAA,KACnD,CAAA;AACD,IAAA,OAAO,IAAI,KAAM,CAAA,aAAA,EAAe,EAAI,EAAA,4BAAA,CAA6B,aAAa,CAAC,CAAA;AAAA;AACjF,EAEU,mCACR,EAAE,IAAA,EAAM,KAAK,MAAO,EAAA,EACpB,kBACA,UACA,EAAA;AACA,IAAM,MAAA,cAAA,GAAiB,WAAW,iBAAkB,EAAA;AACpD,IAAM,MAAA,QAAA,GAAW,GAAI,CAAA,MAAA,CAAO,GAAG,CAAA;AAC/B,IAAA,MAAM,cAAsC,EAAC;AAC7C,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,cAAA,CAAe,QAAQ,CAAK,EAAA,EAAA;AAC9C,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,QAAA,IAAI,KAAK,CAAC,CAAA,CAAE,QAAQ,CAAM,KAAA,cAAA,CAAe,CAAC,CAAG,EAAA;AAC3C,UAAY,WAAA,CAAA,IAAA,CAAK,IAAK,CAAA,CAAC,CAAC,CAAA;AAAA;AAC1B;AACF;AAIF,IAAM,MAAA,aAAA,GAAgB,mBAAmB,MAAM,CAAA;AAE/C,IAAA,OAAO,IAAI,KAAA;AAAA,MACT,aAAA;AAAA,MACA,WAAA;AAAA,MACA,6BAA6B,aAAa;AAAA,KAC5C;AAAA;AA0CJ;AAvuBE,KAAA,GAAA,IAAA,OAAA,EAAA;AACA,mBAAA,GAAA,IAAA,OAAA,EAAA;AACA,gBAAA,GAAA,IAAA,OAAA,EAAA;AACA,cAAA,GAAA,IAAA,OAAA,EAAA;AACA,gBAAA,GAAA,IAAA,OAAA,EAAA;AAisBA,eAAA,GAAA,IAAA,OAAA,EAAA;AA4BA,mBAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
- "version": "2.1.16",
2
+ "version": "2.1.18",
3
3
  "author": "heswell",
4
4
  "license": "Apache-2.0",
5
5
  "dependencies": {
6
- "@vuu-ui/vuu-data-local": "2.1.16",
7
- "@vuu-ui/vuu-utils": "2.1.16"
6
+ "@vuu-ui/vuu-data-local": "2.1.18",
7
+ "@vuu-ui/vuu-utils": "2.1.18"
8
8
  },
9
9
  "devDependencies": {
10
- "@vuu-ui/vuu-protocol-types": "2.1.16",
11
- "@vuu-ui/vuu-data-types": "2.1.16",
12
- "@vuu-ui/vuu-table-types": "2.1.16"
10
+ "@vuu-ui/vuu-protocol-types": "2.1.18",
11
+ "@vuu-ui/vuu-data-types": "2.1.18",
12
+ "@vuu-ui/vuu-table-types": "2.1.18"
13
13
  },
14
14
  "sideEffects": false,
15
15
  "files": [
@@ -1,4 +1,4 @@
1
- import { DataSource, DataSourceConfig, DataSourceVisualLinkCreatedMessage, EditSessionMode, TableSchema } from "@vuu-ui/vuu-data-types";
1
+ import { DataSource, DataSourceConfig, DataSourceSubscribedMessage, DataSourceVisualLinkCreatedMessage, EditSessionMode, TableSchema } from "@vuu-ui/vuu-data-types";
2
2
  import { VuuMenu, VuuLink, LinkDescriptorWithLabel, VuuRpcMenuResponse, VuuCreateVisualLink, VuuRemoveVisualLink, VuuRpcServiceRequest, RpcResultSuccess, RpcResultError, VuuRpcMenuRequest } from "@vuu-ui/vuu-protocol-types";
3
3
  import { Table } from "../../Table";
4
4
  import { SessionTable } from "../../SessionTable";
@@ -33,12 +33,14 @@ export declare abstract class VuuModule<T extends string = string> implements IV
33
33
  protected abstract visualLinks?: Record<T, VuuLink[] | undefined>;
34
34
  getTableSchema(tableName: string): Record<T, Readonly<TableSchema>>[T];
35
35
  getTableList(): string[];
36
+ protected handlePostSubscribeActivities: ({ clientViewportId, tableSchema, }: DataSourceSubscribedMessage) => void;
36
37
  protected unregisterViewport: (viewportId: string) => void;
37
38
  get name(): string;
38
39
  getSubscriptionByViewport(viewportId: string): Subscription;
39
40
  getSubscribedDataSource(vpId: string): DataSource;
40
41
  getLinks: (subscriptionMap: Map<string, Subscription[]>, vuuLinks: VuuLink[]) => LinkDescriptorWithLabel[];
41
42
  visualLinkService: (message: VuuCreateVisualLink | VuuRemoveVisualLink) => Promise<DataSourceVisualLinkCreatedMessage | void>;
43
+ getVisualLinks: (tableName: string) => LinkDescriptorWithLabel[] | undefined;
42
44
  createDataSource: (tableName: T, viewport?: string, config?: DataSourceConfig) => DataSource;
43
45
  getServices(tableName: T): RpcService[];
44
46
  getMenuServices(tableName: T): RpcMenuService[];
@@ -56,7 +58,7 @@ export declare abstract class VuuModule<T extends string = string> implements IV
56
58
  private applyBulkEdits;
57
59
  protected createSessionTable(sourceTable: Table, sessionTableName: string, editSessionMode: EditSessionMode | undefined, dataSource: TickingArrayDataSource): Table;
58
60
  protected createSessionTableWithAllRows(sourceTable: Table, sessionTableName: string): SessionTable;
59
- protected createEmptySessionTable({ schema }: Table): Table;
61
+ protected createEmptySessionTable({ schema }: Table, sessionTableName: string): Table;
60
62
  protected createSessionTableFromSelectedRows({ data, map, schema }: Table, sessionTableName: string, dataSource: TickingArrayDataSource): Table;
61
63
  }
62
64
  export {};