@vuu-ui/vuu-data-test 2.1.15 → 2.1.17

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.
@@ -1,9 +1,10 @@
1
- import { isRpcSuccess, uuid } from '@vuu-ui/vuu-utils';
1
+ import { isEditCellRpcRequest, isRpcSuccess, isBeginEditSessionRpcRequest, uuid, isAddRowRpcRequest, isEndEditSessionRpcRequest } from '@vuu-ui/vuu-utils';
2
2
  import { Table, buildDataColumnMapFromSchema } from '../../Table.js';
3
3
  import { SessionTable, isProxySessionTable } from '../../SessionTable.js';
4
4
  import { TickingArrayDataSource } from '../../TickingArrayDataSource.js';
5
5
  import { RuntimeVisualLink } from '../../RuntimeVisualLink.js';
6
6
  import moduleContainer from './ModuleContainer.js';
7
+ import { sessionTableSchema } from '../../session-table-utils.js';
7
8
 
8
9
  var __defProp = Object.defineProperty;
9
10
  var __typeError = (msg) => {
@@ -33,20 +34,87 @@ class VuuModule {
33
34
  __privateAdd(this, _sessionTableMap, {});
34
35
  __privateAdd(this, _tableServices);
35
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
+ });
36
70
  __publicField(this, "unregisterViewport", (viewportId) => {
37
- 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)) {
38
93
  if (subscriptions[0].viewportId.toString() === viewportId) {
39
- __privateGet(this, _subscriptionMap).delete(tableName);
40
- } else {
41
- 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
+ )) {
42
104
  if (links) {
43
- for (let i = 0; i < links?.length; i++) {
44
- if (links[i].parentClientVpId === viewportId) {
45
- 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
+ }
46
115
  }
47
116
  }
48
117
  }
49
- subscriptions[0].dataSource.links = links;
50
118
  }
51
119
  }
52
120
  });
@@ -103,11 +171,11 @@ class VuuModule {
103
171
  resolve();
104
172
  }
105
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
+ });
106
178
  __publicField(this, "createDataSource", (tableName, viewport, config) => {
107
- const getVisualLinks = (tableName2) => {
108
- const linksForTable = this.visualLinks?.[tableName2];
109
- return linksForTable === void 0 ? void 0 : this.getLinks(__privateGet(this, _subscriptionMap), linksForTable);
110
- };
111
179
  const columnDescriptors = this.getColumnDescriptors(tableName);
112
180
  const table = this.tables[tableName];
113
181
  const sessionTable = __privateGet(this, _sessionTableMap)[tableName];
@@ -115,7 +183,7 @@ class VuuModule {
115
183
  const dataSource = new TickingArrayDataSource({
116
184
  ...config,
117
185
  columnDescriptors,
118
- getVisualLinks,
186
+ getVisualLinks: this.getVisualLinks,
119
187
  keyColumn: this.schemas[tableName] === void 0 ? __privateGet(this, _sessionTableMap)[tableName].schema.key : this.schemas[tableName].key,
120
188
  table: table || sessionTable,
121
189
  menu: this.menus?.[tableName],
@@ -126,6 +194,7 @@ class VuuModule {
126
194
  visualLinkService: this.visualLinkService,
127
195
  vuuModule
128
196
  });
197
+ dataSource.on("subscribed", this.handlePostSubscribeActivities);
129
198
  dataSource.on("unsubscribed", this.unregisterViewport);
130
199
  const existingSubscriptions = __privateGet(this, _subscriptionMap).get(tableName);
131
200
  const subscription = {
@@ -170,7 +239,7 @@ class VuuModule {
170
239
  };
171
240
  });
172
241
  __publicField(this, "editCell", async (rpcRequest) => {
173
- if (rpcRequest.context.type === "VIEWPORT_CONTEXT") {
242
+ if (isEditCellRpcRequest(rpcRequest)) {
174
243
  const { viewPortId } = rpcRequest.context;
175
244
  const { column, data, key } = rpcRequest.params;
176
245
  let targetTable = __privateGet(this, _sessionTableMap)[viewPortId];
@@ -250,9 +319,9 @@ class VuuModule {
250
319
  }
251
320
  });
252
321
  __publicField(this, "beginEditSession", async (rpcRequest) => {
253
- if (rpcRequest.context.type === "VIEWPORT_CONTEXT") {
322
+ if (isBeginEditSessionRpcRequest(rpcRequest)) {
254
323
  const { viewPortId } = rpcRequest.context;
255
- const { editSessionMode = "all-rows" } = rpcRequest.params;
324
+ const { editSessionMode = "inline-all-rows" } = rpcRequest.params;
256
325
  const subscription = this.getSubscriptionByViewport(viewPortId);
257
326
  const { dataSource } = subscription;
258
327
  const { table: vuuTable } = dataSource;
@@ -298,7 +367,7 @@ class VuuModule {
298
367
  };
299
368
  });
300
369
  __publicField(this, "addRow", async (rpcRequest) => {
301
- if (rpcRequest.context.type === "VIEWPORT_CONTEXT") {
370
+ if (isAddRowRpcRequest(rpcRequest)) {
302
371
  const { viewPortId } = rpcRequest.context;
303
372
  const subscription = this.getSubscriptionByViewport(viewPortId);
304
373
  const sessionTable = subscription.sessionTableName ? __privateGet(this, _sessionTableMap)[subscription.sessionTableName] : void 0;
@@ -308,13 +377,13 @@ class VuuModule {
308
377
  errorMessage: `addRow: no active session table for viewport ${viewPortId}`
309
378
  };
310
379
  }
311
- const { rowData } = rpcRequest.params;
380
+ const { data } = rpcRequest.params;
312
381
  const columnMap = sessionTable.map;
313
382
  const columnCount = Object.keys(columnMap).length;
314
383
  const row = new Array(columnCount).fill("");
315
384
  for (const [col, idx] of Object.entries(columnMap)) {
316
- if (Object.prototype.hasOwnProperty.call(rowData, col)) {
317
- row[idx] = rowData[col];
385
+ if (data[col] !== void 0) {
386
+ row[idx] = data[col];
318
387
  }
319
388
  }
320
389
  sessionTable.insert(row);
@@ -326,7 +395,7 @@ class VuuModule {
326
395
  };
327
396
  });
328
397
  __publicField(this, "endEditSession", async (rpcRequest) => {
329
- if (rpcRequest.context.type === "VIEWPORT_CONTEXT") {
398
+ if (isEndEditSessionRpcRequest(rpcRequest)) {
330
399
  const { viewPortId } = rpcRequest.context;
331
400
  const sessionTable = __privateGet(this, _sessionTableMap)[viewPortId];
332
401
  delete __privateGet(this, _sessionTableMap)[viewPortId];
@@ -334,6 +403,7 @@ class VuuModule {
334
403
  if (dataSource.table) {
335
404
  const sourceTable = this.tables[dataSource.table.table];
336
405
  if (rpcRequest.params.save === true) {
406
+ let rejectedCount = 0;
337
407
  if (isProxySessionTable(sessionTable)) {
338
408
  const updates = sessionTable.getSessionUpdates();
339
409
  updates.forEach((rowUpdates, key) => {
@@ -341,11 +411,22 @@ class VuuModule {
341
411
  const currentRow = sourceTable.findByKey(key);
342
412
  const lastUpdateTimestampOnTable = currentRow[sourceTable.map.vuuUpdatedTimestamp];
343
413
  if (lastUpdateTimestamp !== lastUpdateTimestampOnTable) {
344
- console.log("Houston WE HAVE a PROBLEM");
414
+ rejectedCount += 1;
415
+ const sessionTableRow = sessionTable.findByKey(key);
416
+ const newRow = sessionTableRow.slice();
417
+ const messages = [];
418
+ Object.entries(cellUpdates).forEach(([column, value]) => {
419
+ messages.push(`${column}:${value}`);
420
+ });
421
+ newRow[sessionTable.map.vuuMsg] = messages.join(",");
422
+ sessionTable.updateRow(newRow);
423
+ } else {
424
+ const newRow = currentRow.slice();
425
+ Object.entries(cellUpdates).forEach(([column, value]) => {
426
+ newRow[sourceTable.map[column]] = value;
427
+ });
428
+ sourceTable.updateRow(newRow);
345
429
  }
346
- Object.entries(cellUpdates).forEach(([column, value]) => {
347
- sourceTable.update(key, column, value);
348
- });
349
430
  });
350
431
  updates.clear();
351
432
  } else {
@@ -354,11 +435,23 @@ class VuuModule {
354
435
  sourceTable.updateRow(newRow);
355
436
  }
356
437
  }
438
+ if (rejectedCount > 0) {
439
+ return {
440
+ errorMessage: "stale update",
441
+ type: "ERROR_RESULT"
442
+ };
443
+ } else {
444
+ return {
445
+ type: "SUCCESS_RESULT",
446
+ data: void 0
447
+ };
448
+ }
449
+ } else {
450
+ return {
451
+ type: "SUCCESS_RESULT",
452
+ data: void 0
453
+ };
357
454
  }
358
- return {
359
- type: "SUCCESS_RESULT",
360
- data: void 0
361
- };
362
455
  } else {
363
456
  throw Error("[VuuModule], exitEditMode");
364
457
  }
@@ -500,8 +593,8 @@ class VuuModule {
500
593
  );
501
594
  }
502
595
  }
503
- createSessionTable(sourceTable, sessionTableName, editSessionMode = "all-rows", dataSource) {
504
- if (editSessionMode === "all-rows") {
596
+ createSessionTable(sourceTable, sessionTableName, editSessionMode = "inline-all-rows", dataSource) {
597
+ if (editSessionMode.endsWith("all-rows")) {
505
598
  return this.createSessionTableWithAllRows(sourceTable, sessionTableName);
506
599
  } else if (editSessionMode === "selected-rows") {
507
600
  return this.createSessionTableFromSelectedRows(
@@ -534,7 +627,12 @@ class VuuModule {
534
627
  }
535
628
  }
536
629
  }
537
- return new Table(schema, sessionData, buildDataColumnMapFromSchema(schema));
630
+ const sessionSchema = sessionTableSchema(schema);
631
+ return new Table(
632
+ sessionSchema,
633
+ sessionData,
634
+ buildDataColumnMapFromSchema(sessionSchema)
635
+ );
538
636
  }
539
637
  }
540
638
  _name = new WeakMap();
@@ -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} from \"@vuu-ui/vuu-protocol-types\";\nimport { isRpcSuccess, uuid } 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\";\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: (tableName: T, viewport?: string) => 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 (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\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 (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\n const { viewPortId } = rpcRequest.context;\n const { editSessionMode = \"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 (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\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 { rowData } = rpcRequest.params as unknown as {\n rowData: Record<string, VuuRowDataItemType>;\n };\n const columnMap = sessionTable.map;\n const columnCount = Object.keys(columnMap).length;\n const row: VuuRowDataItemType[] = new Array(columnCount).fill(\"\");\n for (const [col, idx] of Object.entries(columnMap)) {\n if (Object.prototype.hasOwnProperty.call(rowData, col)) {\n row[idx] = rowData[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 (rpcRequest.context.type === \"VIEWPORT_CONTEXT\") {\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 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 console.log(\"Houston WE HAVE a PROBLEM\");\n }\n Object.entries(cellUpdates).forEach(([column, value]) => {\n sourceTable.update(key, column, value);\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\n return {\n type: \"SUCCESS_RESULT\",\n data: undefined,\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;\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 = \"all-rows\",\n dataSource: TickingArrayDataSource,\n ) {\n if (editSessionMode === \"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 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, sessionData, buildDataColumnMapFromSchema(schema));\n }\n\n /**\n * These services are available on any table. The client must configure the appropriate\n * menu item(s) on Table(s). The services to implement these RPC calls are built-in to\n * VuuModule\n */\n #moduleServices: RpcService[] = [\n {\n rpcName: \"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 this.schemas[tableName as T];\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 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","dataSource","tableName"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import './Table.js';
2
+ import '@vuu-ui/vuu-utils';
3
+
4
+ const sessionTableSchema = (schema) => ({
5
+ ...schema,
6
+ columns: schema.columns.concat({ name: "vuuMsg", serverDataType: "string" })
7
+ });
8
+
9
+ export { sessionTableSchema };
10
+ //# sourceMappingURL=session-table-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-table-utils.js","sources":["../../../packages/vuu-data-test/src/session-table-utils.ts"],"sourcesContent":["import { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { Table, buildDataColumnMapFromSchema } from \"./Table\";\nimport { metadataKeys } from \"@vuu-ui/vuu-utils\";\nimport { TableSchema } from \"@vuu-ui/vuu-data-types\";\n\nconst { KEY } = metadataKeys;\n\nexport const createSessionTableFromSelectedRows = (\n table: Table,\n selectedRowIds: string[],\n) => {\n const sessionData: VuuRowDataItemType[][] = [];\n for (let i = 0; i < selectedRowIds.length; i++) {\n for (let j = 0; j < table.data.length; j++) {\n if (table.data[j][KEY] === selectedRowIds[i]) {\n sessionData.push(table.data[j]);\n }\n }\n }\n\n return new Table(\n table.schema,\n sessionData,\n buildDataColumnMapFromSchema(table.schema),\n );\n};\n\nexport const sessionTableSchema = (schema: TableSchema): TableSchema => ({\n ...schema,\n columns: schema.columns.concat({ name: \"vuuMsg\", serverDataType: \"string\" }),\n});\n"],"names":[],"mappings":";;;AA2Ba,MAAA,kBAAA,GAAqB,CAAC,MAAsC,MAAA;AAAA,EACvE,GAAG,MAAA;AAAA,EACH,OAAA,EAAS,OAAO,OAAQ,CAAA,MAAA,CAAO,EAAE,IAAM,EAAA,QAAA,EAAU,cAAgB,EAAA,QAAA,EAAU;AAC7E,CAAA;;;;"}
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
- "version": "2.1.15",
2
+ "version": "2.1.17",
3
3
  "author": "heswell",
4
4
  "license": "Apache-2.0",
5
5
  "dependencies": {
6
- "@vuu-ui/vuu-data-local": "2.1.15",
7
- "@vuu-ui/vuu-utils": "2.1.15"
6
+ "@vuu-ui/vuu-data-local": "2.1.17",
7
+ "@vuu-ui/vuu-utils": "2.1.17"
8
8
  },
9
9
  "devDependencies": {
10
- "@vuu-ui/vuu-protocol-types": "2.1.15",
11
- "@vuu-ui/vuu-data-types": "2.1.15",
12
- "@vuu-ui/vuu-table-types": "2.1.15"
10
+ "@vuu-ui/vuu-protocol-types": "2.1.17",
11
+ "@vuu-ui/vuu-data-types": "2.1.17",
12
+ "@vuu-ui/vuu-table-types": "2.1.17"
13
13
  },
14
14
  "sideEffects": false,
15
15
  "files": [
@@ -30,7 +30,7 @@ export declare class TickingArrayDataSource extends ArrayDataSource {
30
30
  handleSessionMessage: (msg: DataSourceCallbackMessage) => void;
31
31
  createSessionDataSource(sessionTable: VuuTable): DataSource;
32
32
  beginEditSession(editSessionMode?: EditSessionMode): Promise<DataSource | undefined>;
33
- editCell(key: string, column: string, data: VuuRowDataItemType): Promise<void>;
33
+ editCell(key: string, column: string, data: VuuRowDataItemType): Promise<RpcResultSuccess | RpcResultError | undefined>;
34
34
  endEditSession(saveChanges?: boolean): Promise<void>;
35
35
  rpcRequest(rpcRequest: Omit<VuuRpcServiceRequest, "context">): Promise<RpcResultSuccess | RpcResultError>;
36
36
  menuRpcCall(rpcRequest: Omit<VuuRpcMenuRequest, "vpId">): Promise<VuuRpcMenuResponse>;
@@ -1,10 +1,10 @@
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";
5
5
  import { TickingArrayDataSource } from "../../TickingArrayDataSource";
6
6
  export interface IVuuModule<T extends string = string> {
7
- createDataSource: (tableName: T, viewport?: string) => DataSource;
7
+ createDataSource: (tableName: T, viewport?: string, config?: DataSourceConfig) => DataSource;
8
8
  }
9
9
  export type SessionTableMap = Record<string, SessionTable | Table>;
10
10
  export type ServiceHandler = (rpcRequest: VuuRpcServiceRequest) => Promise<RpcResultSuccess | RpcResultError>;
@@ -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[];
@@ -1,2 +1,4 @@
1
1
  import { Table } from "./Table";
2
+ import { TableSchema } from "@vuu-ui/vuu-data-types";
2
3
  export declare const createSessionTableFromSelectedRows: (table: Table, selectedRowIds: string[]) => Table;
4
+ export declare const sessionTableSchema: (schema: TableSchema) => TableSchema;