@vuu-ui/vuu-data-remote 2.1.9 → 2.1.10

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.
@@ -15,7 +15,6 @@ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read fr
15
15
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
16
16
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
17
17
  var _allColumns, _autosubscribeColumns, _pendingVisualLink, _links, _menu, _optimize, _selectedRowsCount, _sessionDataSource, _status, _tableSchema;
18
- const SESSION_TABLE_MSG_COLUMN = "vuuMsg";
19
18
  const { info, infoEnabled } = vuuUtils.logger("VuuDataSource");
20
19
  const combineColumnsWithAutosubscribeColumns = (columns, autosubscribeColumns = []) => {
21
20
  if (autosubscribeColumns.length === 0) {
@@ -70,19 +69,9 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
70
69
  } else if (message.type === "debounce-begin") {
71
70
  this.optimize = "debounce";
72
71
  } else {
73
- if (message.type === "viewport-update") {
74
- if (message.size !== void 0 && message.size !== this.size) {
75
- this.size = message.size;
76
- this.emit("resize", message.size);
77
- }
78
- if (Array.isArray(message.rows) && message.rows.length > 0 && __privateGet(this, _sessionDataSource)) {
79
- this.emit("remote-update-during-local-edit", message.rows);
80
- console.log(
81
- `updates incoming whilst edit in progress ${this.viewport}`
82
- );
83
- console.table(message.rows);
84
- return;
85
- }
72
+ if (message.type === "viewport-update" && message.size !== void 0 && message.size !== this.size) {
73
+ this.size = message.size;
74
+ this.emit("resize", message.size);
86
75
  } else if (message.type === "viewport-clear") {
87
76
  this.size = 0;
88
77
  this.emit("resize", 0);
@@ -224,18 +213,6 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
224
213
  }
225
214
  }
226
215
  }
227
- /**
228
- * Tell the server we wish to resume receiving messages. Server will send a
229
- * snapshot of rows currently in cache. This can be used to update with
230
- * latest data, e.g after an edit session during which we might have ignored
231
- * some updates.
232
- */
233
- sendResumeMessage() {
234
- this.server?.send({
235
- type: "resume",
236
- viewport: this.viewport
237
- });
238
- }
239
216
  resume(callback) {
240
217
  const isDisabled = __privateGet(this, _status).startsWith("disabl");
241
218
  const isSuspended = __privateGet(this, _status) === "suspended";
@@ -247,7 +224,10 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
247
224
  if (isDisabled) {
248
225
  this.enable();
249
226
  } else if (isSuspended) {
250
- this.sendResumeMessage();
227
+ this.server?.send({
228
+ type: "resume",
229
+ viewport: this.viewport
230
+ });
251
231
  __privateSet(this, _status, "subscribed");
252
232
  this.emit("resumed", this.viewport);
253
233
  if (__privateGet(this, _selectedRowsCount) > 0) {
@@ -503,12 +483,9 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
503
483
  return Promise.reject();
504
484
  }
505
485
  createSessionDataSource(sessionTable) {
506
- return new _VuuDataSource({
507
- columns: this.columns.concat(SESSION_TABLE_MSG_COLUMN),
508
- table: sessionTable
509
- });
486
+ return new _VuuDataSource({ columns: this.columns, table: sessionTable });
510
487
  }
511
- async beginEditSession(editSessionMode = "all-rows") {
488
+ async beginEditSession(editSessionMode = "inline-all-rows") {
512
489
  const rpcResponse = await this?.rpcRequest?.({
513
490
  type: "RPC_REQUEST",
514
491
  rpcName: "beginEditSession",
@@ -520,11 +497,10 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
520
497
  const { table: sessionTable } = rpcResponse.data;
521
498
  if (vuuUtils.isInlineEditingSession(editSessionMode)) {
522
499
  __privateSet(this, _sessionDataSource, new _VuuDataSource({
523
- ...this.config,
500
+ columns: this.columns,
524
501
  table: sessionTable,
525
502
  viewport: sessionTable.table
526
503
  }));
527
- this.columns = this.columns.concat("vuuMsg");
528
504
  __privateGet(this, _sessionDataSource).subscribe(
529
505
  {
530
506
  range: this.range
@@ -533,7 +509,7 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
533
509
  );
534
510
  } else {
535
511
  return new _VuuDataSource({
536
- ...this.config,
512
+ columns: this.columns,
537
513
  table: sessionTable,
538
514
  viewport: sessionTable.table
539
515
  });
@@ -549,7 +525,7 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
549
525
  `[VuuDataSource] editCell ${__privateGet(this, _sessionDataSource)?.viewport} rowKey ${key}, column ${column}, value ${data}`
550
526
  );
551
527
  const rpcHost = __privateGet(this, _sessionDataSource) ?? this;
552
- return rpcHost.rpcRequest?.({
528
+ const rpcResponse = await rpcHost.rpcRequest?.({
553
529
  type: "RPC_REQUEST",
554
530
  rpcName: "editCell",
555
531
  params: {
@@ -558,30 +534,26 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
558
534
  key
559
535
  }
560
536
  });
537
+ if (vuuUtils.isRpcSuccess(rpcResponse)) {
538
+ console.log("edit succeeded");
539
+ } else {
540
+ throw Error("oh oh");
541
+ }
561
542
  }
562
- async endEditSession(saveChanges = false, force = false) {
543
+ async endEditSession(saveChanges = false) {
563
544
  console.log(`[VuuDataSource] endEditSession saveChanges ${saveChanges}`);
564
545
  const type = "RPC_REQUEST";
565
546
  const rpcName = "endEditSession";
566
- const sessionDataSource = __privateGet(this, _sessionDataSource);
567
- const rpcHost = sessionDataSource ?? this;
568
- if (sessionDataSource) {
569
- __privateSet(this, _sessionDataSource, void 0);
570
- }
547
+ const rpcHost = __privateGet(this, _sessionDataSource) ?? this;
571
548
  const rpcResponse = await rpcHost.rpcRequest?.(
572
- saveChanges ? { type, rpcName, params: { save: true, force } } : { type, rpcName, params: {} }
549
+ saveChanges ? { type, rpcName, params: { save: true } } : { type, rpcName, params: {} }
573
550
  );
574
551
  if (vuuUtils.isRpcSuccess(rpcResponse)) {
575
- sessionDataSource?.unsubscribe();
552
+ console.log("edit succeeded");
553
+ __privateGet(this, _sessionDataSource)?.unsubscribe();
576
554
  } else {
577
- if (rpcResponse?.errorMessage === "stale update") {
578
- __privateSet(this, _sessionDataSource, sessionDataSource);
579
- throw new vuuUtils.StaleUpdateError(rpcResponse.errorMessage);
580
- } else {
581
- throw Error("unknown error");
582
- }
555
+ throw Error("oh oh");
583
556
  }
584
- this.sendResumeMessage();
585
557
  }
586
558
  async rpcRequest(rpcRequest) {
587
559
  if (this.viewport && this.server) {
@@ -1 +1 @@
1
- {"version":3,"file":"VuuDataSource.js","sources":["../../../packages/vuu-data-remote/src/VuuDataSource.ts"],"sourcesContent":["import type {\n DataSource,\n DataSourceCallbackMessage,\n DataSourceConstructorProps,\n DataSourceStatus,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n DataSourceVisualLinkCreatedMessage,\n EditSessionMode,\n OptimizeStrategy,\n ServerAPI,\n TableSchema,\n WithBaseFilter,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n LinkDescriptorWithLabel,\n RpcResultError,\n RpcResultSuccess,\n SelectRequest,\n VuuCreateVisualLink,\n VuuGroupBy,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n VuuRpcMenuRequest,\n VuuRpcResponse,\n VuuRpcServiceRequest,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { MenuRpcResponse } from \"@vuu-ui/vuu-data-types\";\nimport {\n BaseDataSource,\n combineFilters,\n debounce,\n isConfigChanged,\n isInlineEditingSession,\n isRpcSuccess,\n isSelectSuccessWithRowCount,\n isViewportMenusAction,\n isVisualLinksAction,\n itemsOrOrderChanged,\n logger,\n Range,\n StaleUpdateError,\n throttle,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport ConnectionManager from \"./ConnectionManager\";\nimport { isDataSourceConfigMessage } from \"./data-source\";\n\ntype RangeRequest = (range: VuuRange) => void;\n\nconst SESSION_TABLE_MSG_COLUMN = \"vuuMsg\";\n\nconst { info, infoEnabled } = logger(\"VuuDataSource\");\n\n/**\n * Autosubscribe columns are always included in a subscription.\n * The same columns may or may not be included in subscription\n * requested by client and client may change column list over\n * lifetime of dataSource. Always make sure we include the\n * autosubscription columns, but never repeat them\n */\nconst combineColumnsWithAutosubscribeColumns = (\n columns: string[],\n autosubscribeColumns: string[] = [],\n) => {\n if (autosubscribeColumns.length === 0) {\n return columns;\n } else {\n const out = columns.slice();\n autosubscribeColumns.forEach((name) => {\n if (!out.includes(name)) {\n out.push(name);\n }\n });\n return out;\n }\n};\n\n/*---------------------------------------------------------------------\n A VuuDataSource manages a single subscription via the ServerProxy\n ---------------------------------------------------------------------*/\nexport class VuuDataSource extends BaseDataSource implements DataSource {\n private bufferSize: number;\n private server: ServerAPI | null = null;\n rangeRequest: RangeRequest;\n\n /**\n * this is the combined set of regular columns and autosubscribe columns\n */\n #allColumns: undefined | string[];\n #autosubscribeColumns: string[] = [];\n #pendingVisualLink?: LinkDescriptorWithLabel;\n #links: LinkDescriptorWithLabel[] | undefined;\n #menu: VuuMenu | undefined;\n #optimize: OptimizeStrategy = \"throttle\";\n #selectedRowsCount = 0;\n #sessionDataSource: DataSource | undefined = undefined;\n #status: DataSourceStatus = \"initialising\";\n #tableSchema: TableSchema | undefined;\n\n public table: VuuTable;\n\n constructor(props: DataSourceConstructorProps) {\n super(props);\n\n const { bufferSize = 100, table, visualLink } = props;\n\n if (!table)\n throw Error(\"RemoteDataSource constructor called without table\");\n\n this.bufferSize = bufferSize;\n this.table = table;\n\n this.#pendingVisualLink = visualLink;\n\n // this.rangeRequest = this.throttleRangeRequest;\n this.rangeRequest = this.rawRangeRequest;\n\n if (props.autosubscribeColumns) {\n this.#autosubscribeColumns = props.autosubscribeColumns;\n this.#allColumns = combineColumnsWithAutosubscribeColumns(\n super.columns,\n props.autosubscribeColumns,\n );\n }\n }\n\n async subscribe(\n subscribeProps: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n // super.subscribe(subscribeProps, this.handleMessageFromServer);\n super.subscribe(subscribeProps, callback);\n const { viewport = this.viewport || (this.viewport = uuid()) } =\n subscribeProps;\n\n console.log(`[VuuDataSource] subscribe ${this.viewport}`);\n\n if (\n this.#status === \"disabled\" ||\n this.#status === \"disabling\" ||\n this.#status === \"enabling\"\n ) {\n // We can subscribe to a disabled dataSource. No request will be\n // sent to server to create a new VP, just to enable the existing one.\n // The current subscribing client becomes the subscription owner\n this.enable(callback);\n return;\n }\n\n if (this.#status !== \"initialising\" && this.#status !== \"unsubscribed\") {\n throw Error(\n `[VuuDataSource] invalid status ${this.#status} for subscribe`,\n );\n }\n\n this.#status = \"subscribing\";\n\n this.server = await ConnectionManager.serverAPI;\n\n const { bufferSize } = this;\n\n const { columns, ...dataSourceConfig } = combineFilters(this.config);\n\n // TODO and await response here\n this.server?.subscribe(\n {\n ...dataSourceConfig,\n bufferSize,\n columns: this.columns,\n range: this._range.withBuffer,\n table: this.table,\n title: this._title,\n viewport,\n },\n this.handleMessageFromServer,\n );\n }\n\n handleMessageFromServer = (message: DataSourceCallbackMessage) => {\n if (message.type === \"subscribed\") {\n this.#status = \"subscribed\";\n this.tableSchema = message.tableSchema;\n this._clientCallback?.(message);\n if (this.#pendingVisualLink) {\n this.visualLink = this.#pendingVisualLink;\n this.#pendingVisualLink = undefined;\n }\n this.emit(\"subscribed\", message);\n } else if (message.type === \"disabled\") {\n this.#status = \"disabled\";\n } else if (message.type === \"enabled\") {\n this.#status = \"subscribed\";\n this.emit(\"enabled\", this.viewport);\n } else if (isDataSourceConfigMessage(message)) {\n // This is an ACK for a CHANGE_VP message. Nothing to do here. We need\n // to wait for data to be returned before we can consider the change\n // to be in effect.\n return;\n } else if (message.type === \"debounce-begin\") {\n this.optimize = \"debounce\";\n } else {\n if (message.type === \"viewport-update\") {\n if (message.size !== undefined && message.size !== this.size) {\n this.size = message.size;\n this.emit(\"resize\", message.size);\n }\n\n if (\n Array.isArray(message.rows) &&\n message.rows.length > 0 &&\n this.#sessionDataSource\n ) {\n this.emit(\"remote-update-during-local-edit\", message.rows);\n console.log(\n `updates incoming whilst edit in progress ${this.viewport}`,\n );\n console.table(message.rows);\n return;\n }\n } else if (message.type === \"viewport-clear\") {\n this.size = 0;\n this.emit(\"resize\", 0);\n }\n // This is used to remove any progress indication from the UI. We wait for actual data rather than\n // just the CHANGE_VP_SUCCESS ack as there is often a delay between receiving the ack and the data.\n // It may be a SIZE only message, eg in the case of removing a groupBy column from a multi-column\n // groupby, where no tree nodes are expanded.\n if (this.isAwaitingConfirmationOfConfigChange) {\n this.confirmConfigChange();\n }\n\n if (isViewportMenusAction(message)) {\n this.#menu = message.menu;\n } else if (isVisualLinksAction(message)) {\n this.#links = message.links as LinkDescriptorWithLabel[];\n } else {\n if (infoEnabled && message.type === \"viewport-update\") {\n info(\n `handleMessageFromServer<viewport-update> range (${message.range?.from}:${message.range?.to}) rows ${message.rows?.at(0)?.[0]} - ${message.rows?.at(-1)?.[0]}`,\n );\n }\n this._clientCallback?.(message);\n }\n\n if (this.optimize === \"debounce\") {\n this.revertDebounce();\n }\n }\n };\n\n handleSessionMessageFromServer = (msg: DataSourceCallbackMessage) => {\n if (msg.type === \"subscribed\") {\n console.log(`[VuuDataSource subscribed to session table]`);\n } else if (msg.type === \"viewport-update\") {\n if (msg.size !== undefined && msg.size !== this.size) {\n this.size = msg.size;\n this.emit(\"resize\", msg.size);\n }\n console.log(`[VuuDataSource] clientCallback with ${msg.type}`);\n this._clientCallback?.(msg);\n }\n };\n\n unsubscribe() {\n if (this.#status !== \"unsubscribed\") {\n info?.(`unsubscribe #${this.viewport}`);\n if (this.viewport) {\n this.server?.unsubscribe(this.viewport);\n this.emit(\"unsubscribed\", this.viewport);\n }\n this.server?.destroy(this.viewport);\n this.server = null;\n this.removeAllListeners();\n this.#status = \"unsubscribed\";\n this.viewport = \"\";\n this.range = Range(0, 0);\n }\n }\n\n suspend(\n escalateToDisable = this._defaultSuspenseProps.escalateToDisable,\n escalateDelay = this._defaultSuspenseProps.escalateDelay,\n ) {\n if (this.#status !== \"unsubscribed\") {\n info?.(`suspend #${this.viewport}, current status ${this.#status}`);\n if (this.viewport) {\n this.#status = \"suspended\";\n this.server?.send({\n escalateDelay,\n escalateToDisable,\n type: \"suspend\",\n viewport: this.viewport,\n });\n this.emit(\"suspended\", this.viewport);\n }\n }\n }\n\n /**\n * Tell the server we wish to resume receiving messages. Server will send a\n * snapshot of rows currently in cache. This can be used to update with\n * latest data, e.g after an edit session during which we might have ignored\n * some updates.\n */\n private sendResumeMessage() {\n this.server?.send({\n type: \"resume\",\n viewport: this.viewport,\n });\n }\n\n resume(callback?: DataSourceSubscribeCallback) {\n const isDisabled = this.#status.startsWith(\"disabl\");\n const isSuspended = this.#status === \"suspended\";\n info?.(`resume #${this.viewport}, current status ${this.#status}`);\n if (callback) {\n this._clientCallback = callback;\n }\n if (this.viewport) {\n if (isDisabled) {\n this.enable();\n } else if (isSuspended) {\n this.sendResumeMessage();\n this.#status = \"subscribed\";\n this.emit(\"resumed\", this.viewport);\n\n if (this.#selectedRowsCount > 0) {\n this.emit(\"row-selection\", this.#selectedRowsCount);\n }\n }\n }\n }\n\n freeze() {\n super.freeze();\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"FREEZE_VP\",\n });\n }\n }\n\n unfreeze() {\n super.unfreeze();\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"UNFREEZE_VP\",\n });\n }\n }\n\n disable() {\n info?.(`disable #${this.viewport}, current status ${this.#status}`);\n if (this.viewport) {\n this.#status = \"disabling\";\n this.server?.send({\n viewport: this.viewport,\n type: \"disable\",\n });\n this.emit(\"disabled\", this.viewport);\n }\n }\n\n enable(callback?: DataSourceSubscribeCallback) {\n info?.(`enable #${this.viewport}, current status ${this.#status}`);\n if (\n this.viewport &&\n (this.#status === \"disabled\" || this.#status === \"disabling\")\n ) {\n this.#status = \"enabling\";\n if (callback) {\n this._clientCallback = callback;\n }\n this.server?.send({\n viewport: this.viewport,\n type: \"enable\",\n });\n // TODO is this a bit premature ?\n this.emit(\"enabled\", this.viewport);\n }\n }\n\n async select(selectRequest: Omit<SelectRequest, \"vpId\">) {\n if (this.viewport && this.server) {\n const response = await this.server.select({\n ...selectRequest,\n vpId: this.viewport,\n } as SelectRequest);\n if (isSelectSuccessWithRowCount(response)) {\n console.log(\n `[VuuDataSource] select selectedRowCount ${response.selectedRowCount}`,\n );\n this.#selectedRowsCount = response.selectedRowCount;\n this.emit(\"row-selection\", response.selectedRowCount);\n } else {\n console.warn(`select error`);\n }\n }\n }\n\n openTreeNode(keyOrIndex: string | number) {\n if (this.viewport) {\n const [key, index] =\n typeof keyOrIndex === \"string\" ? [keyOrIndex] : [undefined, keyOrIndex];\n this.server?.send({\n index,\n key,\n type: \"openTreeNode\",\n viewport: this.viewport,\n });\n }\n }\n\n closeTreeNode(keyOrIndex: string | number) {\n if (this.viewport) {\n const [key, index] =\n typeof keyOrIndex === \"string\" ? [keyOrIndex] : [undefined, keyOrIndex];\n this.server?.send({\n index,\n key,\n type: \"closeTreeNode\",\n viewport: this.viewport,\n });\n }\n }\n\n //TODO is this going to be confusing - the lack of symmetry between set and get columns\n // when there are autoSubscribe columns ?\n // alternative would be an allColumns prop, but every datasource would then have to add it.\n get columns() {\n return this.#allColumns ?? super.columns;\n }\n\n set columns(columns: string[]) {\n super.columns = columns;\n if (this.#autosubscribeColumns.length) {\n this.#allColumns = combineColumnsWithAutosubscribeColumns(\n columns,\n this.#autosubscribeColumns,\n );\n }\n }\n\n get tableSchema() {\n return this.#tableSchema;\n }\n\n set tableSchema(tableSchema: TableSchema | undefined) {\n this.#tableSchema = tableSchema;\n // TOSO emit an event\n }\n\n get links() {\n return this.#links;\n }\n\n get menu() {\n return this.#menu;\n }\n\n get status() {\n return this.#status;\n }\n\n get optimize() {\n return this.#optimize;\n }\n\n set optimize(optimize: OptimizeStrategy) {\n if (optimize !== this.#optimize) {\n this.#optimize = optimize;\n switch (optimize) {\n case \"none\":\n this.rangeRequest = this.rawRangeRequest;\n break;\n case \"debounce\":\n this.rangeRequest = this.debounceRangeRequest;\n break;\n case \"throttle\":\n this.rangeRequest = this.throttleRangeRequest;\n break;\n }\n this.emit(\"optimize\", optimize);\n }\n }\n\n private revertDebounce = debounce(() => {\n this.optimize = \"throttle\";\n }, 100);\n\n get selectedRowsCount() {\n return this.#selectedRowsCount;\n }\n\n private rawRangeRequest: RangeRequest = (range) => {\n if (this.viewport && this.server) {\n this.server.send({\n viewport: this.viewport,\n type: \"setViewRange\",\n range,\n });\n }\n };\n\n private debounceRangeRequest: RangeRequest = debounce((range: VuuRange) => {\n if (this.viewport && this.server) {\n this.server.send({\n viewport: this.viewport,\n type: \"setViewRange\",\n range,\n });\n }\n }, 50);\n\n private throttleRangeRequest: RangeRequest = throttle((range: VuuRange) => {\n if (this.viewport && this.server) {\n this.server.send({\n viewport: this.viewport,\n type: \"setViewRange\",\n range,\n });\n }\n }, 80);\n\n get config() {\n return super.config;\n }\n\n set config(config: WithBaseFilter<WithFullConfig>) {\n const { noChanges, columnsChanged } = isConfigChanged(this.config, config);\n if (!noChanges) {\n super.config = config;\n\n const { columns, ...dataSourceConfig } = combineFilters(this.config);\n const serverConfig: WithFullConfig = {\n ...dataSourceConfig,\n columns: combineColumnsWithAutosubscribeColumns(\n columns,\n this.#autosubscribeColumns,\n ),\n };\n\n if (columnsChanged && this.#autosubscribeColumns.length) {\n this.#allColumns = combineColumnsWithAutosubscribeColumns(\n columns,\n this.#autosubscribeColumns,\n );\n }\n\n this.server?.send({\n viewport: this.viewport,\n type: \"config\",\n config: serverConfig,\n });\n }\n }\n\n set impendingConfig(config: WithBaseFilter<WithFullConfig>) {\n if (config !== this.config) {\n super.impendingConfig = config;\n this.server?.send({\n viewport: this.viewport,\n type: \"config\",\n config: combineFilters(this.config),\n });\n }\n }\n\n get groupBy() {\n return this._configWithVisualLink.groupBy;\n }\n\n set groupBy(groupBy: VuuGroupBy) {\n if (itemsOrOrderChanged(this.groupBy, groupBy)) {\n const wasGrouped = this.groupBy.length > 0;\n\n this.impendingConfig = {\n ...this._configWithVisualLink,\n groupBy,\n };\n\n if (!wasGrouped && groupBy.length > 0 && this.viewport) {\n // clear data from table whilst we wait for grouped data from server\n this._clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n type: \"viewport-update\",\n size: 0,\n rows: [],\n });\n }\n }\n }\n\n get title() {\n return super.title || `${this.table.module} ${this.table.table}`;\n }\n\n set title(title: string) {\n super.title = title;\n if (this.viewport && title) {\n // This message doesn't actually trigger a message to Vuu server\n // it will be used to recompute visual link labels\n this.server?.send({\n type: \"setTitle\",\n title,\n viewport: this.viewport,\n });\n }\n }\n\n get visualLink() {\n return this._configWithVisualLink.visualLink;\n }\n\n set visualLink(visualLink: LinkDescriptorWithLabel | undefined) {\n this._configWithVisualLink = {\n ...this._configWithVisualLink,\n visualLink,\n };\n\n if (visualLink) {\n const {\n parentClientVpId,\n link: { fromColumn, toColumn },\n } = visualLink;\n\n if (this.viewport) {\n this.server\n ?.rpcCall<DataSourceVisualLinkCreatedMessage>({\n childColumnName: fromColumn,\n childVpId: this.viewport,\n parentColumnName: toColumn,\n parentVpId: parentClientVpId,\n type: \"CREATE_VISUAL_LINK\",\n } as VuuCreateVisualLink)\n .then((response) => {\n this.emit(\"visual-link-created\", response);\n });\n }\n } else {\n if (this.viewport) {\n this.server\n ?.rpcCall({\n type: \"REMOVE_VISUAL_LINK\",\n childVpId: this.viewport,\n })\n .then(() => {\n this.emit(\"visual-link-removed\");\n });\n }\n }\n\n this.emit(\"config\", this._configWithVisualLink, this.range);\n }\n\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n createSessionDataSource(sessionTable: VuuTable) {\n //TODO filters, sort etc\n return new VuuDataSource({\n columns: this.columns.concat(SESSION_TABLE_MSG_COLUMN),\n table: sessionTable,\n });\n }\n\n async beginEditSession(editSessionMode: EditSessionMode = \"all-rows\") {\n const rpcResponse = await this?.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"beginEditSession\",\n params: {\n editSessionMode,\n },\n });\n\n if (isRpcSuccess(rpcResponse)) {\n const { table: sessionTable } = rpcResponse.data as { table: VuuTable };\n\n if (isInlineEditingSession(editSessionMode)) {\n this.#sessionDataSource = new VuuDataSource({\n ...this.config,\n table: sessionTable,\n viewport: sessionTable.table,\n });\n\n this.columns = this.columns.concat(\"vuuMsg\");\n\n this.#sessionDataSource.subscribe(\n {\n range: this.range,\n },\n this.handleSessionMessageFromServer,\n );\n } else {\n return new VuuDataSource({\n ...this.config,\n table: sessionTable,\n viewport: sessionTable.table,\n });\n }\n\n // we need to route messages from the session datasource to listening\n // client whilst still monitoring responses on the source table to which\n // we are currently subscribed.\n } else {\n throw Error(\n `[VuuDataSource] beginEditSession ${rpcResponse.errorMessage}`,\n );\n ///\n }\n }\n\n async editCell(key: string, column: string, data: VuuRowDataItemType) {\n console.log(\n `[VuuDataSource] editCell ${this.#sessionDataSource?.viewport} rowKey ${key}, column ${column}, value ${data}`,\n );\n\n const rpcHost = this.#sessionDataSource ?? this;\n\n return rpcHost.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"editCell\",\n params: {\n column,\n data,\n key,\n },\n });\n }\n\n async endEditSession(saveChanges = false, force = false) {\n console.log(`[VuuDataSource] endEditSession saveChanges ${saveChanges}`);\n\n const type = \"RPC_REQUEST\";\n const rpcName = \"endEditSession\";\n\n const sessionDataSource = this.#sessionDataSource;\n\n const rpcHost = sessionDataSource ?? this;\n\n if (sessionDataSource) {\n // timing is important here. By breaking this reference before\n // we send the endEdit RPC call, the application of session edits\n // to the source table will be handled correctly.\n this.#sessionDataSource = undefined;\n }\n\n const rpcResponse = await rpcHost.rpcRequest?.(\n saveChanges\n ? { type, rpcName, params: { save: true, force } }\n : { type, rpcName, params: {} },\n );\n\n if (isRpcSuccess(rpcResponse)) {\n sessionDataSource?.unsubscribe();\n } else {\n if (rpcResponse?.errorMessage === \"stale update\") {\n this.#sessionDataSource = sessionDataSource;\n // sessionDataSource?.unsubscribe();\n throw new StaleUpdateError(rpcResponse.errorMessage);\n } else {\n throw Error(\"unknown error\");\n }\n }\n\n this.sendResumeMessage();\n }\n\n async rpcRequest(rpcRequest: Omit<VuuRpcServiceRequest, \"context\">) {\n if (this.viewport && this.server) {\n return this.server?.rpcCall<RpcResultSuccess | RpcResultError>({\n ...rpcRequest,\n context: { type: \"VIEWPORT_CONTEXT\", viewPortId: this.viewport },\n } as VuuRpcServiceRequest);\n } else {\n throw Error(`rpcCall server or viewport are undefined`);\n }\n }\n\n async menuRpcCall(rpcRequest: Omit<VuuRpcMenuRequest, \"vpId\">) {\n if (this.viewport) {\n return this.server?.rpcCall<MenuRpcResponse>({\n ...rpcRequest,\n vpId: this.viewport,\n } as VuuRpcMenuRequest);\n }\n }\n\n insertRow() {\n return Promise.resolve(\"not supported\");\n // return this.menuRpcCall(vuuAddRowRequest(rowKey, data)).then((response) => {\n // if (response?.error) {\n // return response.error;\n // } else {\n // return true;\n // }\n // });\n }\n deleteRow() {\n return Promise.resolve(\"not supported\");\n // return this.menuRpcCall(vuuDeleteRowRequest(rowKey)).then((response) => {\n // if (response?.error) {\n // return response.error;\n // } else {\n // return true;\n // }\n // });\n }\n}\n"],"names":["logger","BaseDataSource","isDataSourceConfigMessage","isViewportMenusAction","isVisualLinksAction","debounce","throttle","uuid","combineFilters","Range","isSelectSuccessWithRowCount","isConfigChanged","itemsOrOrderChanged","isRpcSuccess","isInlineEditingSession","StaleUpdateError"],"mappings":"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"}
1
+ {"version":3,"file":"VuuDataSource.js","sources":["../../../packages/vuu-data-remote/src/VuuDataSource.ts"],"sourcesContent":["import type {\n DataSource,\n DataSourceCallbackMessage,\n DataSourceConstructorProps,\n DataSourceStatus,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n DataSourceVisualLinkCreatedMessage,\n EditSessionMode,\n OptimizeStrategy,\n ServerAPI,\n TableSchema,\n WithBaseFilter,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n LinkDescriptorWithLabel,\n RpcResultError,\n RpcResultSuccess,\n SelectRequest,\n VuuCreateVisualLink,\n VuuGroupBy,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n VuuRpcMenuRequest,\n VuuRpcResponse,\n VuuRpcServiceRequest,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { MenuRpcResponse } from \"@vuu-ui/vuu-data-types\";\nimport {\n BaseDataSource,\n combineFilters,\n debounce,\n isConfigChanged,\n isInlineEditingSession,\n isRpcSuccess,\n isSelectSuccessWithRowCount,\n isViewportMenusAction,\n isVisualLinksAction,\n itemsOrOrderChanged,\n logger,\n Range,\n throttle,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport ConnectionManager from \"./ConnectionManager\";\nimport { isDataSourceConfigMessage } from \"./data-source\";\n\ntype RangeRequest = (range: VuuRange) => void;\n\nconst { info, infoEnabled } = logger(\"VuuDataSource\");\n\n/**\n * Autosubscribe columns are always included in a subscription.\n * The same columns may or may not be included in subscription\n * requested by client and client may change column list over\n * lifetime of dataSource. Always make sure we include the\n * autosubscription columns, but never repeat them\n */\nconst combineColumnsWithAutosubscribeColumns = (\n columns: string[],\n autosubscribeColumns: string[] = [],\n) => {\n if (autosubscribeColumns.length === 0) {\n return columns;\n } else {\n const out = columns.slice();\n autosubscribeColumns.forEach((name) => {\n if (!out.includes(name)) {\n out.push(name);\n }\n });\n return out;\n }\n};\n\n/*---------------------------------------------------------------------\n A VuuDataSource manages a single subscription via the ServerProxy\n ---------------------------------------------------------------------*/\nexport class VuuDataSource extends BaseDataSource implements DataSource {\n private bufferSize: number;\n private server: ServerAPI | null = null;\n rangeRequest: RangeRequest;\n\n /**\n * this is the combined set of regular columns and autosubscribe columns\n */\n #allColumns: undefined | string[];\n #autosubscribeColumns: string[] = [];\n #pendingVisualLink?: LinkDescriptorWithLabel;\n #links: LinkDescriptorWithLabel[] | undefined;\n #menu: VuuMenu | undefined;\n #optimize: OptimizeStrategy = \"throttle\";\n #selectedRowsCount = 0;\n #sessionDataSource: DataSource | undefined = undefined;\n #status: DataSourceStatus = \"initialising\";\n #tableSchema: TableSchema | undefined;\n\n public table: VuuTable;\n\n constructor(props: DataSourceConstructorProps) {\n super(props);\n\n const { bufferSize = 100, table, visualLink } = props;\n\n if (!table)\n throw Error(\"RemoteDataSource constructor called without table\");\n\n this.bufferSize = bufferSize;\n this.table = table;\n\n this.#pendingVisualLink = visualLink;\n\n // this.rangeRequest = this.throttleRangeRequest;\n this.rangeRequest = this.rawRangeRequest;\n\n if (props.autosubscribeColumns) {\n this.#autosubscribeColumns = props.autosubscribeColumns;\n this.#allColumns = combineColumnsWithAutosubscribeColumns(\n super.columns,\n props.autosubscribeColumns,\n );\n }\n }\n\n async subscribe(\n subscribeProps: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n // super.subscribe(subscribeProps, this.handleMessageFromServer);\n super.subscribe(subscribeProps, callback);\n const { viewport = this.viewport || (this.viewport = uuid()) } =\n subscribeProps;\n\n console.log(`[VuuDataSource] subscribe ${this.viewport}`);\n\n if (\n this.#status === \"disabled\" ||\n this.#status === \"disabling\" ||\n this.#status === \"enabling\"\n ) {\n // We can subscribe to a disabled dataSource. No request will be\n // sent to server to create a new VP, just to enable the existing one.\n // The current subscribing client becomes the subscription owner\n this.enable(callback);\n return;\n }\n\n if (this.#status !== \"initialising\" && this.#status !== \"unsubscribed\") {\n throw Error(\n `[VuuDataSource] invalid status ${this.#status} for subscribe`,\n );\n }\n\n this.#status = \"subscribing\";\n\n this.server = await ConnectionManager.serverAPI;\n\n const { bufferSize } = this;\n\n const { columns, ...dataSourceConfig } = combineFilters(this.config);\n\n // TODO and await response here\n this.server?.subscribe(\n {\n ...dataSourceConfig,\n bufferSize,\n columns: this.columns,\n range: this._range.withBuffer,\n table: this.table,\n title: this._title,\n viewport,\n },\n this.handleMessageFromServer,\n );\n }\n\n handleMessageFromServer = (message: DataSourceCallbackMessage) => {\n if (message.type === \"subscribed\") {\n this.#status = \"subscribed\";\n this.tableSchema = message.tableSchema;\n this._clientCallback?.(message);\n if (this.#pendingVisualLink) {\n this.visualLink = this.#pendingVisualLink;\n this.#pendingVisualLink = undefined;\n }\n this.emit(\"subscribed\", message);\n } else if (message.type === \"disabled\") {\n this.#status = \"disabled\";\n } else if (message.type === \"enabled\") {\n this.#status = \"subscribed\";\n this.emit(\"enabled\", this.viewport);\n } else if (isDataSourceConfigMessage(message)) {\n // This is an ACK for a CHANGE_VP message. Nothing to do here. We need\n // to wait for data to be returned before we can consider the change\n // to be in effect.\n return;\n } else if (message.type === \"debounce-begin\") {\n this.optimize = \"debounce\";\n } else {\n if (\n message.type === \"viewport-update\" &&\n message.size !== undefined &&\n message.size !== this.size\n ) {\n this.size = message.size;\n this.emit(\"resize\", message.size);\n } else if (message.type === \"viewport-clear\") {\n this.size = 0;\n this.emit(\"resize\", 0);\n }\n // This is used to remove any progress indication from the UI. We wait for actual data rather than\n // just the CHANGE_VP_SUCCESS ack as there is often a delay between receiving the ack and the data.\n // It may be a SIZE only message, eg in the case of removing a groupBy column from a multi-column\n // groupby, where no tree nodes are expanded.\n if (this.isAwaitingConfirmationOfConfigChange) {\n this.confirmConfigChange();\n }\n\n if (isViewportMenusAction(message)) {\n this.#menu = message.menu;\n } else if (isVisualLinksAction(message)) {\n this.#links = message.links as LinkDescriptorWithLabel[];\n } else {\n if (infoEnabled && message.type === \"viewport-update\") {\n info(\n `handleMessageFromServer<viewport-update> range (${message.range?.from}:${message.range?.to}) rows ${message.rows?.at(0)?.[0]} - ${message.rows?.at(-1)?.[0]}`,\n );\n }\n this._clientCallback?.(message);\n }\n\n if (this.optimize === \"debounce\") {\n this.revertDebounce();\n }\n }\n };\n\n handleSessionMessageFromServer = (msg: DataSourceCallbackMessage) => {\n if (msg.type === \"subscribed\") {\n console.log(`[VuuDataSource subscribed to session table]`);\n } else if (msg.type === \"viewport-update\") {\n if (msg.size !== undefined && msg.size !== this.size) {\n this.size = msg.size;\n this.emit(\"resize\", msg.size);\n }\n console.log(`[VuuDataSource] clientCallback with ${msg.type}`);\n this._clientCallback?.(msg);\n }\n };\n\n unsubscribe() {\n if (this.#status !== \"unsubscribed\") {\n info?.(`unsubscribe #${this.viewport}`);\n if (this.viewport) {\n this.server?.unsubscribe(this.viewport);\n this.emit(\"unsubscribed\", this.viewport);\n }\n this.server?.destroy(this.viewport);\n this.server = null;\n this.removeAllListeners();\n this.#status = \"unsubscribed\";\n this.viewport = \"\";\n this.range = Range(0, 0);\n }\n }\n\n suspend(\n escalateToDisable = this._defaultSuspenseProps.escalateToDisable,\n escalateDelay = this._defaultSuspenseProps.escalateDelay,\n ) {\n if (this.#status !== \"unsubscribed\") {\n info?.(`suspend #${this.viewport}, current status ${this.#status}`);\n if (this.viewport) {\n this.#status = \"suspended\";\n this.server?.send({\n escalateDelay,\n escalateToDisable,\n type: \"suspend\",\n viewport: this.viewport,\n });\n this.emit(\"suspended\", this.viewport);\n }\n }\n }\n\n resume(callback?: DataSourceSubscribeCallback) {\n const isDisabled = this.#status.startsWith(\"disabl\");\n const isSuspended = this.#status === \"suspended\";\n info?.(`resume #${this.viewport}, current status ${this.#status}`);\n if (callback) {\n this._clientCallback = callback;\n }\n if (this.viewport) {\n if (isDisabled) {\n this.enable();\n } else if (isSuspended) {\n this.server?.send({\n type: \"resume\",\n viewport: this.viewport,\n });\n this.#status = \"subscribed\";\n this.emit(\"resumed\", this.viewport);\n\n if (this.#selectedRowsCount > 0) {\n this.emit(\"row-selection\", this.#selectedRowsCount);\n }\n }\n }\n }\n\n freeze() {\n super.freeze();\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"FREEZE_VP\",\n });\n }\n }\n\n unfreeze() {\n super.unfreeze();\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"UNFREEZE_VP\",\n });\n }\n }\n\n disable() {\n info?.(`disable #${this.viewport}, current status ${this.#status}`);\n if (this.viewport) {\n this.#status = \"disabling\";\n this.server?.send({\n viewport: this.viewport,\n type: \"disable\",\n });\n this.emit(\"disabled\", this.viewport);\n }\n }\n\n enable(callback?: DataSourceSubscribeCallback) {\n info?.(`enable #${this.viewport}, current status ${this.#status}`);\n if (\n this.viewport &&\n (this.#status === \"disabled\" || this.#status === \"disabling\")\n ) {\n this.#status = \"enabling\";\n if (callback) {\n this._clientCallback = callback;\n }\n this.server?.send({\n viewport: this.viewport,\n type: \"enable\",\n });\n // TODO is this a bit premature ?\n this.emit(\"enabled\", this.viewport);\n }\n }\n\n async select(selectRequest: Omit<SelectRequest, \"vpId\">) {\n if (this.viewport && this.server) {\n const response = await this.server.select({\n ...selectRequest,\n vpId: this.viewport,\n } as SelectRequest);\n if (isSelectSuccessWithRowCount(response)) {\n console.log(\n `[VuuDataSource] select selectedRowCount ${response.selectedRowCount}`,\n );\n this.#selectedRowsCount = response.selectedRowCount;\n this.emit(\"row-selection\", response.selectedRowCount);\n } else {\n console.warn(`select error`);\n }\n }\n }\n\n openTreeNode(keyOrIndex: string | number) {\n if (this.viewport) {\n const [key, index] =\n typeof keyOrIndex === \"string\" ? [keyOrIndex] : [undefined, keyOrIndex];\n this.server?.send({\n index,\n key,\n type: \"openTreeNode\",\n viewport: this.viewport,\n });\n }\n }\n\n closeTreeNode(keyOrIndex: string | number) {\n if (this.viewport) {\n const [key, index] =\n typeof keyOrIndex === \"string\" ? [keyOrIndex] : [undefined, keyOrIndex];\n this.server?.send({\n index,\n key,\n type: \"closeTreeNode\",\n viewport: this.viewport,\n });\n }\n }\n\n //TODO is this going to be confusing - the lack of symmetry between set and get columns\n // when there are autoSubscribe columns ?\n // alternative would be an allColumns prop, but every datasource would then have to add it.\n get columns() {\n return this.#allColumns ?? super.columns;\n }\n\n set columns(columns: string[]) {\n super.columns = columns;\n if (this.#autosubscribeColumns.length) {\n this.#allColumns = combineColumnsWithAutosubscribeColumns(\n columns,\n this.#autosubscribeColumns,\n );\n }\n }\n\n get tableSchema() {\n return this.#tableSchema;\n }\n\n set tableSchema(tableSchema: TableSchema | undefined) {\n this.#tableSchema = tableSchema;\n // TOSO emit an event\n }\n\n get links() {\n return this.#links;\n }\n\n get menu() {\n return this.#menu;\n }\n\n get status() {\n return this.#status;\n }\n\n get optimize() {\n return this.#optimize;\n }\n\n set optimize(optimize: OptimizeStrategy) {\n if (optimize !== this.#optimize) {\n this.#optimize = optimize;\n switch (optimize) {\n case \"none\":\n this.rangeRequest = this.rawRangeRequest;\n break;\n case \"debounce\":\n this.rangeRequest = this.debounceRangeRequest;\n break;\n case \"throttle\":\n this.rangeRequest = this.throttleRangeRequest;\n break;\n }\n this.emit(\"optimize\", optimize);\n }\n }\n\n private revertDebounce = debounce(() => {\n this.optimize = \"throttle\";\n }, 100);\n\n get selectedRowsCount() {\n return this.#selectedRowsCount;\n }\n\n private rawRangeRequest: RangeRequest = (range) => {\n if (this.viewport && this.server) {\n this.server.send({\n viewport: this.viewport,\n type: \"setViewRange\",\n range,\n });\n }\n };\n\n private debounceRangeRequest: RangeRequest = debounce((range: VuuRange) => {\n if (this.viewport && this.server) {\n this.server.send({\n viewport: this.viewport,\n type: \"setViewRange\",\n range,\n });\n }\n }, 50);\n\n private throttleRangeRequest: RangeRequest = throttle((range: VuuRange) => {\n if (this.viewport && this.server) {\n this.server.send({\n viewport: this.viewport,\n type: \"setViewRange\",\n range,\n });\n }\n }, 80);\n\n get config() {\n return super.config;\n }\n\n set config(config: WithBaseFilter<WithFullConfig>) {\n const { noChanges, columnsChanged } = isConfigChanged(this.config, config);\n if (!noChanges) {\n super.config = config;\n\n const { columns, ...dataSourceConfig } = combineFilters(this.config);\n const serverConfig: WithFullConfig = {\n ...dataSourceConfig,\n columns: combineColumnsWithAutosubscribeColumns(\n columns,\n this.#autosubscribeColumns,\n ),\n };\n\n if (columnsChanged && this.#autosubscribeColumns.length) {\n this.#allColumns = combineColumnsWithAutosubscribeColumns(\n columns,\n this.#autosubscribeColumns,\n );\n }\n\n this.server?.send({\n viewport: this.viewport,\n type: \"config\",\n config: serverConfig,\n });\n }\n }\n\n set impendingConfig(config: WithBaseFilter<WithFullConfig>) {\n if (config !== this.config) {\n super.impendingConfig = config;\n this.server?.send({\n viewport: this.viewport,\n type: \"config\",\n config: combineFilters(this.config),\n });\n }\n }\n\n get groupBy() {\n return this._configWithVisualLink.groupBy;\n }\n\n set groupBy(groupBy: VuuGroupBy) {\n if (itemsOrOrderChanged(this.groupBy, groupBy)) {\n const wasGrouped = this.groupBy.length > 0;\n\n this.impendingConfig = {\n ...this._configWithVisualLink,\n groupBy,\n };\n\n if (!wasGrouped && groupBy.length > 0 && this.viewport) {\n // clear data from table whilst we wait for grouped data from server\n this._clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n type: \"viewport-update\",\n size: 0,\n rows: [],\n });\n }\n }\n }\n\n get title() {\n return super.title || `${this.table.module} ${this.table.table}`;\n }\n\n set title(title: string) {\n super.title = title;\n if (this.viewport && title) {\n // This message doesn't actually trigger a message to Vuu server\n // it will be used to recompute visual link labels\n this.server?.send({\n type: \"setTitle\",\n title,\n viewport: this.viewport,\n });\n }\n }\n\n get visualLink() {\n return this._configWithVisualLink.visualLink;\n }\n\n set visualLink(visualLink: LinkDescriptorWithLabel | undefined) {\n this._configWithVisualLink = {\n ...this._configWithVisualLink,\n visualLink,\n };\n\n if (visualLink) {\n const {\n parentClientVpId,\n link: { fromColumn, toColumn },\n } = visualLink;\n\n if (this.viewport) {\n this.server\n ?.rpcCall<DataSourceVisualLinkCreatedMessage>({\n childColumnName: fromColumn,\n childVpId: this.viewport,\n parentColumnName: toColumn,\n parentVpId: parentClientVpId,\n type: \"CREATE_VISUAL_LINK\",\n } as VuuCreateVisualLink)\n .then((response) => {\n this.emit(\"visual-link-created\", response);\n });\n }\n } else {\n if (this.viewport) {\n this.server\n ?.rpcCall({\n type: \"REMOVE_VISUAL_LINK\",\n childVpId: this.viewport,\n })\n .then(() => {\n this.emit(\"visual-link-removed\");\n });\n }\n }\n\n this.emit(\"config\", this._configWithVisualLink, this.range);\n }\n\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n createSessionDataSource(sessionTable: VuuTable) {\n //TODO filters, sort etc\n return new VuuDataSource({ columns: this.columns, table: sessionTable });\n }\n\n async beginEditSession(editSessionMode: EditSessionMode = \"inline-all-rows\") {\n const rpcResponse = await this?.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"beginEditSession\",\n params: {\n editSessionMode,\n },\n });\n\n if (isRpcSuccess(rpcResponse)) {\n const { table: sessionTable } = rpcResponse.data as { table: VuuTable };\n\n if (isInlineEditingSession(editSessionMode)) {\n this.#sessionDataSource = new VuuDataSource({\n columns: this.columns,\n table: sessionTable,\n viewport: sessionTable.table,\n });\n\n this.#sessionDataSource.subscribe(\n {\n range: this.range,\n },\n this.handleSessionMessageFromServer,\n );\n } else {\n return new VuuDataSource({\n columns: this.columns,\n table: sessionTable,\n viewport: sessionTable.table,\n });\n }\n\n // we need to route messages from the session datasource to listening\n // client whilst still monitoring responses on the source table to which\n // we are currently subscribed.\n } else {\n throw Error(\n `[VuuDataSource] beginEditSession ${rpcResponse.errorMessage}`,\n );\n ///\n }\n }\n\n async editCell(key: string, column: string, data: VuuRowDataItemType) {\n console.log(\n `[VuuDataSource] editCell ${this.#sessionDataSource?.viewport} rowKey ${key}, column ${column}, value ${data}`,\n );\n\n const rpcHost = this.#sessionDataSource ?? this;\n\n const rpcResponse = await rpcHost.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"editCell\",\n params: {\n column,\n data,\n key,\n },\n });\n\n if (isRpcSuccess(rpcResponse)) {\n console.log(\"edit succeeded\");\n } else {\n throw Error(\"oh oh\");\n }\n }\n\n async endEditSession(saveChanges = false) {\n console.log(`[VuuDataSource] endEditSession saveChanges ${saveChanges}`);\n\n const type = \"RPC_REQUEST\";\n const rpcName = \"endEditSession\";\n\n const rpcHost = this.#sessionDataSource ?? this;\n\n const rpcResponse = await rpcHost.rpcRequest?.(\n saveChanges\n ? { type, rpcName, params: { save: true } }\n : { type, rpcName, params: {} },\n );\n\n if (isRpcSuccess(rpcResponse)) {\n console.log(\"edit succeeded\");\n this.#sessionDataSource?.unsubscribe();\n // how do we ensure rows sent to clicnt\n } else {\n throw Error(\"oh oh\");\n }\n }\n\n async rpcRequest(rpcRequest: Omit<VuuRpcServiceRequest, \"context\">) {\n if (this.viewport && this.server) {\n return this.server?.rpcCall<RpcResultSuccess | RpcResultError>({\n ...rpcRequest,\n context: { type: \"VIEWPORT_CONTEXT\", viewPortId: this.viewport },\n } as VuuRpcServiceRequest);\n } else {\n throw Error(`rpcCall server or viewport are undefined`);\n }\n }\n\n async menuRpcCall(rpcRequest: Omit<VuuRpcMenuRequest, \"vpId\">) {\n if (this.viewport) {\n return this.server?.rpcCall<MenuRpcResponse>({\n ...rpcRequest,\n vpId: this.viewport,\n } as VuuRpcMenuRequest);\n }\n }\n\n insertRow() {\n return Promise.resolve(\"not supported\");\n // return this.menuRpcCall(vuuAddRowRequest(rowKey, data)).then((response) => {\n // if (response?.error) {\n // return response.error;\n // } else {\n // return true;\n // }\n // });\n }\n deleteRow() {\n return Promise.resolve(\"not supported\");\n // return this.menuRpcCall(vuuDeleteRowRequest(rowKey)).then((response) => {\n // if (response?.error) {\n // return response.error;\n // } else {\n // return true;\n // }\n // });\n }\n}\n"],"names":["logger","BaseDataSource","isDataSourceConfigMessage","isViewportMenusAction","isVisualLinksAction","debounce","throttle","uuid","combineFilters","Range","isSelectSuccessWithRowCount","isConfigChanged","itemsOrOrderChanged","isRpcSuccess","isInlineEditingSession"],"mappings":";;;;;;;;;;;;;;;;AAAA,IAAA,WAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,KAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,YAAA;AAoDA,MAAM,EAAE,IAAA,EAAM,WAAY,EAAA,GAAIA,gBAAO,eAAe,CAAA;AASpD,MAAM,sCAAyC,GAAA,CAC7C,OACA,EAAA,oBAAA,GAAiC,EAC9B,KAAA;AACH,EAAI,IAAA,oBAAA,CAAqB,WAAW,CAAG,EAAA;AACrC,IAAO,OAAA,OAAA;AAAA,GACF,MAAA;AACL,IAAM,MAAA,GAAA,GAAM,QAAQ,KAAM,EAAA;AAC1B,IAAqB,oBAAA,CAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AACrC,MAAA,IAAI,CAAC,GAAA,CAAI,QAAS,CAAA,IAAI,CAAG,EAAA;AACvB,QAAA,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA;AACf,KACD,CAAA;AACD,IAAO,OAAA,GAAA;AAAA;AAEX,CAAA;AAKO,MAAM,cAAA,GAAN,MAAM,cAAA,SAAsBC,uBAAqC,CAAA;AAAA,EAqBtE,YAAY,KAAmC,EAAA;AAC7C,IAAA,KAAA,CAAM,KAAK,CAAA;AArBb,IAAQ,aAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,QAA2B,EAAA,IAAA,CAAA;AACnC,IAAA,aAAA,CAAA,IAAA,EAAA,cAAA,CAAA;AAKA;AAAA;AAAA;AAAA,IAAA,YAAA,CAAA,IAAA,EAAA,WAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,qBAAA,EAAkC,EAAC,CAAA;AACnC,IAAA,YAAA,CAAA,IAAA,EAAA,kBAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,KAAA,CAAA;AACA,IAA8B,YAAA,CAAA,IAAA,EAAA,SAAA,EAAA,UAAA,CAAA;AAC9B,IAAqB,YAAA,CAAA,IAAA,EAAA,kBAAA,EAAA,CAAA,CAAA;AACrB,IAAA,YAAA,CAAA,IAAA,EAAA,kBAAA,CAAA;AACA,IAA4B,YAAA,CAAA,IAAA,EAAA,OAAA,EAAA,cAAA,CAAA;AAC5B,IAAA,YAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AAEA,IAAO,aAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AA+EP,IAAA,aAAA,CAAA,IAAA,EAAA,yBAAA,EAA0B,CAAC,OAAuC,KAAA;AAChE,MAAI,IAAA,OAAA,CAAQ,SAAS,YAAc,EAAA;AACjC,QAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,YAAA,CAAA;AACf,QAAA,IAAA,CAAK,cAAc,OAAQ,CAAA,WAAA;AAC3B,QAAA,IAAA,CAAK,kBAAkB,OAAO,CAAA;AAC9B,QAAA,IAAI,mBAAK,kBAAoB,CAAA,EAAA;AAC3B,UAAA,IAAA,CAAK,aAAa,YAAK,CAAA,IAAA,EAAA,kBAAA,CAAA;AACvB,UAAA,YAAA,CAAA,IAAA,EAAK,kBAAqB,EAAA,KAAA,CAAA,CAAA;AAAA;AAE5B,QAAK,IAAA,CAAA,IAAA,CAAK,cAAc,OAAO,CAAA;AAAA,OACjC,MAAA,IAAW,OAAQ,CAAA,IAAA,KAAS,UAAY,EAAA;AACtC,QAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,UAAA,CAAA;AAAA,OACjB,MAAA,IAAW,OAAQ,CAAA,IAAA,KAAS,SAAW,EAAA;AACrC,QAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,YAAA,CAAA;AACf,QAAK,IAAA,CAAA,IAAA,CAAK,SAAW,EAAA,IAAA,CAAK,QAAQ,CAAA;AAAA,OACpC,MAAA,IAAWC,oCAA0B,CAAA,OAAO,CAAG,EAAA;AAI7C,QAAA;AAAA,OACF,MAAA,IAAW,OAAQ,CAAA,IAAA,KAAS,gBAAkB,EAAA;AAC5C,QAAA,IAAA,CAAK,QAAW,GAAA,UAAA;AAAA,OACX,MAAA;AACL,QACE,IAAA,OAAA,CAAQ,SAAS,iBACjB,IAAA,OAAA,CAAQ,SAAS,KACjB,CAAA,IAAA,OAAA,CAAQ,IAAS,KAAA,IAAA,CAAK,IACtB,EAAA;AACA,UAAA,IAAA,CAAK,OAAO,OAAQ,CAAA,IAAA;AACpB,UAAK,IAAA,CAAA,IAAA,CAAK,QAAU,EAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,SAClC,MAAA,IAAW,OAAQ,CAAA,IAAA,KAAS,gBAAkB,EAAA;AAC5C,UAAA,IAAA,CAAK,IAAO,GAAA,CAAA;AACZ,UAAK,IAAA,CAAA,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA;AAMvB,QAAA,IAAI,KAAK,oCAAsC,EAAA;AAC7C,UAAA,IAAA,CAAK,mBAAoB,EAAA;AAAA;AAG3B,QAAI,IAAAC,8BAAA,CAAsB,OAAO,CAAG,EAAA;AAClC,UAAA,YAAA,CAAA,IAAA,EAAK,OAAQ,OAAQ,CAAA,IAAA,CAAA;AAAA,SACvB,MAAA,IAAWC,4BAAoB,CAAA,OAAO,CAAG,EAAA;AACvC,UAAA,YAAA,CAAA,IAAA,EAAK,QAAS,OAAQ,CAAA,KAAA,CAAA;AAAA,SACjB,MAAA;AACL,UAAI,IAAA,WAAA,IAAe,OAAQ,CAAA,IAAA,KAAS,iBAAmB,EAAA;AACrD,YAAA,IAAA;AAAA,cACE,CAAA,gDAAA,EAAmD,QAAQ,KAAO,EAAA,IAAI,IAAI,OAAQ,CAAA,KAAA,EAAO,EAAE,CAAA,OAAA,EAAU,OAAQ,CAAA,IAAA,EAAM,GAAG,CAAC,CAAA,GAAI,CAAC,CAAC,CAAM,GAAA,EAAA,OAAA,CAAQ,MAAM,EAAG,CAAA,CAAA,CAAE,CAAI,GAAA,CAAC,CAAC,CAAA;AAAA,aAC9J;AAAA;AAEF,UAAA,IAAA,CAAK,kBAAkB,OAAO,CAAA;AAAA;AAGhC,QAAI,IAAA,IAAA,CAAK,aAAa,UAAY,EAAA;AAChC,UAAA,IAAA,CAAK,cAAe,EAAA;AAAA;AACtB;AACF,KACF,CAAA;AAEA,IAAA,aAAA,CAAA,IAAA,EAAA,gCAAA,EAAiC,CAAC,GAAmC,KAAA;AACnE,MAAI,IAAA,GAAA,CAAI,SAAS,YAAc,EAAA;AAC7B,QAAA,OAAA,CAAQ,IAAI,CAA6C,2CAAA,CAAA,CAAA;AAAA,OAC3D,MAAA,IAAW,GAAI,CAAA,IAAA,KAAS,iBAAmB,EAAA;AACzC,QAAA,IAAI,IAAI,IAAS,KAAA,KAAA,CAAA,IAAa,GAAI,CAAA,IAAA,KAAS,KAAK,IAAM,EAAA;AACpD,UAAA,IAAA,CAAK,OAAO,GAAI,CAAA,IAAA;AAChB,UAAK,IAAA,CAAA,IAAA,CAAK,QAAU,EAAA,GAAA,CAAI,IAAI,CAAA;AAAA;AAE9B,QAAA,OAAA,CAAQ,GAAI,CAAA,CAAA,oCAAA,EAAuC,GAAI,CAAA,IAAI,CAAE,CAAA,CAAA;AAC7D,QAAA,IAAA,CAAK,kBAAkB,GAAG,CAAA;AAAA;AAC5B,KACF,CAAA;AAyNA,IAAQ,aAAA,CAAA,IAAA,EAAA,gBAAA,EAAiBC,kBAAS,MAAM;AACtC,MAAA,IAAA,CAAK,QAAW,GAAA,UAAA;AAAA,OACf,GAAG,CAAA,CAAA;AAMN,IAAQ,aAAA,CAAA,IAAA,EAAA,iBAAA,EAAgC,CAAC,KAAU,KAAA;AACjD,MAAI,IAAA,IAAA,CAAK,QAAY,IAAA,IAAA,CAAK,MAAQ,EAAA;AAChC,QAAA,IAAA,CAAK,OAAO,IAAK,CAAA;AAAA,UACf,UAAU,IAAK,CAAA,QAAA;AAAA,UACf,IAAM,EAAA,cAAA;AAAA,UACN;AAAA,SACD,CAAA;AAAA;AACH,KACF,CAAA;AAEA,IAAQ,aAAA,CAAA,IAAA,EAAA,sBAAA,EAAqCA,iBAAS,CAAA,CAAC,KAAoB,KAAA;AACzE,MAAI,IAAA,IAAA,CAAK,QAAY,IAAA,IAAA,CAAK,MAAQ,EAAA;AAChC,QAAA,IAAA,CAAK,OAAO,IAAK,CAAA;AAAA,UACf,UAAU,IAAK,CAAA,QAAA;AAAA,UACf,IAAM,EAAA,cAAA;AAAA,UACN;AAAA,SACD,CAAA;AAAA;AACH,OACC,EAAE,CAAA,CAAA;AAEL,IAAQ,aAAA,CAAA,IAAA,EAAA,sBAAA,EAAqCC,iBAAS,CAAA,CAAC,KAAoB,KAAA;AACzE,MAAI,IAAA,IAAA,CAAK,QAAY,IAAA,IAAA,CAAK,MAAQ,EAAA;AAChC,QAAA,IAAA,CAAK,OAAO,IAAK,CAAA;AAAA,UACf,UAAU,IAAK,CAAA,QAAA;AAAA,UACf,IAAM,EAAA,cAAA;AAAA,UACN;AAAA,SACD,CAAA;AAAA;AACH,OACC,EAAE,CAAA,CAAA;AA/YH,IAAA,MAAM,EAAE,UAAA,GAAa,GAAK,EAAA,KAAA,EAAO,YAAe,GAAA,KAAA;AAEhD,IAAA,IAAI,CAAC,KAAA;AACH,MAAA,MAAM,MAAM,mDAAmD,CAAA;AAEjE,IAAA,IAAA,CAAK,UAAa,GAAA,UAAA;AAClB,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AAEb,IAAA,YAAA,CAAA,IAAA,EAAK,kBAAqB,EAAA,UAAA,CAAA;AAG1B,IAAA,IAAA,CAAK,eAAe,IAAK,CAAA,eAAA;AAEzB,IAAA,IAAI,MAAM,oBAAsB,EAAA;AAC9B,MAAA,YAAA,CAAA,IAAA,EAAK,uBAAwB,KAAM,CAAA,oBAAA,CAAA;AACnC,MAAA,YAAA,CAAA,IAAA,EAAK,WAAc,EAAA,sCAAA;AAAA,QACjB,KAAM,CAAA,OAAA;AAAA,QACN,KAAM,CAAA;AAAA,OACR,CAAA;AAAA;AACF;AACF,EAEA,MAAM,SACJ,CAAA,cAAA,EACA,QACA,EAAA;AAEA,IAAM,KAAA,CAAA,SAAA,CAAU,gBAAgB,QAAQ,CAAA;AACxC,IAAM,MAAA,EAAE,WAAW,IAAK,CAAA,QAAA,KAAa,KAAK,QAAW,GAAAC,aAAA,KACnD,GAAA,cAAA;AAEF,IAAA,OAAA,CAAQ,GAAI,CAAA,CAAA,0BAAA,EAA6B,IAAK,CAAA,QAAQ,CAAE,CAAA,CAAA;AAExD,IACE,IAAA,YAAA,CAAA,IAAA,EAAK,aAAY,UACjB,IAAA,YAAA,CAAA,IAAA,EAAK,aAAY,WACjB,IAAA,YAAA,CAAA,IAAA,EAAK,aAAY,UACjB,EAAA;AAIA,MAAA,IAAA,CAAK,OAAO,QAAQ,CAAA;AACpB,MAAA;AAAA;AAGF,IAAA,IAAI,YAAK,CAAA,IAAA,EAAA,OAAA,CAAA,KAAY,cAAkB,IAAA,YAAA,CAAA,IAAA,EAAK,aAAY,cAAgB,EAAA;AACtE,MAAM,MAAA,KAAA;AAAA,QACJ,CAAA,+BAAA,EAAkC,mBAAK,OAAO,CAAA,CAAA,cAAA;AAAA,OAChD;AAAA;AAGF,IAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,aAAA,CAAA;AAEf,IAAK,IAAA,CAAA,MAAA,GAAS,MAAM,iBAAkB,CAAA,SAAA;AAEtC,IAAM,MAAA,EAAE,YAAe,GAAA,IAAA;AAEvB,IAAA,MAAM,EAAE,OAAS,EAAA,GAAG,kBAAqB,GAAAC,uBAAA,CAAe,KAAK,MAAM,CAAA;AAGnE,IAAA,IAAA,CAAK,MAAQ,EAAA,SAAA;AAAA,MACX;AAAA,QACE,GAAG,gBAAA;AAAA,QACH,UAAA;AAAA,QACA,SAAS,IAAK,CAAA,OAAA;AAAA,QACd,KAAA,EAAO,KAAK,MAAO,CAAA,UAAA;AAAA,QACnB,OAAO,IAAK,CAAA,KAAA;AAAA,QACZ,OAAO,IAAK,CAAA,MAAA;AAAA,QACZ;AAAA,OACF;AAAA,MACA,IAAK,CAAA;AAAA,KACP;AAAA;AACF,EA4EA,WAAc,GAAA;AACZ,IAAI,IAAA,YAAA,CAAA,IAAA,EAAK,aAAY,cAAgB,EAAA;AACnC,MAAO,IAAA,GAAA,CAAA,aAAA,EAAgB,IAAK,CAAA,QAAQ,CAAE,CAAA,CAAA;AACtC,MAAA,IAAI,KAAK,QAAU,EAAA;AACjB,QAAK,IAAA,CAAA,MAAA,EAAQ,WAAY,CAAA,IAAA,CAAK,QAAQ,CAAA;AACtC,QAAK,IAAA,CAAA,IAAA,CAAK,cAAgB,EAAA,IAAA,CAAK,QAAQ,CAAA;AAAA;AAEzC,MAAK,IAAA,CAAA,MAAA,EAAQ,OAAQ,CAAA,IAAA,CAAK,QAAQ,CAAA;AAClC,MAAA,IAAA,CAAK,MAAS,GAAA,IAAA;AACd,MAAA,IAAA,CAAK,kBAAmB,EAAA;AACxB,MAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,cAAA,CAAA;AACf,MAAA,IAAA,CAAK,QAAW,GAAA,EAAA;AAChB,MAAK,IAAA,CAAA,KAAA,GAAQC,cAAM,CAAA,CAAA,EAAG,CAAC,CAAA;AAAA;AACzB;AACF,EAEA,OAAA,CACE,oBAAoB,IAAK,CAAA,qBAAA,CAAsB,mBAC/C,aAAgB,GAAA,IAAA,CAAK,sBAAsB,aAC3C,EAAA;AACA,IAAI,IAAA,YAAA,CAAA,IAAA,EAAK,aAAY,cAAgB,EAAA;AACnC,MAAA,IAAA,GAAO,YAAY,IAAK,CAAA,QAAQ,CAAoB,iBAAA,EAAA,YAAA,CAAA,IAAA,EAAK,QAAO,CAAE,CAAA,CAAA;AAClE,MAAA,IAAI,KAAK,QAAU,EAAA;AACjB,QAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,WAAA,CAAA;AACf,QAAA,IAAA,CAAK,QAAQ,IAAK,CAAA;AAAA,UAChB,aAAA;AAAA,UACA,iBAAA;AAAA,UACA,IAAM,EAAA,SAAA;AAAA,UACN,UAAU,IAAK,CAAA;AAAA,SAChB,CAAA;AACD,QAAK,IAAA,CAAA,IAAA,CAAK,WAAa,EAAA,IAAA,CAAK,QAAQ,CAAA;AAAA;AACtC;AACF;AACF,EAEA,OAAO,QAAwC,EAAA;AAC7C,IAAA,MAAM,UAAa,GAAA,YAAA,CAAA,IAAA,EAAK,OAAQ,CAAA,CAAA,UAAA,CAAW,QAAQ,CAAA;AACnD,IAAM,MAAA,WAAA,GAAc,mBAAK,OAAY,CAAA,KAAA,WAAA;AACrC,IAAA,IAAA,GAAO,WAAW,IAAK,CAAA,QAAQ,CAAoB,iBAAA,EAAA,YAAA,CAAA,IAAA,EAAK,QAAO,CAAE,CAAA,CAAA;AACjE,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,IAAA,CAAK,eAAkB,GAAA,QAAA;AAAA;AAEzB,IAAA,IAAI,KAAK,QAAU,EAAA;AACjB,MAAA,IAAI,UAAY,EAAA;AACd,QAAA,IAAA,CAAK,MAAO,EAAA;AAAA,iBACH,WAAa,EAAA;AACtB,QAAA,IAAA,CAAK,QAAQ,IAAK,CAAA;AAAA,UAChB,IAAM,EAAA,QAAA;AAAA,UACN,UAAU,IAAK,CAAA;AAAA,SAChB,CAAA;AACD,QAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,YAAA,CAAA;AACf,QAAK,IAAA,CAAA,IAAA,CAAK,SAAW,EAAA,IAAA,CAAK,QAAQ,CAAA;AAElC,QAAI,IAAA,YAAA,CAAA,IAAA,EAAK,sBAAqB,CAAG,EAAA;AAC/B,UAAK,IAAA,CAAA,IAAA,CAAK,eAAiB,EAAA,YAAA,CAAA,IAAA,EAAK,kBAAkB,CAAA,CAAA;AAAA;AACpD;AACF;AACF;AACF,EAEA,MAAS,GAAA;AACP,IAAA,KAAA,CAAM,MAAO,EAAA;AACb,IAAA,IAAI,KAAK,QAAU,EAAA;AACjB,MAAA,IAAA,CAAK,QAAQ,IAAK,CAAA;AAAA,QAChB,UAAU,IAAK,CAAA,QAAA;AAAA,QACf,IAAM,EAAA;AAAA,OACP,CAAA;AAAA;AACH;AACF,EAEA,QAAW,GAAA;AACT,IAAA,KAAA,CAAM,QAAS,EAAA;AACf,IAAA,IAAI,KAAK,QAAU,EAAA;AACjB,MAAA,IAAA,CAAK,QAAQ,IAAK,CAAA;AAAA,QAChB,UAAU,IAAK,CAAA,QAAA;AAAA,QACf,IAAM,EAAA;AAAA,OACP,CAAA;AAAA;AACH;AACF,EAEA,OAAU,GAAA;AACR,IAAA,IAAA,GAAO,YAAY,IAAK,CAAA,QAAQ,CAAoB,iBAAA,EAAA,YAAA,CAAA,IAAA,EAAK,QAAO,CAAE,CAAA,CAAA;AAClE,IAAA,IAAI,KAAK,QAAU,EAAA;AACjB,MAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,WAAA,CAAA;AACf,MAAA,IAAA,CAAK,QAAQ,IAAK,CAAA;AAAA,QAChB,UAAU,IAAK,CAAA,QAAA;AAAA,QACf,IAAM,EAAA;AAAA,OACP,CAAA;AACD,MAAK,IAAA,CAAA,IAAA,CAAK,UAAY,EAAA,IAAA,CAAK,QAAQ,CAAA;AAAA;AACrC;AACF,EAEA,OAAO,QAAwC,EAAA;AAC7C,IAAA,IAAA,GAAO,WAAW,IAAK,CAAA,QAAQ,CAAoB,iBAAA,EAAA,YAAA,CAAA,IAAA,EAAK,QAAO,CAAE,CAAA,CAAA;AACjE,IAAA,IACE,KAAK,QACJ,KAAA,YAAA,CAAA,IAAA,EAAK,aAAY,UAAc,IAAA,YAAA,CAAA,IAAA,EAAK,aAAY,WACjD,CAAA,EAAA;AACA,MAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,UAAA,CAAA;AACf,MAAA,IAAI,QAAU,EAAA;AACZ,QAAA,IAAA,CAAK,eAAkB,GAAA,QAAA;AAAA;AAEzB,MAAA,IAAA,CAAK,QAAQ,IAAK,CAAA;AAAA,QAChB,UAAU,IAAK,CAAA,QAAA;AAAA,QACf,IAAM,EAAA;AAAA,OACP,CAAA;AAED,MAAK,IAAA,CAAA,IAAA,CAAK,SAAW,EAAA,IAAA,CAAK,QAAQ,CAAA;AAAA;AACpC;AACF,EAEA,MAAM,OAAO,aAA4C,EAAA;AACvD,IAAI,IAAA,IAAA,CAAK,QAAY,IAAA,IAAA,CAAK,MAAQ,EAAA;AAChC,MAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,MAAA,CAAO,MAAO,CAAA;AAAA,QACxC,GAAG,aAAA;AAAA,QACH,MAAM,IAAK,CAAA;AAAA,OACK,CAAA;AAClB,MAAI,IAAAC,oCAAA,CAA4B,QAAQ,CAAG,EAAA;AACzC,QAAQ,OAAA,CAAA,GAAA;AAAA,UACN,CAAA,wCAAA,EAA2C,SAAS,gBAAgB,CAAA;AAAA,SACtE;AACA,QAAA,YAAA,CAAA,IAAA,EAAK,oBAAqB,QAAS,CAAA,gBAAA,CAAA;AACnC,QAAK,IAAA,CAAA,IAAA,CAAK,eAAiB,EAAA,QAAA,CAAS,gBAAgB,CAAA;AAAA,OAC/C,MAAA;AACL,QAAA,OAAA,CAAQ,KAAK,CAAc,YAAA,CAAA,CAAA;AAAA;AAC7B;AACF;AACF,EAEA,aAAa,UAA6B,EAAA;AACxC,IAAA,IAAI,KAAK,QAAU,EAAA;AACjB,MAAA,MAAM,CAAC,GAAA,EAAK,KAAK,CAAA,GACf,OAAO,UAAA,KAAe,QAAW,GAAA,CAAC,UAAU,CAAA,GAAI,CAAC,KAAA,CAAA,EAAW,UAAU,CAAA;AACxE,MAAA,IAAA,CAAK,QAAQ,IAAK,CAAA;AAAA,QAChB,KAAA;AAAA,QACA,GAAA;AAAA,QACA,IAAM,EAAA,cAAA;AAAA,QACN,UAAU,IAAK,CAAA;AAAA,OAChB,CAAA;AAAA;AACH;AACF,EAEA,cAAc,UAA6B,EAAA;AACzC,IAAA,IAAI,KAAK,QAAU,EAAA;AACjB,MAAA,MAAM,CAAC,GAAA,EAAK,KAAK,CAAA,GACf,OAAO,UAAA,KAAe,QAAW,GAAA,CAAC,UAAU,CAAA,GAAI,CAAC,KAAA,CAAA,EAAW,UAAU,CAAA;AACxE,MAAA,IAAA,CAAK,QAAQ,IAAK,CAAA;AAAA,QAChB,KAAA;AAAA,QACA,GAAA;AAAA,QACA,IAAM,EAAA,eAAA;AAAA,QACN,UAAU,IAAK,CAAA;AAAA,OAChB,CAAA;AAAA;AACH;AACF;AAAA;AAAA;AAAA,EAKA,IAAI,OAAU,GAAA;AACZ,IAAO,OAAA,YAAA,CAAA,IAAA,EAAK,gBAAe,KAAM,CAAA,OAAA;AAAA;AACnC,EAEA,IAAI,QAAQ,OAAmB,EAAA;AAC7B,IAAA,KAAA,CAAM,OAAU,GAAA,OAAA;AAChB,IAAI,IAAA,YAAA,CAAA,IAAA,EAAK,uBAAsB,MAAQ,EAAA;AACrC,MAAA,YAAA,CAAA,IAAA,EAAK,WAAc,EAAA,sCAAA;AAAA,QACjB,OAAA;AAAA,QACA,YAAK,CAAA,IAAA,EAAA,qBAAA;AAAA,OACP,CAAA;AAAA;AACF;AACF,EAEA,IAAI,WAAc,GAAA;AAChB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,YAAA,CAAA;AAAA;AACd,EAEA,IAAI,YAAY,WAAsC,EAAA;AACpD,IAAA,YAAA,CAAA,IAAA,EAAK,YAAe,EAAA,WAAA,CAAA;AAAA;AAEtB,EAEA,IAAI,KAAQ,GAAA;AACV,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,MAAA,CAAA;AAAA;AACd,EAEA,IAAI,IAAO,GAAA;AACT,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,KAAA,CAAA;AAAA;AACd,EAEA,IAAI,MAAS,GAAA;AACX,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,OAAA,CAAA;AAAA;AACd,EAEA,IAAI,QAAW,GAAA;AACb,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,SAAA,CAAA;AAAA;AACd,EAEA,IAAI,SAAS,QAA4B,EAAA;AACvC,IAAI,IAAA,QAAA,KAAa,mBAAK,SAAW,CAAA,EAAA;AAC/B,MAAA,YAAA,CAAA,IAAA,EAAK,SAAY,EAAA,QAAA,CAAA;AACjB,MAAA,QAAQ,QAAU;AAAA,QAChB,KAAK,MAAA;AACH,UAAA,IAAA,CAAK,eAAe,IAAK,CAAA,eAAA;AACzB,UAAA;AAAA,QACF,KAAK,UAAA;AACH,UAAA,IAAA,CAAK,eAAe,IAAK,CAAA,oBAAA;AACzB,UAAA;AAAA,QACF,KAAK,UAAA;AACH,UAAA,IAAA,CAAK,eAAe,IAAK,CAAA,oBAAA;AACzB,UAAA;AAAA;AAEJ,MAAK,IAAA,CAAA,IAAA,CAAK,YAAY,QAAQ,CAAA;AAAA;AAChC;AACF,EAMA,IAAI,iBAAoB,GAAA;AACtB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,kBAAA,CAAA;AAAA;AACd,EAgCA,IAAI,MAAS,GAAA;AACX,IAAA,OAAO,KAAM,CAAA,MAAA;AAAA;AACf,EAEA,IAAI,OAAO,MAAwC,EAAA;AACjD,IAAA,MAAM,EAAE,SAAW,EAAA,cAAA,KAAmBC,wBAAgB,CAAA,IAAA,CAAK,QAAQ,MAAM,CAAA;AACzE,IAAA,IAAI,CAAC,SAAW,EAAA;AACd,MAAA,KAAA,CAAM,MAAS,GAAA,MAAA;AAEf,MAAA,MAAM,EAAE,OAAS,EAAA,GAAG,kBAAqB,GAAAH,uBAAA,CAAe,KAAK,MAAM,CAAA;AACnE,MAAA,MAAM,YAA+B,GAAA;AAAA,QACnC,GAAG,gBAAA;AAAA,QACH,OAAS,EAAA,sCAAA;AAAA,UACP,OAAA;AAAA,UACA,YAAK,CAAA,IAAA,EAAA,qBAAA;AAAA;AACP,OACF;AAEA,MAAI,IAAA,cAAA,IAAkB,YAAK,CAAA,IAAA,EAAA,qBAAA,CAAA,CAAsB,MAAQ,EAAA;AACvD,QAAA,YAAA,CAAA,IAAA,EAAK,WAAc,EAAA,sCAAA;AAAA,UACjB,OAAA;AAAA,UACA,YAAK,CAAA,IAAA,EAAA,qBAAA;AAAA,SACP,CAAA;AAAA;AAGF,MAAA,IAAA,CAAK,QAAQ,IAAK,CAAA;AAAA,QAChB,UAAU,IAAK,CAAA,QAAA;AAAA,QACf,IAAM,EAAA,QAAA;AAAA,QACN,MAAQ,EAAA;AAAA,OACT,CAAA;AAAA;AACH;AACF,EAEA,IAAI,gBAAgB,MAAwC,EAAA;AAC1D,IAAI,IAAA,MAAA,KAAW,KAAK,MAAQ,EAAA;AAC1B,MAAA,KAAA,CAAM,eAAkB,GAAA,MAAA;AACxB,MAAA,IAAA,CAAK,QAAQ,IAAK,CAAA;AAAA,QAChB,UAAU,IAAK,CAAA,QAAA;AAAA,QACf,IAAM,EAAA,QAAA;AAAA,QACN,MAAA,EAAQA,uBAAe,CAAA,IAAA,CAAK,MAAM;AAAA,OACnC,CAAA;AAAA;AACH;AACF,EAEA,IAAI,OAAU,GAAA;AACZ,IAAA,OAAO,KAAK,qBAAsB,CAAA,OAAA;AAAA;AACpC,EAEA,IAAI,QAAQ,OAAqB,EAAA;AAC/B,IAAA,IAAII,4BAAoB,CAAA,IAAA,CAAK,OAAS,EAAA,OAAO,CAAG,EAAA;AAC9C,MAAM,MAAA,UAAA,GAAa,IAAK,CAAA,OAAA,CAAQ,MAAS,GAAA,CAAA;AAEzC,MAAA,IAAA,CAAK,eAAkB,GAAA;AAAA,QACrB,GAAG,IAAK,CAAA,qBAAA;AAAA,QACR;AAAA,OACF;AAEA,MAAA,IAAI,CAAC,UAAc,IAAA,OAAA,CAAQ,MAAS,GAAA,CAAA,IAAK,KAAK,QAAU,EAAA;AAEtD,QAAA,IAAA,CAAK,eAAkB,GAAA;AAAA,UACrB,kBAAkB,IAAK,CAAA,QAAA;AAAA,UACvB,IAAM,EAAA,OAAA;AAAA,UACN,IAAM,EAAA,iBAAA;AAAA,UACN,IAAM,EAAA,CAAA;AAAA,UACN,MAAM;AAAC,SACR,CAAA;AAAA;AACH;AACF;AACF,EAEA,IAAI,KAAQ,GAAA;AACV,IAAO,OAAA,KAAA,CAAM,SAAS,CAAG,EAAA,IAAA,CAAK,MAAM,MAAM,CAAA,CAAA,EAAI,IAAK,CAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AAAA;AAChE,EAEA,IAAI,MAAM,KAAe,EAAA;AACvB,IAAA,KAAA,CAAM,KAAQ,GAAA,KAAA;AACd,IAAI,IAAA,IAAA,CAAK,YAAY,KAAO,EAAA;AAG1B,MAAA,IAAA,CAAK,QAAQ,IAAK,CAAA;AAAA,QAChB,IAAM,EAAA,UAAA;AAAA,QACN,KAAA;AAAA,QACA,UAAU,IAAK,CAAA;AAAA,OAChB,CAAA;AAAA;AACH;AACF,EAEA,IAAI,UAAa,GAAA;AACf,IAAA,OAAO,KAAK,qBAAsB,CAAA,UAAA;AAAA;AACpC,EAEA,IAAI,WAAW,UAAiD,EAAA;AAC9D,IAAA,IAAA,CAAK,qBAAwB,GAAA;AAAA,MAC3B,GAAG,IAAK,CAAA,qBAAA;AAAA,MACR;AAAA,KACF;AAEA,IAAA,IAAI,UAAY,EAAA;AACd,MAAM,MAAA;AAAA,QACJ,gBAAA;AAAA,QACA,IAAA,EAAM,EAAE,UAAA,EAAY,QAAS;AAAA,OAC3B,GAAA,UAAA;AAEJ,MAAA,IAAI,KAAK,QAAU,EAAA;AACjB,QAAA,IAAA,CAAK,QACD,OAA4C,CAAA;AAAA,UAC5C,eAAiB,EAAA,UAAA;AAAA,UACjB,WAAW,IAAK,CAAA,QAAA;AAAA,UAChB,gBAAkB,EAAA,QAAA;AAAA,UAClB,UAAY,EAAA,gBAAA;AAAA,UACZ,IAAM,EAAA;AAAA,SACgB,CAAA,CACvB,IAAK,CAAA,CAAC,QAAa,KAAA;AAClB,UAAK,IAAA,CAAA,IAAA,CAAK,uBAAuB,QAAQ,CAAA;AAAA,SAC1C,CAAA;AAAA;AACL,KACK,MAAA;AACL,MAAA,IAAI,KAAK,QAAU,EAAA;AACjB,QAAA,IAAA,CAAK,QACD,OAAQ,CAAA;AAAA,UACR,IAAM,EAAA,oBAAA;AAAA,UACN,WAAW,IAAK,CAAA;AAAA,SACjB,CACA,CAAA,IAAA,CAAK,MAAM;AACV,UAAA,IAAA,CAAK,KAAK,qBAAqB,CAAA;AAAA,SAChC,CAAA;AAAA;AACL;AAGF,IAAA,IAAA,CAAK,IAAK,CAAA,QAAA,EAAU,IAAK,CAAA,qBAAA,EAAuB,KAAK,KAAK,CAAA;AAAA;AAC5D,EAEA,MAAM,mBAAiE,GAAA;AACrE,IAAA,OAAO,QAAQ,MAAU,EAAA;AAAA;AAC3B,EAEA,wBAAwB,YAAwB,EAAA;AAE9C,IAAO,OAAA,IAAI,eAAc,EAAE,OAAA,EAAS,KAAK,OAAS,EAAA,KAAA,EAAO,cAAc,CAAA;AAAA;AACzE,EAEA,MAAM,gBAAiB,CAAA,eAAA,GAAmC,iBAAmB,EAAA;AAC3E,IAAM,MAAA,WAAA,GAAc,MAAM,IAAA,EAAM,UAAa,GAAA;AAAA,MAC3C,IAAM,EAAA,aAAA;AAAA,MACN,OAAS,EAAA,kBAAA;AAAA,MACT,MAAQ,EAAA;AAAA,QACN;AAAA;AACF,KACD,CAAA;AAED,IAAI,IAAAC,qBAAA,CAAa,WAAW,CAAG,EAAA;AAC7B,MAAA,MAAM,EAAE,KAAA,EAAO,YAAa,EAAA,GAAI,WAAY,CAAA,IAAA;AAE5C,MAAI,IAAAC,+BAAA,CAAuB,eAAe,CAAG,EAAA;AAC3C,QAAK,YAAA,CAAA,IAAA,EAAA,kBAAA,EAAqB,IAAI,cAAc,CAAA;AAAA,UAC1C,SAAS,IAAK,CAAA,OAAA;AAAA,UACd,KAAO,EAAA,YAAA;AAAA,UACP,UAAU,YAAa,CAAA;AAAA,SACxB,CAAA,CAAA;AAED,QAAA,YAAA,CAAA,IAAA,EAAK,kBAAmB,CAAA,CAAA,SAAA;AAAA,UACtB;AAAA,YACE,OAAO,IAAK,CAAA;AAAA,WACd;AAAA,UACA,IAAK,CAAA;AAAA,SACP;AAAA,OACK,MAAA;AACL,QAAA,OAAO,IAAI,cAAc,CAAA;AAAA,UACvB,SAAS,IAAK,CAAA,OAAA;AAAA,UACd,KAAO,EAAA,YAAA;AAAA,UACP,UAAU,YAAa,CAAA;AAAA,SACxB,CAAA;AAAA;AACH,KAKK,MAAA;AACL,MAAM,MAAA,KAAA;AAAA,QACJ,CAAA,iCAAA,EAAoC,YAAY,YAAY,CAAA;AAAA,OAC9D;AAAA;AAEF;AACF,EAEA,MAAM,QAAA,CAAS,GAAa,EAAA,MAAA,EAAgB,IAA0B,EAAA;AACpE,IAAQ,OAAA,CAAA,GAAA;AAAA,MACN,CAAA,yBAAA,EAA4B,mBAAK,kBAAoB,CAAA,EAAA,QAAQ,WAAW,GAAG,CAAA,SAAA,EAAY,MAAM,CAAA,QAAA,EAAW,IAAI,CAAA;AAAA,KAC9G;AAEA,IAAM,MAAA,OAAA,GAAU,mBAAK,kBAAsB,CAAA,IAAA,IAAA;AAE3C,IAAM,MAAA,WAAA,GAAc,MAAM,OAAA,CAAQ,UAAa,GAAA;AAAA,MAC7C,IAAM,EAAA,aAAA;AAAA,MACN,OAAS,EAAA,UAAA;AAAA,MACT,MAAQ,EAAA;AAAA,QACN,MAAA;AAAA,QACA,IAAA;AAAA,QACA;AAAA;AACF,KACD,CAAA;AAED,IAAI,IAAAD,qBAAA,CAAa,WAAW,CAAG,EAAA;AAC7B,MAAA,OAAA,CAAQ,IAAI,gBAAgB,CAAA;AAAA,KACvB,MAAA;AACL,MAAA,MAAM,MAAM,OAAO,CAAA;AAAA;AACrB;AACF,EAEA,MAAM,cAAe,CAAA,WAAA,GAAc,KAAO,EAAA;AACxC,IAAQ,OAAA,CAAA,GAAA,CAAI,CAA8C,2CAAA,EAAA,WAAW,CAAE,CAAA,CAAA;AAEvE,IAAA,MAAM,IAAO,GAAA,aAAA;AACb,IAAA,MAAM,OAAU,GAAA,gBAAA;AAEhB,IAAM,MAAA,OAAA,GAAU,mBAAK,kBAAsB,CAAA,IAAA,IAAA;AAE3C,IAAM,MAAA,WAAA,GAAc,MAAM,OAAQ,CAAA,UAAA;AAAA,MAChC,WACI,GAAA,EAAE,IAAM,EAAA,OAAA,EAAS,QAAQ,EAAE,IAAA,EAAM,IAAK,EAAA,KACtC,EAAE,IAAA,EAAM,OAAS,EAAA,MAAA,EAAQ,EAAG;AAAA,KAClC;AAEA,IAAI,IAAAA,qBAAA,CAAa,WAAW,CAAG,EAAA;AAC7B,MAAA,OAAA,CAAQ,IAAI,gBAAgB,CAAA;AAC5B,MAAA,YAAA,CAAA,IAAA,EAAK,qBAAoB,WAAY,EAAA;AAAA,KAEhC,MAAA;AACL,MAAA,MAAM,MAAM,OAAO,CAAA;AAAA;AACrB;AACF,EAEA,MAAM,WAAW,UAAmD,EAAA;AAClE,IAAI,IAAA,IAAA,CAAK,QAAY,IAAA,IAAA,CAAK,MAAQ,EAAA;AAChC,MAAO,OAAA,IAAA,CAAK,QAAQ,OAA2C,CAAA;AAAA,QAC7D,GAAG,UAAA;AAAA,QACH,SAAS,EAAE,IAAA,EAAM,kBAAoB,EAAA,UAAA,EAAY,KAAK,QAAS;AAAA,OACxC,CAAA;AAAA,KACpB,MAAA;AACL,MAAA,MAAM,MAAM,CAA0C,wCAAA,CAAA,CAAA;AAAA;AACxD;AACF,EAEA,MAAM,YAAY,UAA6C,EAAA;AAC7D,IAAA,IAAI,KAAK,QAAU,EAAA;AACjB,MAAO,OAAA,IAAA,CAAK,QAAQ,OAAyB,CAAA;AAAA,QAC3C,GAAG,UAAA;AAAA,QACH,MAAM,IAAK,CAAA;AAAA,OACS,CAAA;AAAA;AACxB;AACF,EAEA,SAAY,GAAA;AACV,IAAO,OAAA,OAAA,CAAQ,QAAQ,eAAe,CAAA;AAAA;AAQxC,EACA,SAAY,GAAA;AACV,IAAO,OAAA,OAAA,CAAQ,QAAQ,eAAe,CAAA;AAAA;AAS1C,CAAA;AAjrBE,WAAA,GAAA,IAAA,OAAA,EAAA;AACA,qBAAA,GAAA,IAAA,OAAA,EAAA;AACA,kBAAA,GAAA,IAAA,OAAA,EAAA;AACA,MAAA,GAAA,IAAA,OAAA,EAAA;AACA,KAAA,GAAA,IAAA,OAAA,EAAA;AACA,SAAA,GAAA,IAAA,OAAA,EAAA;AACA,kBAAA,GAAA,IAAA,OAAA,EAAA;AACA,kBAAA,GAAA,IAAA,OAAA,EAAA;AACA,OAAA,GAAA,IAAA,OAAA,EAAA;AACA,YAAA,GAAA,IAAA,OAAA,EAAA;AAjBK,IAAM,aAAN,GAAA;;;;"}
@@ -1,4 +1,4 @@
1
- import { logger, BaseDataSource, debounce, throttle, uuid, combineFilters, Range, isSelectSuccessWithRowCount, isConfigChanged, itemsOrOrderChanged, isRpcSuccess, isInlineEditingSession, StaleUpdateError, isViewportMenusAction, isVisualLinksAction } from '@vuu-ui/vuu-utils';
1
+ import { logger, BaseDataSource, debounce, throttle, uuid, combineFilters, Range, isSelectSuccessWithRowCount, isConfigChanged, itemsOrOrderChanged, isRpcSuccess, isInlineEditingSession, isViewportMenusAction, isVisualLinksAction } from '@vuu-ui/vuu-utils';
2
2
  import ConnectionManager from './ConnectionManager.js';
3
3
  import { isDataSourceConfigMessage } from './data-source.js';
4
4
 
@@ -13,7 +13,6 @@ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read fr
13
13
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
14
14
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
15
15
  var _allColumns, _autosubscribeColumns, _pendingVisualLink, _links, _menu, _optimize, _selectedRowsCount, _sessionDataSource, _status, _tableSchema;
16
- const SESSION_TABLE_MSG_COLUMN = "vuuMsg";
17
16
  const { info, infoEnabled } = logger("VuuDataSource");
18
17
  const combineColumnsWithAutosubscribeColumns = (columns, autosubscribeColumns = []) => {
19
18
  if (autosubscribeColumns.length === 0) {
@@ -68,19 +67,9 @@ const _VuuDataSource = class _VuuDataSource extends BaseDataSource {
68
67
  } else if (message.type === "debounce-begin") {
69
68
  this.optimize = "debounce";
70
69
  } else {
71
- if (message.type === "viewport-update") {
72
- if (message.size !== void 0 && message.size !== this.size) {
73
- this.size = message.size;
74
- this.emit("resize", message.size);
75
- }
76
- if (Array.isArray(message.rows) && message.rows.length > 0 && __privateGet(this, _sessionDataSource)) {
77
- this.emit("remote-update-during-local-edit", message.rows);
78
- console.log(
79
- `updates incoming whilst edit in progress ${this.viewport}`
80
- );
81
- console.table(message.rows);
82
- return;
83
- }
70
+ if (message.type === "viewport-update" && message.size !== void 0 && message.size !== this.size) {
71
+ this.size = message.size;
72
+ this.emit("resize", message.size);
84
73
  } else if (message.type === "viewport-clear") {
85
74
  this.size = 0;
86
75
  this.emit("resize", 0);
@@ -222,18 +211,6 @@ const _VuuDataSource = class _VuuDataSource extends BaseDataSource {
222
211
  }
223
212
  }
224
213
  }
225
- /**
226
- * Tell the server we wish to resume receiving messages. Server will send a
227
- * snapshot of rows currently in cache. This can be used to update with
228
- * latest data, e.g after an edit session during which we might have ignored
229
- * some updates.
230
- */
231
- sendResumeMessage() {
232
- this.server?.send({
233
- type: "resume",
234
- viewport: this.viewport
235
- });
236
- }
237
214
  resume(callback) {
238
215
  const isDisabled = __privateGet(this, _status).startsWith("disabl");
239
216
  const isSuspended = __privateGet(this, _status) === "suspended";
@@ -245,7 +222,10 @@ const _VuuDataSource = class _VuuDataSource extends BaseDataSource {
245
222
  if (isDisabled) {
246
223
  this.enable();
247
224
  } else if (isSuspended) {
248
- this.sendResumeMessage();
225
+ this.server?.send({
226
+ type: "resume",
227
+ viewport: this.viewport
228
+ });
249
229
  __privateSet(this, _status, "subscribed");
250
230
  this.emit("resumed", this.viewport);
251
231
  if (__privateGet(this, _selectedRowsCount) > 0) {
@@ -501,12 +481,9 @@ const _VuuDataSource = class _VuuDataSource extends BaseDataSource {
501
481
  return Promise.reject();
502
482
  }
503
483
  createSessionDataSource(sessionTable) {
504
- return new _VuuDataSource({
505
- columns: this.columns.concat(SESSION_TABLE_MSG_COLUMN),
506
- table: sessionTable
507
- });
484
+ return new _VuuDataSource({ columns: this.columns, table: sessionTable });
508
485
  }
509
- async beginEditSession(editSessionMode = "all-rows") {
486
+ async beginEditSession(editSessionMode = "inline-all-rows") {
510
487
  const rpcResponse = await this?.rpcRequest?.({
511
488
  type: "RPC_REQUEST",
512
489
  rpcName: "beginEditSession",
@@ -518,11 +495,10 @@ const _VuuDataSource = class _VuuDataSource extends BaseDataSource {
518
495
  const { table: sessionTable } = rpcResponse.data;
519
496
  if (isInlineEditingSession(editSessionMode)) {
520
497
  __privateSet(this, _sessionDataSource, new _VuuDataSource({
521
- ...this.config,
498
+ columns: this.columns,
522
499
  table: sessionTable,
523
500
  viewport: sessionTable.table
524
501
  }));
525
- this.columns = this.columns.concat("vuuMsg");
526
502
  __privateGet(this, _sessionDataSource).subscribe(
527
503
  {
528
504
  range: this.range
@@ -531,7 +507,7 @@ const _VuuDataSource = class _VuuDataSource extends BaseDataSource {
531
507
  );
532
508
  } else {
533
509
  return new _VuuDataSource({
534
- ...this.config,
510
+ columns: this.columns,
535
511
  table: sessionTable,
536
512
  viewport: sessionTable.table
537
513
  });
@@ -547,7 +523,7 @@ const _VuuDataSource = class _VuuDataSource extends BaseDataSource {
547
523
  `[VuuDataSource] editCell ${__privateGet(this, _sessionDataSource)?.viewport} rowKey ${key}, column ${column}, value ${data}`
548
524
  );
549
525
  const rpcHost = __privateGet(this, _sessionDataSource) ?? this;
550
- return rpcHost.rpcRequest?.({
526
+ const rpcResponse = await rpcHost.rpcRequest?.({
551
527
  type: "RPC_REQUEST",
552
528
  rpcName: "editCell",
553
529
  params: {
@@ -556,30 +532,26 @@ const _VuuDataSource = class _VuuDataSource extends BaseDataSource {
556
532
  key
557
533
  }
558
534
  });
535
+ if (isRpcSuccess(rpcResponse)) {
536
+ console.log("edit succeeded");
537
+ } else {
538
+ throw Error("oh oh");
539
+ }
559
540
  }
560
- async endEditSession(saveChanges = false, force = false) {
541
+ async endEditSession(saveChanges = false) {
561
542
  console.log(`[VuuDataSource] endEditSession saveChanges ${saveChanges}`);
562
543
  const type = "RPC_REQUEST";
563
544
  const rpcName = "endEditSession";
564
- const sessionDataSource = __privateGet(this, _sessionDataSource);
565
- const rpcHost = sessionDataSource ?? this;
566
- if (sessionDataSource) {
567
- __privateSet(this, _sessionDataSource, void 0);
568
- }
545
+ const rpcHost = __privateGet(this, _sessionDataSource) ?? this;
569
546
  const rpcResponse = await rpcHost.rpcRequest?.(
570
- saveChanges ? { type, rpcName, params: { save: true, force } } : { type, rpcName, params: {} }
547
+ saveChanges ? { type, rpcName, params: { save: true } } : { type, rpcName, params: {} }
571
548
  );
572
549
  if (isRpcSuccess(rpcResponse)) {
573
- sessionDataSource?.unsubscribe();
550
+ console.log("edit succeeded");
551
+ __privateGet(this, _sessionDataSource)?.unsubscribe();
574
552
  } else {
575
- if (rpcResponse?.errorMessage === "stale update") {
576
- __privateSet(this, _sessionDataSource, sessionDataSource);
577
- throw new StaleUpdateError(rpcResponse.errorMessage);
578
- } else {
579
- throw Error("unknown error");
580
- }
553
+ throw Error("oh oh");
581
554
  }
582
- this.sendResumeMessage();
583
555
  }
584
556
  async rpcRequest(rpcRequest) {
585
557
  if (this.viewport && this.server) {
@@ -1 +1 @@
1
- {"version":3,"file":"VuuDataSource.js","sources":["../../../packages/vuu-data-remote/src/VuuDataSource.ts"],"sourcesContent":["import type {\n DataSource,\n DataSourceCallbackMessage,\n DataSourceConstructorProps,\n DataSourceStatus,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n DataSourceVisualLinkCreatedMessage,\n EditSessionMode,\n OptimizeStrategy,\n ServerAPI,\n TableSchema,\n WithBaseFilter,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n LinkDescriptorWithLabel,\n RpcResultError,\n RpcResultSuccess,\n SelectRequest,\n VuuCreateVisualLink,\n VuuGroupBy,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n VuuRpcMenuRequest,\n VuuRpcResponse,\n VuuRpcServiceRequest,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { MenuRpcResponse } from \"@vuu-ui/vuu-data-types\";\nimport {\n BaseDataSource,\n combineFilters,\n debounce,\n isConfigChanged,\n isInlineEditingSession,\n isRpcSuccess,\n isSelectSuccessWithRowCount,\n isViewportMenusAction,\n isVisualLinksAction,\n itemsOrOrderChanged,\n logger,\n Range,\n StaleUpdateError,\n throttle,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport ConnectionManager from \"./ConnectionManager\";\nimport { isDataSourceConfigMessage } from \"./data-source\";\n\ntype RangeRequest = (range: VuuRange) => void;\n\nconst SESSION_TABLE_MSG_COLUMN = \"vuuMsg\";\n\nconst { info, infoEnabled } = logger(\"VuuDataSource\");\n\n/**\n * Autosubscribe columns are always included in a subscription.\n * The same columns may or may not be included in subscription\n * requested by client and client may change column list over\n * lifetime of dataSource. Always make sure we include the\n * autosubscription columns, but never repeat them\n */\nconst combineColumnsWithAutosubscribeColumns = (\n columns: string[],\n autosubscribeColumns: string[] = [],\n) => {\n if (autosubscribeColumns.length === 0) {\n return columns;\n } else {\n const out = columns.slice();\n autosubscribeColumns.forEach((name) => {\n if (!out.includes(name)) {\n out.push(name);\n }\n });\n return out;\n }\n};\n\n/*---------------------------------------------------------------------\n A VuuDataSource manages a single subscription via the ServerProxy\n ---------------------------------------------------------------------*/\nexport class VuuDataSource extends BaseDataSource implements DataSource {\n private bufferSize: number;\n private server: ServerAPI | null = null;\n rangeRequest: RangeRequest;\n\n /**\n * this is the combined set of regular columns and autosubscribe columns\n */\n #allColumns: undefined | string[];\n #autosubscribeColumns: string[] = [];\n #pendingVisualLink?: LinkDescriptorWithLabel;\n #links: LinkDescriptorWithLabel[] | undefined;\n #menu: VuuMenu | undefined;\n #optimize: OptimizeStrategy = \"throttle\";\n #selectedRowsCount = 0;\n #sessionDataSource: DataSource | undefined = undefined;\n #status: DataSourceStatus = \"initialising\";\n #tableSchema: TableSchema | undefined;\n\n public table: VuuTable;\n\n constructor(props: DataSourceConstructorProps) {\n super(props);\n\n const { bufferSize = 100, table, visualLink } = props;\n\n if (!table)\n throw Error(\"RemoteDataSource constructor called without table\");\n\n this.bufferSize = bufferSize;\n this.table = table;\n\n this.#pendingVisualLink = visualLink;\n\n // this.rangeRequest = this.throttleRangeRequest;\n this.rangeRequest = this.rawRangeRequest;\n\n if (props.autosubscribeColumns) {\n this.#autosubscribeColumns = props.autosubscribeColumns;\n this.#allColumns = combineColumnsWithAutosubscribeColumns(\n super.columns,\n props.autosubscribeColumns,\n );\n }\n }\n\n async subscribe(\n subscribeProps: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n // super.subscribe(subscribeProps, this.handleMessageFromServer);\n super.subscribe(subscribeProps, callback);\n const { viewport = this.viewport || (this.viewport = uuid()) } =\n subscribeProps;\n\n console.log(`[VuuDataSource] subscribe ${this.viewport}`);\n\n if (\n this.#status === \"disabled\" ||\n this.#status === \"disabling\" ||\n this.#status === \"enabling\"\n ) {\n // We can subscribe to a disabled dataSource. No request will be\n // sent to server to create a new VP, just to enable the existing one.\n // The current subscribing client becomes the subscription owner\n this.enable(callback);\n return;\n }\n\n if (this.#status !== \"initialising\" && this.#status !== \"unsubscribed\") {\n throw Error(\n `[VuuDataSource] invalid status ${this.#status} for subscribe`,\n );\n }\n\n this.#status = \"subscribing\";\n\n this.server = await ConnectionManager.serverAPI;\n\n const { bufferSize } = this;\n\n const { columns, ...dataSourceConfig } = combineFilters(this.config);\n\n // TODO and await response here\n this.server?.subscribe(\n {\n ...dataSourceConfig,\n bufferSize,\n columns: this.columns,\n range: this._range.withBuffer,\n table: this.table,\n title: this._title,\n viewport,\n },\n this.handleMessageFromServer,\n );\n }\n\n handleMessageFromServer = (message: DataSourceCallbackMessage) => {\n if (message.type === \"subscribed\") {\n this.#status = \"subscribed\";\n this.tableSchema = message.tableSchema;\n this._clientCallback?.(message);\n if (this.#pendingVisualLink) {\n this.visualLink = this.#pendingVisualLink;\n this.#pendingVisualLink = undefined;\n }\n this.emit(\"subscribed\", message);\n } else if (message.type === \"disabled\") {\n this.#status = \"disabled\";\n } else if (message.type === \"enabled\") {\n this.#status = \"subscribed\";\n this.emit(\"enabled\", this.viewport);\n } else if (isDataSourceConfigMessage(message)) {\n // This is an ACK for a CHANGE_VP message. Nothing to do here. We need\n // to wait for data to be returned before we can consider the change\n // to be in effect.\n return;\n } else if (message.type === \"debounce-begin\") {\n this.optimize = \"debounce\";\n } else {\n if (message.type === \"viewport-update\") {\n if (message.size !== undefined && message.size !== this.size) {\n this.size = message.size;\n this.emit(\"resize\", message.size);\n }\n\n if (\n Array.isArray(message.rows) &&\n message.rows.length > 0 &&\n this.#sessionDataSource\n ) {\n this.emit(\"remote-update-during-local-edit\", message.rows);\n console.log(\n `updates incoming whilst edit in progress ${this.viewport}`,\n );\n console.table(message.rows);\n return;\n }\n } else if (message.type === \"viewport-clear\") {\n this.size = 0;\n this.emit(\"resize\", 0);\n }\n // This is used to remove any progress indication from the UI. We wait for actual data rather than\n // just the CHANGE_VP_SUCCESS ack as there is often a delay between receiving the ack and the data.\n // It may be a SIZE only message, eg in the case of removing a groupBy column from a multi-column\n // groupby, where no tree nodes are expanded.\n if (this.isAwaitingConfirmationOfConfigChange) {\n this.confirmConfigChange();\n }\n\n if (isViewportMenusAction(message)) {\n this.#menu = message.menu;\n } else if (isVisualLinksAction(message)) {\n this.#links = message.links as LinkDescriptorWithLabel[];\n } else {\n if (infoEnabled && message.type === \"viewport-update\") {\n info(\n `handleMessageFromServer<viewport-update> range (${message.range?.from}:${message.range?.to}) rows ${message.rows?.at(0)?.[0]} - ${message.rows?.at(-1)?.[0]}`,\n );\n }\n this._clientCallback?.(message);\n }\n\n if (this.optimize === \"debounce\") {\n this.revertDebounce();\n }\n }\n };\n\n handleSessionMessageFromServer = (msg: DataSourceCallbackMessage) => {\n if (msg.type === \"subscribed\") {\n console.log(`[VuuDataSource subscribed to session table]`);\n } else if (msg.type === \"viewport-update\") {\n if (msg.size !== undefined && msg.size !== this.size) {\n this.size = msg.size;\n this.emit(\"resize\", msg.size);\n }\n console.log(`[VuuDataSource] clientCallback with ${msg.type}`);\n this._clientCallback?.(msg);\n }\n };\n\n unsubscribe() {\n if (this.#status !== \"unsubscribed\") {\n info?.(`unsubscribe #${this.viewport}`);\n if (this.viewport) {\n this.server?.unsubscribe(this.viewport);\n this.emit(\"unsubscribed\", this.viewport);\n }\n this.server?.destroy(this.viewport);\n this.server = null;\n this.removeAllListeners();\n this.#status = \"unsubscribed\";\n this.viewport = \"\";\n this.range = Range(0, 0);\n }\n }\n\n suspend(\n escalateToDisable = this._defaultSuspenseProps.escalateToDisable,\n escalateDelay = this._defaultSuspenseProps.escalateDelay,\n ) {\n if (this.#status !== \"unsubscribed\") {\n info?.(`suspend #${this.viewport}, current status ${this.#status}`);\n if (this.viewport) {\n this.#status = \"suspended\";\n this.server?.send({\n escalateDelay,\n escalateToDisable,\n type: \"suspend\",\n viewport: this.viewport,\n });\n this.emit(\"suspended\", this.viewport);\n }\n }\n }\n\n /**\n * Tell the server we wish to resume receiving messages. Server will send a\n * snapshot of rows currently in cache. This can be used to update with\n * latest data, e.g after an edit session during which we might have ignored\n * some updates.\n */\n private sendResumeMessage() {\n this.server?.send({\n type: \"resume\",\n viewport: this.viewport,\n });\n }\n\n resume(callback?: DataSourceSubscribeCallback) {\n const isDisabled = this.#status.startsWith(\"disabl\");\n const isSuspended = this.#status === \"suspended\";\n info?.(`resume #${this.viewport}, current status ${this.#status}`);\n if (callback) {\n this._clientCallback = callback;\n }\n if (this.viewport) {\n if (isDisabled) {\n this.enable();\n } else if (isSuspended) {\n this.sendResumeMessage();\n this.#status = \"subscribed\";\n this.emit(\"resumed\", this.viewport);\n\n if (this.#selectedRowsCount > 0) {\n this.emit(\"row-selection\", this.#selectedRowsCount);\n }\n }\n }\n }\n\n freeze() {\n super.freeze();\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"FREEZE_VP\",\n });\n }\n }\n\n unfreeze() {\n super.unfreeze();\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"UNFREEZE_VP\",\n });\n }\n }\n\n disable() {\n info?.(`disable #${this.viewport}, current status ${this.#status}`);\n if (this.viewport) {\n this.#status = \"disabling\";\n this.server?.send({\n viewport: this.viewport,\n type: \"disable\",\n });\n this.emit(\"disabled\", this.viewport);\n }\n }\n\n enable(callback?: DataSourceSubscribeCallback) {\n info?.(`enable #${this.viewport}, current status ${this.#status}`);\n if (\n this.viewport &&\n (this.#status === \"disabled\" || this.#status === \"disabling\")\n ) {\n this.#status = \"enabling\";\n if (callback) {\n this._clientCallback = callback;\n }\n this.server?.send({\n viewport: this.viewport,\n type: \"enable\",\n });\n // TODO is this a bit premature ?\n this.emit(\"enabled\", this.viewport);\n }\n }\n\n async select(selectRequest: Omit<SelectRequest, \"vpId\">) {\n if (this.viewport && this.server) {\n const response = await this.server.select({\n ...selectRequest,\n vpId: this.viewport,\n } as SelectRequest);\n if (isSelectSuccessWithRowCount(response)) {\n console.log(\n `[VuuDataSource] select selectedRowCount ${response.selectedRowCount}`,\n );\n this.#selectedRowsCount = response.selectedRowCount;\n this.emit(\"row-selection\", response.selectedRowCount);\n } else {\n console.warn(`select error`);\n }\n }\n }\n\n openTreeNode(keyOrIndex: string | number) {\n if (this.viewport) {\n const [key, index] =\n typeof keyOrIndex === \"string\" ? [keyOrIndex] : [undefined, keyOrIndex];\n this.server?.send({\n index,\n key,\n type: \"openTreeNode\",\n viewport: this.viewport,\n });\n }\n }\n\n closeTreeNode(keyOrIndex: string | number) {\n if (this.viewport) {\n const [key, index] =\n typeof keyOrIndex === \"string\" ? [keyOrIndex] : [undefined, keyOrIndex];\n this.server?.send({\n index,\n key,\n type: \"closeTreeNode\",\n viewport: this.viewport,\n });\n }\n }\n\n //TODO is this going to be confusing - the lack of symmetry between set and get columns\n // when there are autoSubscribe columns ?\n // alternative would be an allColumns prop, but every datasource would then have to add it.\n get columns() {\n return this.#allColumns ?? super.columns;\n }\n\n set columns(columns: string[]) {\n super.columns = columns;\n if (this.#autosubscribeColumns.length) {\n this.#allColumns = combineColumnsWithAutosubscribeColumns(\n columns,\n this.#autosubscribeColumns,\n );\n }\n }\n\n get tableSchema() {\n return this.#tableSchema;\n }\n\n set tableSchema(tableSchema: TableSchema | undefined) {\n this.#tableSchema = tableSchema;\n // TOSO emit an event\n }\n\n get links() {\n return this.#links;\n }\n\n get menu() {\n return this.#menu;\n }\n\n get status() {\n return this.#status;\n }\n\n get optimize() {\n return this.#optimize;\n }\n\n set optimize(optimize: OptimizeStrategy) {\n if (optimize !== this.#optimize) {\n this.#optimize = optimize;\n switch (optimize) {\n case \"none\":\n this.rangeRequest = this.rawRangeRequest;\n break;\n case \"debounce\":\n this.rangeRequest = this.debounceRangeRequest;\n break;\n case \"throttle\":\n this.rangeRequest = this.throttleRangeRequest;\n break;\n }\n this.emit(\"optimize\", optimize);\n }\n }\n\n private revertDebounce = debounce(() => {\n this.optimize = \"throttle\";\n }, 100);\n\n get selectedRowsCount() {\n return this.#selectedRowsCount;\n }\n\n private rawRangeRequest: RangeRequest = (range) => {\n if (this.viewport && this.server) {\n this.server.send({\n viewport: this.viewport,\n type: \"setViewRange\",\n range,\n });\n }\n };\n\n private debounceRangeRequest: RangeRequest = debounce((range: VuuRange) => {\n if (this.viewport && this.server) {\n this.server.send({\n viewport: this.viewport,\n type: \"setViewRange\",\n range,\n });\n }\n }, 50);\n\n private throttleRangeRequest: RangeRequest = throttle((range: VuuRange) => {\n if (this.viewport && this.server) {\n this.server.send({\n viewport: this.viewport,\n type: \"setViewRange\",\n range,\n });\n }\n }, 80);\n\n get config() {\n return super.config;\n }\n\n set config(config: WithBaseFilter<WithFullConfig>) {\n const { noChanges, columnsChanged } = isConfigChanged(this.config, config);\n if (!noChanges) {\n super.config = config;\n\n const { columns, ...dataSourceConfig } = combineFilters(this.config);\n const serverConfig: WithFullConfig = {\n ...dataSourceConfig,\n columns: combineColumnsWithAutosubscribeColumns(\n columns,\n this.#autosubscribeColumns,\n ),\n };\n\n if (columnsChanged && this.#autosubscribeColumns.length) {\n this.#allColumns = combineColumnsWithAutosubscribeColumns(\n columns,\n this.#autosubscribeColumns,\n );\n }\n\n this.server?.send({\n viewport: this.viewport,\n type: \"config\",\n config: serverConfig,\n });\n }\n }\n\n set impendingConfig(config: WithBaseFilter<WithFullConfig>) {\n if (config !== this.config) {\n super.impendingConfig = config;\n this.server?.send({\n viewport: this.viewport,\n type: \"config\",\n config: combineFilters(this.config),\n });\n }\n }\n\n get groupBy() {\n return this._configWithVisualLink.groupBy;\n }\n\n set groupBy(groupBy: VuuGroupBy) {\n if (itemsOrOrderChanged(this.groupBy, groupBy)) {\n const wasGrouped = this.groupBy.length > 0;\n\n this.impendingConfig = {\n ...this._configWithVisualLink,\n groupBy,\n };\n\n if (!wasGrouped && groupBy.length > 0 && this.viewport) {\n // clear data from table whilst we wait for grouped data from server\n this._clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n type: \"viewport-update\",\n size: 0,\n rows: [],\n });\n }\n }\n }\n\n get title() {\n return super.title || `${this.table.module} ${this.table.table}`;\n }\n\n set title(title: string) {\n super.title = title;\n if (this.viewport && title) {\n // This message doesn't actually trigger a message to Vuu server\n // it will be used to recompute visual link labels\n this.server?.send({\n type: \"setTitle\",\n title,\n viewport: this.viewport,\n });\n }\n }\n\n get visualLink() {\n return this._configWithVisualLink.visualLink;\n }\n\n set visualLink(visualLink: LinkDescriptorWithLabel | undefined) {\n this._configWithVisualLink = {\n ...this._configWithVisualLink,\n visualLink,\n };\n\n if (visualLink) {\n const {\n parentClientVpId,\n link: { fromColumn, toColumn },\n } = visualLink;\n\n if (this.viewport) {\n this.server\n ?.rpcCall<DataSourceVisualLinkCreatedMessage>({\n childColumnName: fromColumn,\n childVpId: this.viewport,\n parentColumnName: toColumn,\n parentVpId: parentClientVpId,\n type: \"CREATE_VISUAL_LINK\",\n } as VuuCreateVisualLink)\n .then((response) => {\n this.emit(\"visual-link-created\", response);\n });\n }\n } else {\n if (this.viewport) {\n this.server\n ?.rpcCall({\n type: \"REMOVE_VISUAL_LINK\",\n childVpId: this.viewport,\n })\n .then(() => {\n this.emit(\"visual-link-removed\");\n });\n }\n }\n\n this.emit(\"config\", this._configWithVisualLink, this.range);\n }\n\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n createSessionDataSource(sessionTable: VuuTable) {\n //TODO filters, sort etc\n return new VuuDataSource({\n columns: this.columns.concat(SESSION_TABLE_MSG_COLUMN),\n table: sessionTable,\n });\n }\n\n async beginEditSession(editSessionMode: EditSessionMode = \"all-rows\") {\n const rpcResponse = await this?.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"beginEditSession\",\n params: {\n editSessionMode,\n },\n });\n\n if (isRpcSuccess(rpcResponse)) {\n const { table: sessionTable } = rpcResponse.data as { table: VuuTable };\n\n if (isInlineEditingSession(editSessionMode)) {\n this.#sessionDataSource = new VuuDataSource({\n ...this.config,\n table: sessionTable,\n viewport: sessionTable.table,\n });\n\n this.columns = this.columns.concat(\"vuuMsg\");\n\n this.#sessionDataSource.subscribe(\n {\n range: this.range,\n },\n this.handleSessionMessageFromServer,\n );\n } else {\n return new VuuDataSource({\n ...this.config,\n table: sessionTable,\n viewport: sessionTable.table,\n });\n }\n\n // we need to route messages from the session datasource to listening\n // client whilst still monitoring responses on the source table to which\n // we are currently subscribed.\n } else {\n throw Error(\n `[VuuDataSource] beginEditSession ${rpcResponse.errorMessage}`,\n );\n ///\n }\n }\n\n async editCell(key: string, column: string, data: VuuRowDataItemType) {\n console.log(\n `[VuuDataSource] editCell ${this.#sessionDataSource?.viewport} rowKey ${key}, column ${column}, value ${data}`,\n );\n\n const rpcHost = this.#sessionDataSource ?? this;\n\n return rpcHost.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"editCell\",\n params: {\n column,\n data,\n key,\n },\n });\n }\n\n async endEditSession(saveChanges = false, force = false) {\n console.log(`[VuuDataSource] endEditSession saveChanges ${saveChanges}`);\n\n const type = \"RPC_REQUEST\";\n const rpcName = \"endEditSession\";\n\n const sessionDataSource = this.#sessionDataSource;\n\n const rpcHost = sessionDataSource ?? this;\n\n if (sessionDataSource) {\n // timing is important here. By breaking this reference before\n // we send the endEdit RPC call, the application of session edits\n // to the source table will be handled correctly.\n this.#sessionDataSource = undefined;\n }\n\n const rpcResponse = await rpcHost.rpcRequest?.(\n saveChanges\n ? { type, rpcName, params: { save: true, force } }\n : { type, rpcName, params: {} },\n );\n\n if (isRpcSuccess(rpcResponse)) {\n sessionDataSource?.unsubscribe();\n } else {\n if (rpcResponse?.errorMessage === \"stale update\") {\n this.#sessionDataSource = sessionDataSource;\n // sessionDataSource?.unsubscribe();\n throw new StaleUpdateError(rpcResponse.errorMessage);\n } else {\n throw Error(\"unknown error\");\n }\n }\n\n this.sendResumeMessage();\n }\n\n async rpcRequest(rpcRequest: Omit<VuuRpcServiceRequest, \"context\">) {\n if (this.viewport && this.server) {\n return this.server?.rpcCall<RpcResultSuccess | RpcResultError>({\n ...rpcRequest,\n context: { type: \"VIEWPORT_CONTEXT\", viewPortId: this.viewport },\n } as VuuRpcServiceRequest);\n } else {\n throw Error(`rpcCall server or viewport are undefined`);\n }\n }\n\n async menuRpcCall(rpcRequest: Omit<VuuRpcMenuRequest, \"vpId\">) {\n if (this.viewport) {\n return this.server?.rpcCall<MenuRpcResponse>({\n ...rpcRequest,\n vpId: this.viewport,\n } as VuuRpcMenuRequest);\n }\n }\n\n insertRow() {\n return Promise.resolve(\"not supported\");\n // return this.menuRpcCall(vuuAddRowRequest(rowKey, data)).then((response) => {\n // if (response?.error) {\n // return response.error;\n // } else {\n // return true;\n // }\n // });\n }\n deleteRow() {\n return Promise.resolve(\"not supported\");\n // return this.menuRpcCall(vuuDeleteRowRequest(rowKey)).then((response) => {\n // if (response?.error) {\n // return response.error;\n // } else {\n // return true;\n // }\n // });\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VuuDataSource.js","sources":["../../../packages/vuu-data-remote/src/VuuDataSource.ts"],"sourcesContent":["import type {\n DataSource,\n DataSourceCallbackMessage,\n DataSourceConstructorProps,\n DataSourceStatus,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n DataSourceVisualLinkCreatedMessage,\n EditSessionMode,\n OptimizeStrategy,\n ServerAPI,\n TableSchema,\n WithBaseFilter,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n LinkDescriptorWithLabel,\n RpcResultError,\n RpcResultSuccess,\n SelectRequest,\n VuuCreateVisualLink,\n VuuGroupBy,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n VuuRpcMenuRequest,\n VuuRpcResponse,\n VuuRpcServiceRequest,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { MenuRpcResponse } from \"@vuu-ui/vuu-data-types\";\nimport {\n BaseDataSource,\n combineFilters,\n debounce,\n isConfigChanged,\n isInlineEditingSession,\n isRpcSuccess,\n isSelectSuccessWithRowCount,\n isViewportMenusAction,\n isVisualLinksAction,\n itemsOrOrderChanged,\n logger,\n Range,\n throttle,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport ConnectionManager from \"./ConnectionManager\";\nimport { isDataSourceConfigMessage } from \"./data-source\";\n\ntype RangeRequest = (range: VuuRange) => void;\n\nconst { info, infoEnabled } = logger(\"VuuDataSource\");\n\n/**\n * Autosubscribe columns are always included in a subscription.\n * The same columns may or may not be included in subscription\n * requested by client and client may change column list over\n * lifetime of dataSource. Always make sure we include the\n * autosubscription columns, but never repeat them\n */\nconst combineColumnsWithAutosubscribeColumns = (\n columns: string[],\n autosubscribeColumns: string[] = [],\n) => {\n if (autosubscribeColumns.length === 0) {\n return columns;\n } else {\n const out = columns.slice();\n autosubscribeColumns.forEach((name) => {\n if (!out.includes(name)) {\n out.push(name);\n }\n });\n return out;\n }\n};\n\n/*---------------------------------------------------------------------\n A VuuDataSource manages a single subscription via the ServerProxy\n ---------------------------------------------------------------------*/\nexport class VuuDataSource extends BaseDataSource implements DataSource {\n private bufferSize: number;\n private server: ServerAPI | null = null;\n rangeRequest: RangeRequest;\n\n /**\n * this is the combined set of regular columns and autosubscribe columns\n */\n #allColumns: undefined | string[];\n #autosubscribeColumns: string[] = [];\n #pendingVisualLink?: LinkDescriptorWithLabel;\n #links: LinkDescriptorWithLabel[] | undefined;\n #menu: VuuMenu | undefined;\n #optimize: OptimizeStrategy = \"throttle\";\n #selectedRowsCount = 0;\n #sessionDataSource: DataSource | undefined = undefined;\n #status: DataSourceStatus = \"initialising\";\n #tableSchema: TableSchema | undefined;\n\n public table: VuuTable;\n\n constructor(props: DataSourceConstructorProps) {\n super(props);\n\n const { bufferSize = 100, table, visualLink } = props;\n\n if (!table)\n throw Error(\"RemoteDataSource constructor called without table\");\n\n this.bufferSize = bufferSize;\n this.table = table;\n\n this.#pendingVisualLink = visualLink;\n\n // this.rangeRequest = this.throttleRangeRequest;\n this.rangeRequest = this.rawRangeRequest;\n\n if (props.autosubscribeColumns) {\n this.#autosubscribeColumns = props.autosubscribeColumns;\n this.#allColumns = combineColumnsWithAutosubscribeColumns(\n super.columns,\n props.autosubscribeColumns,\n );\n }\n }\n\n async subscribe(\n subscribeProps: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n // super.subscribe(subscribeProps, this.handleMessageFromServer);\n super.subscribe(subscribeProps, callback);\n const { viewport = this.viewport || (this.viewport = uuid()) } =\n subscribeProps;\n\n console.log(`[VuuDataSource] subscribe ${this.viewport}`);\n\n if (\n this.#status === \"disabled\" ||\n this.#status === \"disabling\" ||\n this.#status === \"enabling\"\n ) {\n // We can subscribe to a disabled dataSource. No request will be\n // sent to server to create a new VP, just to enable the existing one.\n // The current subscribing client becomes the subscription owner\n this.enable(callback);\n return;\n }\n\n if (this.#status !== \"initialising\" && this.#status !== \"unsubscribed\") {\n throw Error(\n `[VuuDataSource] invalid status ${this.#status} for subscribe`,\n );\n }\n\n this.#status = \"subscribing\";\n\n this.server = await ConnectionManager.serverAPI;\n\n const { bufferSize } = this;\n\n const { columns, ...dataSourceConfig } = combineFilters(this.config);\n\n // TODO and await response here\n this.server?.subscribe(\n {\n ...dataSourceConfig,\n bufferSize,\n columns: this.columns,\n range: this._range.withBuffer,\n table: this.table,\n title: this._title,\n viewport,\n },\n this.handleMessageFromServer,\n );\n }\n\n handleMessageFromServer = (message: DataSourceCallbackMessage) => {\n if (message.type === \"subscribed\") {\n this.#status = \"subscribed\";\n this.tableSchema = message.tableSchema;\n this._clientCallback?.(message);\n if (this.#pendingVisualLink) {\n this.visualLink = this.#pendingVisualLink;\n this.#pendingVisualLink = undefined;\n }\n this.emit(\"subscribed\", message);\n } else if (message.type === \"disabled\") {\n this.#status = \"disabled\";\n } else if (message.type === \"enabled\") {\n this.#status = \"subscribed\";\n this.emit(\"enabled\", this.viewport);\n } else if (isDataSourceConfigMessage(message)) {\n // This is an ACK for a CHANGE_VP message. Nothing to do here. We need\n // to wait for data to be returned before we can consider the change\n // to be in effect.\n return;\n } else if (message.type === \"debounce-begin\") {\n this.optimize = \"debounce\";\n } else {\n if (\n message.type === \"viewport-update\" &&\n message.size !== undefined &&\n message.size !== this.size\n ) {\n this.size = message.size;\n this.emit(\"resize\", message.size);\n } else if (message.type === \"viewport-clear\") {\n this.size = 0;\n this.emit(\"resize\", 0);\n }\n // This is used to remove any progress indication from the UI. We wait for actual data rather than\n // just the CHANGE_VP_SUCCESS ack as there is often a delay between receiving the ack and the data.\n // It may be a SIZE only message, eg in the case of removing a groupBy column from a multi-column\n // groupby, where no tree nodes are expanded.\n if (this.isAwaitingConfirmationOfConfigChange) {\n this.confirmConfigChange();\n }\n\n if (isViewportMenusAction(message)) {\n this.#menu = message.menu;\n } else if (isVisualLinksAction(message)) {\n this.#links = message.links as LinkDescriptorWithLabel[];\n } else {\n if (infoEnabled && message.type === \"viewport-update\") {\n info(\n `handleMessageFromServer<viewport-update> range (${message.range?.from}:${message.range?.to}) rows ${message.rows?.at(0)?.[0]} - ${message.rows?.at(-1)?.[0]}`,\n );\n }\n this._clientCallback?.(message);\n }\n\n if (this.optimize === \"debounce\") {\n this.revertDebounce();\n }\n }\n };\n\n handleSessionMessageFromServer = (msg: DataSourceCallbackMessage) => {\n if (msg.type === \"subscribed\") {\n console.log(`[VuuDataSource subscribed to session table]`);\n } else if (msg.type === \"viewport-update\") {\n if (msg.size !== undefined && msg.size !== this.size) {\n this.size = msg.size;\n this.emit(\"resize\", msg.size);\n }\n console.log(`[VuuDataSource] clientCallback with ${msg.type}`);\n this._clientCallback?.(msg);\n }\n };\n\n unsubscribe() {\n if (this.#status !== \"unsubscribed\") {\n info?.(`unsubscribe #${this.viewport}`);\n if (this.viewport) {\n this.server?.unsubscribe(this.viewport);\n this.emit(\"unsubscribed\", this.viewport);\n }\n this.server?.destroy(this.viewport);\n this.server = null;\n this.removeAllListeners();\n this.#status = \"unsubscribed\";\n this.viewport = \"\";\n this.range = Range(0, 0);\n }\n }\n\n suspend(\n escalateToDisable = this._defaultSuspenseProps.escalateToDisable,\n escalateDelay = this._defaultSuspenseProps.escalateDelay,\n ) {\n if (this.#status !== \"unsubscribed\") {\n info?.(`suspend #${this.viewport}, current status ${this.#status}`);\n if (this.viewport) {\n this.#status = \"suspended\";\n this.server?.send({\n escalateDelay,\n escalateToDisable,\n type: \"suspend\",\n viewport: this.viewport,\n });\n this.emit(\"suspended\", this.viewport);\n }\n }\n }\n\n resume(callback?: DataSourceSubscribeCallback) {\n const isDisabled = this.#status.startsWith(\"disabl\");\n const isSuspended = this.#status === \"suspended\";\n info?.(`resume #${this.viewport}, current status ${this.#status}`);\n if (callback) {\n this._clientCallback = callback;\n }\n if (this.viewport) {\n if (isDisabled) {\n this.enable();\n } else if (isSuspended) {\n this.server?.send({\n type: \"resume\",\n viewport: this.viewport,\n });\n this.#status = \"subscribed\";\n this.emit(\"resumed\", this.viewport);\n\n if (this.#selectedRowsCount > 0) {\n this.emit(\"row-selection\", this.#selectedRowsCount);\n }\n }\n }\n }\n\n freeze() {\n super.freeze();\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"FREEZE_VP\",\n });\n }\n }\n\n unfreeze() {\n super.unfreeze();\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"UNFREEZE_VP\",\n });\n }\n }\n\n disable() {\n info?.(`disable #${this.viewport}, current status ${this.#status}`);\n if (this.viewport) {\n this.#status = \"disabling\";\n this.server?.send({\n viewport: this.viewport,\n type: \"disable\",\n });\n this.emit(\"disabled\", this.viewport);\n }\n }\n\n enable(callback?: DataSourceSubscribeCallback) {\n info?.(`enable #${this.viewport}, current status ${this.#status}`);\n if (\n this.viewport &&\n (this.#status === \"disabled\" || this.#status === \"disabling\")\n ) {\n this.#status = \"enabling\";\n if (callback) {\n this._clientCallback = callback;\n }\n this.server?.send({\n viewport: this.viewport,\n type: \"enable\",\n });\n // TODO is this a bit premature ?\n this.emit(\"enabled\", this.viewport);\n }\n }\n\n async select(selectRequest: Omit<SelectRequest, \"vpId\">) {\n if (this.viewport && this.server) {\n const response = await this.server.select({\n ...selectRequest,\n vpId: this.viewport,\n } as SelectRequest);\n if (isSelectSuccessWithRowCount(response)) {\n console.log(\n `[VuuDataSource] select selectedRowCount ${response.selectedRowCount}`,\n );\n this.#selectedRowsCount = response.selectedRowCount;\n this.emit(\"row-selection\", response.selectedRowCount);\n } else {\n console.warn(`select error`);\n }\n }\n }\n\n openTreeNode(keyOrIndex: string | number) {\n if (this.viewport) {\n const [key, index] =\n typeof keyOrIndex === \"string\" ? [keyOrIndex] : [undefined, keyOrIndex];\n this.server?.send({\n index,\n key,\n type: \"openTreeNode\",\n viewport: this.viewport,\n });\n }\n }\n\n closeTreeNode(keyOrIndex: string | number) {\n if (this.viewport) {\n const [key, index] =\n typeof keyOrIndex === \"string\" ? [keyOrIndex] : [undefined, keyOrIndex];\n this.server?.send({\n index,\n key,\n type: \"closeTreeNode\",\n viewport: this.viewport,\n });\n }\n }\n\n //TODO is this going to be confusing - the lack of symmetry between set and get columns\n // when there are autoSubscribe columns ?\n // alternative would be an allColumns prop, but every datasource would then have to add it.\n get columns() {\n return this.#allColumns ?? super.columns;\n }\n\n set columns(columns: string[]) {\n super.columns = columns;\n if (this.#autosubscribeColumns.length) {\n this.#allColumns = combineColumnsWithAutosubscribeColumns(\n columns,\n this.#autosubscribeColumns,\n );\n }\n }\n\n get tableSchema() {\n return this.#tableSchema;\n }\n\n set tableSchema(tableSchema: TableSchema | undefined) {\n this.#tableSchema = tableSchema;\n // TOSO emit an event\n }\n\n get links() {\n return this.#links;\n }\n\n get menu() {\n return this.#menu;\n }\n\n get status() {\n return this.#status;\n }\n\n get optimize() {\n return this.#optimize;\n }\n\n set optimize(optimize: OptimizeStrategy) {\n if (optimize !== this.#optimize) {\n this.#optimize = optimize;\n switch (optimize) {\n case \"none\":\n this.rangeRequest = this.rawRangeRequest;\n break;\n case \"debounce\":\n this.rangeRequest = this.debounceRangeRequest;\n break;\n case \"throttle\":\n this.rangeRequest = this.throttleRangeRequest;\n break;\n }\n this.emit(\"optimize\", optimize);\n }\n }\n\n private revertDebounce = debounce(() => {\n this.optimize = \"throttle\";\n }, 100);\n\n get selectedRowsCount() {\n return this.#selectedRowsCount;\n }\n\n private rawRangeRequest: RangeRequest = (range) => {\n if (this.viewport && this.server) {\n this.server.send({\n viewport: this.viewport,\n type: \"setViewRange\",\n range,\n });\n }\n };\n\n private debounceRangeRequest: RangeRequest = debounce((range: VuuRange) => {\n if (this.viewport && this.server) {\n this.server.send({\n viewport: this.viewport,\n type: \"setViewRange\",\n range,\n });\n }\n }, 50);\n\n private throttleRangeRequest: RangeRequest = throttle((range: VuuRange) => {\n if (this.viewport && this.server) {\n this.server.send({\n viewport: this.viewport,\n type: \"setViewRange\",\n range,\n });\n }\n }, 80);\n\n get config() {\n return super.config;\n }\n\n set config(config: WithBaseFilter<WithFullConfig>) {\n const { noChanges, columnsChanged } = isConfigChanged(this.config, config);\n if (!noChanges) {\n super.config = config;\n\n const { columns, ...dataSourceConfig } = combineFilters(this.config);\n const serverConfig: WithFullConfig = {\n ...dataSourceConfig,\n columns: combineColumnsWithAutosubscribeColumns(\n columns,\n this.#autosubscribeColumns,\n ),\n };\n\n if (columnsChanged && this.#autosubscribeColumns.length) {\n this.#allColumns = combineColumnsWithAutosubscribeColumns(\n columns,\n this.#autosubscribeColumns,\n );\n }\n\n this.server?.send({\n viewport: this.viewport,\n type: \"config\",\n config: serverConfig,\n });\n }\n }\n\n set impendingConfig(config: WithBaseFilter<WithFullConfig>) {\n if (config !== this.config) {\n super.impendingConfig = config;\n this.server?.send({\n viewport: this.viewport,\n type: \"config\",\n config: combineFilters(this.config),\n });\n }\n }\n\n get groupBy() {\n return this._configWithVisualLink.groupBy;\n }\n\n set groupBy(groupBy: VuuGroupBy) {\n if (itemsOrOrderChanged(this.groupBy, groupBy)) {\n const wasGrouped = this.groupBy.length > 0;\n\n this.impendingConfig = {\n ...this._configWithVisualLink,\n groupBy,\n };\n\n if (!wasGrouped && groupBy.length > 0 && this.viewport) {\n // clear data from table whilst we wait for grouped data from server\n this._clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n type: \"viewport-update\",\n size: 0,\n rows: [],\n });\n }\n }\n }\n\n get title() {\n return super.title || `${this.table.module} ${this.table.table}`;\n }\n\n set title(title: string) {\n super.title = title;\n if (this.viewport && title) {\n // This message doesn't actually trigger a message to Vuu server\n // it will be used to recompute visual link labels\n this.server?.send({\n type: \"setTitle\",\n title,\n viewport: this.viewport,\n });\n }\n }\n\n get visualLink() {\n return this._configWithVisualLink.visualLink;\n }\n\n set visualLink(visualLink: LinkDescriptorWithLabel | undefined) {\n this._configWithVisualLink = {\n ...this._configWithVisualLink,\n visualLink,\n };\n\n if (visualLink) {\n const {\n parentClientVpId,\n link: { fromColumn, toColumn },\n } = visualLink;\n\n if (this.viewport) {\n this.server\n ?.rpcCall<DataSourceVisualLinkCreatedMessage>({\n childColumnName: fromColumn,\n childVpId: this.viewport,\n parentColumnName: toColumn,\n parentVpId: parentClientVpId,\n type: \"CREATE_VISUAL_LINK\",\n } as VuuCreateVisualLink)\n .then((response) => {\n this.emit(\"visual-link-created\", response);\n });\n }\n } else {\n if (this.viewport) {\n this.server\n ?.rpcCall({\n type: \"REMOVE_VISUAL_LINK\",\n childVpId: this.viewport,\n })\n .then(() => {\n this.emit(\"visual-link-removed\");\n });\n }\n }\n\n this.emit(\"config\", this._configWithVisualLink, this.range);\n }\n\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n createSessionDataSource(sessionTable: VuuTable) {\n //TODO filters, sort etc\n return new VuuDataSource({ columns: this.columns, table: sessionTable });\n }\n\n async beginEditSession(editSessionMode: EditSessionMode = \"inline-all-rows\") {\n const rpcResponse = await this?.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"beginEditSession\",\n params: {\n editSessionMode,\n },\n });\n\n if (isRpcSuccess(rpcResponse)) {\n const { table: sessionTable } = rpcResponse.data as { table: VuuTable };\n\n if (isInlineEditingSession(editSessionMode)) {\n this.#sessionDataSource = new VuuDataSource({\n columns: this.columns,\n table: sessionTable,\n viewport: sessionTable.table,\n });\n\n this.#sessionDataSource.subscribe(\n {\n range: this.range,\n },\n this.handleSessionMessageFromServer,\n );\n } else {\n return new VuuDataSource({\n columns: this.columns,\n table: sessionTable,\n viewport: sessionTable.table,\n });\n }\n\n // we need to route messages from the session datasource to listening\n // client whilst still monitoring responses on the source table to which\n // we are currently subscribed.\n } else {\n throw Error(\n `[VuuDataSource] beginEditSession ${rpcResponse.errorMessage}`,\n );\n ///\n }\n }\n\n async editCell(key: string, column: string, data: VuuRowDataItemType) {\n console.log(\n `[VuuDataSource] editCell ${this.#sessionDataSource?.viewport} rowKey ${key}, column ${column}, value ${data}`,\n );\n\n const rpcHost = this.#sessionDataSource ?? this;\n\n const rpcResponse = await rpcHost.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"editCell\",\n params: {\n column,\n data,\n key,\n },\n });\n\n if (isRpcSuccess(rpcResponse)) {\n console.log(\"edit succeeded\");\n } else {\n throw Error(\"oh oh\");\n }\n }\n\n async endEditSession(saveChanges = false) {\n console.log(`[VuuDataSource] endEditSession saveChanges ${saveChanges}`);\n\n const type = \"RPC_REQUEST\";\n const rpcName = \"endEditSession\";\n\n const rpcHost = this.#sessionDataSource ?? this;\n\n const rpcResponse = await rpcHost.rpcRequest?.(\n saveChanges\n ? { type, rpcName, params: { save: true } }\n : { type, rpcName, params: {} },\n );\n\n if (isRpcSuccess(rpcResponse)) {\n console.log(\"edit succeeded\");\n this.#sessionDataSource?.unsubscribe();\n // how do we ensure rows sent to clicnt\n } else {\n throw Error(\"oh oh\");\n }\n }\n\n async rpcRequest(rpcRequest: Omit<VuuRpcServiceRequest, \"context\">) {\n if (this.viewport && this.server) {\n return this.server?.rpcCall<RpcResultSuccess | RpcResultError>({\n ...rpcRequest,\n context: { type: \"VIEWPORT_CONTEXT\", viewPortId: this.viewport },\n } as VuuRpcServiceRequest);\n } else {\n throw Error(`rpcCall server or viewport are undefined`);\n }\n }\n\n async menuRpcCall(rpcRequest: Omit<VuuRpcMenuRequest, \"vpId\">) {\n if (this.viewport) {\n return this.server?.rpcCall<MenuRpcResponse>({\n ...rpcRequest,\n vpId: this.viewport,\n } as VuuRpcMenuRequest);\n }\n }\n\n insertRow() {\n return Promise.resolve(\"not supported\");\n // return this.menuRpcCall(vuuAddRowRequest(rowKey, data)).then((response) => {\n // if (response?.error) {\n // return response.error;\n // } else {\n // return true;\n // }\n // });\n }\n deleteRow() {\n return Promise.resolve(\"not supported\");\n // return this.menuRpcCall(vuuDeleteRowRequest(rowKey)).then((response) => {\n // if (response?.error) {\n // return response.error;\n // } else {\n // return true;\n // }\n // });\n }\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
- "version": "2.1.9",
2
+ "version": "2.1.10",
3
3
  "author": "heswell",
4
4
  "license": "Apache-2.0",
5
5
  "devDependencies": {
6
- "@vuu-ui/vuu-data-types": "2.1.9",
7
- "@vuu-ui/vuu-table-types": "2.1.9",
8
- "@vuu-ui/vuu-filter-types": "2.1.9",
9
- "@vuu-ui/vuu-protocol-types": "2.1.9"
6
+ "@vuu-ui/vuu-data-types": "2.1.10",
7
+ "@vuu-ui/vuu-table-types": "2.1.10",
8
+ "@vuu-ui/vuu-filter-types": "2.1.10",
9
+ "@vuu-ui/vuu-protocol-types": "2.1.10"
10
10
  },
11
11
  "dependencies": {
12
- "@vuu-ui/vuu-filter-parser": "2.1.9",
13
- "@vuu-ui/vuu-utils": "2.1.9"
12
+ "@vuu-ui/vuu-filter-parser": "2.1.10",
13
+ "@vuu-ui/vuu-utils": "2.1.10"
14
14
  },
15
15
  "files": [
16
16
  "README.md",
@@ -15,13 +15,6 @@ export declare class VuuDataSource extends BaseDataSource implements DataSource
15
15
  handleSessionMessageFromServer: (msg: DataSourceCallbackMessage) => void;
16
16
  unsubscribe(): void;
17
17
  suspend(escalateToDisable?: boolean, escalateDelay?: number | undefined): void;
18
- /**
19
- * Tell the server we wish to resume receiving messages. Server will send a
20
- * snapshot of rows currently in cache. This can be used to update with
21
- * latest data, e.g after an edit session during which we might have ignored
22
- * some updates.
23
- */
24
- private sendResumeMessage;
25
18
  resume(callback?: DataSourceSubscribeCallback): void;
26
19
  freeze(): void;
27
20
  unfreeze(): void;
@@ -56,8 +49,8 @@ export declare class VuuDataSource extends BaseDataSource implements DataSource
56
49
  remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>(): Promise<T>;
57
50
  createSessionDataSource(sessionTable: VuuTable): VuuDataSource;
58
51
  beginEditSession(editSessionMode?: EditSessionMode): Promise<VuuDataSource | undefined>;
59
- editCell(key: string, column: string, data: VuuRowDataItemType): Promise<RpcResultSuccess | RpcResultError | undefined>;
60
- endEditSession(saveChanges?: boolean, force?: boolean): Promise<void>;
52
+ editCell(key: string, column: string, data: VuuRowDataItemType): Promise<void>;
53
+ endEditSession(saveChanges?: boolean): Promise<void>;
61
54
  rpcRequest(rpcRequest: Omit<VuuRpcServiceRequest, "context">): Promise<RpcResultSuccess | RpcResultError>;
62
55
  menuRpcCall(rpcRequest: Omit<VuuRpcMenuRequest, "vpId">): Promise<MenuRpcResponse<any> | undefined>;
63
56
  insertRow(): Promise<string>;