@vuu-ui/vuu-data-remote 2.1.10 → 2.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/VuuDataSource.js +71 -29
- package/cjs/VuuDataSource.js.map +1 -1
- package/esm/VuuDataSource.js +72 -30
- package/esm/VuuDataSource.js.map +1 -1
- package/package.json +7 -7
- package/types/VuuDataSource.d.ts +13 -4
package/cjs/VuuDataSource.js
CHANGED
|
@@ -14,7 +14,7 @@ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot
|
|
|
14
14
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
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
|
-
var _allColumns, _autosubscribeColumns, _pendingVisualLink, _links, _menu, _optimize, _selectedRowsCount, _sessionDataSource, _status, _tableSchema;
|
|
17
|
+
var _allColumns, _autosubscribeColumns, _pendingVisualLink, _links, _menu, _optimize, _selectedRowsCount, _sessionDataSource, _sessionTableMessageColumn, _status, _tableSchema;
|
|
18
18
|
const { info, infoEnabled } = vuuUtils.logger("VuuDataSource");
|
|
19
19
|
const combineColumnsWithAutosubscribeColumns = (columns, autosubscribeColumns = []) => {
|
|
20
20
|
if (autosubscribeColumns.length === 0) {
|
|
@@ -30,7 +30,10 @@ const combineColumnsWithAutosubscribeColumns = (columns, autosubscribeColumns =
|
|
|
30
30
|
}
|
|
31
31
|
};
|
|
32
32
|
const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
|
|
33
|
-
constructor(
|
|
33
|
+
constructor({
|
|
34
|
+
sessionTableMessageColumn,
|
|
35
|
+
...props
|
|
36
|
+
}) {
|
|
34
37
|
super(props);
|
|
35
38
|
__publicField(this, "bufferSize");
|
|
36
39
|
__publicField(this, "server", null);
|
|
@@ -46,6 +49,7 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
|
|
|
46
49
|
__privateAdd(this, _optimize, "throttle");
|
|
47
50
|
__privateAdd(this, _selectedRowsCount, 0);
|
|
48
51
|
__privateAdd(this, _sessionDataSource);
|
|
52
|
+
__privateAdd(this, _sessionTableMessageColumn);
|
|
49
53
|
__privateAdd(this, _status, "initialising");
|
|
50
54
|
__privateAdd(this, _tableSchema);
|
|
51
55
|
__publicField(this, "table");
|
|
@@ -69,9 +73,19 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
|
|
|
69
73
|
} else if (message.type === "debounce-begin") {
|
|
70
74
|
this.optimize = "debounce";
|
|
71
75
|
} else {
|
|
72
|
-
if (message.type === "viewport-update"
|
|
73
|
-
|
|
74
|
-
|
|
76
|
+
if (message.type === "viewport-update") {
|
|
77
|
+
if (message.size !== void 0 && message.size !== this.size) {
|
|
78
|
+
this.size = message.size;
|
|
79
|
+
this.emit("resize", message.size);
|
|
80
|
+
}
|
|
81
|
+
if (Array.isArray(message.rows) && message.rows.length > 0 && __privateGet(this, _sessionDataSource)) {
|
|
82
|
+
this.emit("remote-update-during-local-edit", message.rows);
|
|
83
|
+
console.log(
|
|
84
|
+
`updates incoming whilst edit in progress ${this.viewport}`
|
|
85
|
+
);
|
|
86
|
+
console.table(message.rows);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
75
89
|
} else if (message.type === "viewport-clear") {
|
|
76
90
|
this.size = 0;
|
|
77
91
|
this.emit("resize", 0);
|
|
@@ -144,6 +158,7 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
|
|
|
144
158
|
this.bufferSize = bufferSize;
|
|
145
159
|
this.table = table;
|
|
146
160
|
__privateSet(this, _pendingVisualLink, visualLink);
|
|
161
|
+
__privateSet(this, _sessionTableMessageColumn, sessionTableMessageColumn);
|
|
147
162
|
this.rangeRequest = this.rawRangeRequest;
|
|
148
163
|
if (props.autosubscribeColumns) {
|
|
149
164
|
__privateSet(this, _autosubscribeColumns, props.autosubscribeColumns);
|
|
@@ -213,6 +228,18 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
|
|
|
213
228
|
}
|
|
214
229
|
}
|
|
215
230
|
}
|
|
231
|
+
/**
|
|
232
|
+
* Tell the server we wish to resume receiving messages. Server will send a
|
|
233
|
+
* snapshot of rows currently in cache. This can be used to update with
|
|
234
|
+
* latest data, e.g after an edit session during which we might have ignored
|
|
235
|
+
* some updates.
|
|
236
|
+
*/
|
|
237
|
+
sendResumeMessage() {
|
|
238
|
+
this.server?.send({
|
|
239
|
+
type: "resume",
|
|
240
|
+
viewport: this.viewport
|
|
241
|
+
});
|
|
242
|
+
}
|
|
216
243
|
resume(callback) {
|
|
217
244
|
const isDisabled = __privateGet(this, _status).startsWith("disabl");
|
|
218
245
|
const isSuspended = __privateGet(this, _status) === "suspended";
|
|
@@ -224,10 +251,7 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
|
|
|
224
251
|
if (isDisabled) {
|
|
225
252
|
this.enable();
|
|
226
253
|
} else if (isSuspended) {
|
|
227
|
-
this.
|
|
228
|
-
type: "resume",
|
|
229
|
-
viewport: this.viewport
|
|
230
|
-
});
|
|
254
|
+
this.sendResumeMessage();
|
|
231
255
|
__privateSet(this, _status, "subscribed");
|
|
232
256
|
this.emit("resumed", this.viewport);
|
|
233
257
|
if (__privateGet(this, _selectedRowsCount) > 0) {
|
|
@@ -430,6 +454,15 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
|
|
|
430
454
|
}
|
|
431
455
|
}
|
|
432
456
|
}
|
|
457
|
+
get range() {
|
|
458
|
+
return super.range;
|
|
459
|
+
}
|
|
460
|
+
set range(range) {
|
|
461
|
+
super.range = range;
|
|
462
|
+
if (__privateGet(this, _sessionDataSource)) {
|
|
463
|
+
__privateGet(this, _sessionDataSource).range = range;
|
|
464
|
+
}
|
|
465
|
+
}
|
|
433
466
|
get title() {
|
|
434
467
|
return super.title || `${this.table.module} ${this.table.table}`;
|
|
435
468
|
}
|
|
@@ -483,9 +516,13 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
|
|
|
483
516
|
return Promise.reject();
|
|
484
517
|
}
|
|
485
518
|
createSessionDataSource(sessionTable) {
|
|
486
|
-
|
|
519
|
+
const columns = __privateGet(this, _sessionTableMessageColumn) ? this.columns.concat(__privateGet(this, _sessionTableMessageColumn)) : this.columns;
|
|
520
|
+
return new _VuuDataSource({
|
|
521
|
+
columns,
|
|
522
|
+
table: sessionTable
|
|
523
|
+
});
|
|
487
524
|
}
|
|
488
|
-
async beginEditSession(editSessionMode = "
|
|
525
|
+
async beginEditSession(editSessionMode = "all-rows") {
|
|
489
526
|
const rpcResponse = await this?.rpcRequest?.({
|
|
490
527
|
type: "RPC_REQUEST",
|
|
491
528
|
rpcName: "beginEditSession",
|
|
@@ -496,8 +533,10 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
|
|
|
496
533
|
if (vuuUtils.isRpcSuccess(rpcResponse)) {
|
|
497
534
|
const { table: sessionTable } = rpcResponse.data;
|
|
498
535
|
if (vuuUtils.isInlineEditingSession(editSessionMode)) {
|
|
536
|
+
const columns = __privateGet(this, _sessionTableMessageColumn) ? this.columns.concat(__privateGet(this, _sessionTableMessageColumn)) : this.columns;
|
|
499
537
|
__privateSet(this, _sessionDataSource, new _VuuDataSource({
|
|
500
|
-
|
|
538
|
+
...this.config,
|
|
539
|
+
columns,
|
|
501
540
|
table: sessionTable,
|
|
502
541
|
viewport: sessionTable.table
|
|
503
542
|
}));
|
|
@@ -509,7 +548,7 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
|
|
|
509
548
|
);
|
|
510
549
|
} else {
|
|
511
550
|
return new _VuuDataSource({
|
|
512
|
-
|
|
551
|
+
...this.config,
|
|
513
552
|
table: sessionTable,
|
|
514
553
|
viewport: sessionTable.table
|
|
515
554
|
});
|
|
@@ -521,11 +560,8 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
|
|
|
521
560
|
}
|
|
522
561
|
}
|
|
523
562
|
async editCell(key, column, data) {
|
|
524
|
-
console.log(
|
|
525
|
-
`[VuuDataSource] editCell ${__privateGet(this, _sessionDataSource)?.viewport} rowKey ${key}, column ${column}, value ${data}`
|
|
526
|
-
);
|
|
527
563
|
const rpcHost = __privateGet(this, _sessionDataSource) ?? this;
|
|
528
|
-
|
|
564
|
+
return rpcHost.rpcRequest?.({
|
|
529
565
|
type: "RPC_REQUEST",
|
|
530
566
|
rpcName: "editCell",
|
|
531
567
|
params: {
|
|
@@ -534,26 +570,31 @@ const _VuuDataSource = class _VuuDataSource extends vuuUtils.BaseDataSource {
|
|
|
534
570
|
key
|
|
535
571
|
}
|
|
536
572
|
});
|
|
537
|
-
if (vuuUtils.isRpcSuccess(rpcResponse)) {
|
|
538
|
-
console.log("edit succeeded");
|
|
539
|
-
} else {
|
|
540
|
-
throw Error("oh oh");
|
|
541
|
-
}
|
|
542
573
|
}
|
|
543
|
-
async endEditSession(saveChanges = false) {
|
|
544
|
-
console.log(`[VuuDataSource] endEditSession saveChanges ${saveChanges}`);
|
|
574
|
+
async endEditSession(saveChanges = false, force = false) {
|
|
545
575
|
const type = "RPC_REQUEST";
|
|
546
576
|
const rpcName = "endEditSession";
|
|
547
|
-
const
|
|
577
|
+
const sessionDataSource = __privateGet(this, _sessionDataSource);
|
|
578
|
+
const rpcHost = sessionDataSource ?? this;
|
|
579
|
+
if (sessionDataSource) {
|
|
580
|
+
__privateSet(this, _sessionDataSource, void 0);
|
|
581
|
+
}
|
|
548
582
|
const rpcResponse = await rpcHost.rpcRequest?.(
|
|
549
|
-
saveChanges ? { type, rpcName, params: { save: true } } : { type, rpcName, params: {} }
|
|
583
|
+
saveChanges ? { type, rpcName, params: { save: true, force } } : { type, rpcName, params: {} }
|
|
550
584
|
);
|
|
551
585
|
if (vuuUtils.isRpcSuccess(rpcResponse)) {
|
|
552
|
-
|
|
553
|
-
|
|
586
|
+
if (sessionDataSource) {
|
|
587
|
+
sessionDataSource?.unsubscribe();
|
|
588
|
+
}
|
|
554
589
|
} else {
|
|
555
|
-
|
|
590
|
+
if (rpcResponse?.errorMessage === "stale update") {
|
|
591
|
+
__privateSet(this, _sessionDataSource, sessionDataSource);
|
|
592
|
+
throw new vuuUtils.StaleUpdateError(rpcResponse.errorMessage);
|
|
593
|
+
} else {
|
|
594
|
+
throw Error("unknown error");
|
|
595
|
+
}
|
|
556
596
|
}
|
|
597
|
+
this.sendResumeMessage();
|
|
557
598
|
}
|
|
558
599
|
async rpcRequest(rpcRequest) {
|
|
559
600
|
if (this.viewport && this.server) {
|
|
@@ -588,6 +629,7 @@ _menu = new WeakMap();
|
|
|
588
629
|
_optimize = new WeakMap();
|
|
589
630
|
_selectedRowsCount = new WeakMap();
|
|
590
631
|
_sessionDataSource = new WeakMap();
|
|
632
|
+
_sessionTableMessageColumn = new WeakMap();
|
|
591
633
|
_status = new WeakMap();
|
|
592
634
|
_tableSchema = new WeakMap();
|
|
593
635
|
let VuuDataSource = _VuuDataSource;
|
package/cjs/VuuDataSource.js.map
CHANGED
|
@@ -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 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":"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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 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 { 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 #sessionTableMessageColumn: string | undefined = undefined;\n #status: DataSourceStatus = \"initialising\";\n #tableSchema: TableSchema | undefined;\n\n public table: VuuTable;\n\n constructor({\n sessionTableMessageColumn,\n ...props\n }: 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 this.#sessionTableMessageColumn = sessionTableMessageColumn;\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 range() {\n return super.range;\n }\n\n set range(range: Range) {\n super.range = range;\n if (this.#sessionDataSource) {\n this.#sessionDataSource.range = range;\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 const columns = this.#sessionTableMessageColumn\n ? this.columns.concat(this.#sessionTableMessageColumn)\n : this.columns;\n return new VuuDataSource({\n columns: columns,\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 const columns = this.#sessionTableMessageColumn\n ? this.columns.concat(this.#sessionTableMessageColumn)\n : this.columns;\n this.#sessionDataSource = new VuuDataSource({\n ...this.config,\n 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 ...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 const rpcHost = this.#sessionDataSource ?? this;\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 const type = \"RPC_REQUEST\";\n const rpcName = \"endEditSession\";\n const sessionDataSource = this.#sessionDataSource;\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 if (sessionDataSource) {\n sessionDataSource?.unsubscribe();\n }\n } else {\n if (rpcResponse?.errorMessage === \"stale update\") {\n this.#sessionDataSource = sessionDataSource;\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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"}
|
package/esm/VuuDataSource.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { logger, BaseDataSource, debounce, throttle, uuid, combineFilters, Range, isSelectSuccessWithRowCount, isConfigChanged, itemsOrOrderChanged, isRpcSuccess, isInlineEditingSession, isViewportMenusAction, isVisualLinksAction } from '@vuu-ui/vuu-utils';
|
|
1
|
+
import { logger, BaseDataSource, debounce, throttle, uuid, combineFilters, Range, isSelectSuccessWithRowCount, isConfigChanged, itemsOrOrderChanged, isRpcSuccess, isInlineEditingSession, StaleUpdateError, isViewportMenusAction, isVisualLinksAction } from '@vuu-ui/vuu-utils';
|
|
2
2
|
import ConnectionManager from './ConnectionManager.js';
|
|
3
3
|
import { isDataSourceConfigMessage } from './data-source.js';
|
|
4
4
|
|
|
@@ -12,7 +12,7 @@ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot
|
|
|
12
12
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
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
|
-
var _allColumns, _autosubscribeColumns, _pendingVisualLink, _links, _menu, _optimize, _selectedRowsCount, _sessionDataSource, _status, _tableSchema;
|
|
15
|
+
var _allColumns, _autosubscribeColumns, _pendingVisualLink, _links, _menu, _optimize, _selectedRowsCount, _sessionDataSource, _sessionTableMessageColumn, _status, _tableSchema;
|
|
16
16
|
const { info, infoEnabled } = logger("VuuDataSource");
|
|
17
17
|
const combineColumnsWithAutosubscribeColumns = (columns, autosubscribeColumns = []) => {
|
|
18
18
|
if (autosubscribeColumns.length === 0) {
|
|
@@ -28,7 +28,10 @@ const combineColumnsWithAutosubscribeColumns = (columns, autosubscribeColumns =
|
|
|
28
28
|
}
|
|
29
29
|
};
|
|
30
30
|
const _VuuDataSource = class _VuuDataSource extends BaseDataSource {
|
|
31
|
-
constructor(
|
|
31
|
+
constructor({
|
|
32
|
+
sessionTableMessageColumn,
|
|
33
|
+
...props
|
|
34
|
+
}) {
|
|
32
35
|
super(props);
|
|
33
36
|
__publicField(this, "bufferSize");
|
|
34
37
|
__publicField(this, "server", null);
|
|
@@ -44,6 +47,7 @@ const _VuuDataSource = class _VuuDataSource extends BaseDataSource {
|
|
|
44
47
|
__privateAdd(this, _optimize, "throttle");
|
|
45
48
|
__privateAdd(this, _selectedRowsCount, 0);
|
|
46
49
|
__privateAdd(this, _sessionDataSource);
|
|
50
|
+
__privateAdd(this, _sessionTableMessageColumn);
|
|
47
51
|
__privateAdd(this, _status, "initialising");
|
|
48
52
|
__privateAdd(this, _tableSchema);
|
|
49
53
|
__publicField(this, "table");
|
|
@@ -67,9 +71,19 @@ const _VuuDataSource = class _VuuDataSource extends BaseDataSource {
|
|
|
67
71
|
} else if (message.type === "debounce-begin") {
|
|
68
72
|
this.optimize = "debounce";
|
|
69
73
|
} else {
|
|
70
|
-
if (message.type === "viewport-update"
|
|
71
|
-
|
|
72
|
-
|
|
74
|
+
if (message.type === "viewport-update") {
|
|
75
|
+
if (message.size !== void 0 && message.size !== this.size) {
|
|
76
|
+
this.size = message.size;
|
|
77
|
+
this.emit("resize", message.size);
|
|
78
|
+
}
|
|
79
|
+
if (Array.isArray(message.rows) && message.rows.length > 0 && __privateGet(this, _sessionDataSource)) {
|
|
80
|
+
this.emit("remote-update-during-local-edit", message.rows);
|
|
81
|
+
console.log(
|
|
82
|
+
`updates incoming whilst edit in progress ${this.viewport}`
|
|
83
|
+
);
|
|
84
|
+
console.table(message.rows);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
73
87
|
} else if (message.type === "viewport-clear") {
|
|
74
88
|
this.size = 0;
|
|
75
89
|
this.emit("resize", 0);
|
|
@@ -142,6 +156,7 @@ const _VuuDataSource = class _VuuDataSource extends BaseDataSource {
|
|
|
142
156
|
this.bufferSize = bufferSize;
|
|
143
157
|
this.table = table;
|
|
144
158
|
__privateSet(this, _pendingVisualLink, visualLink);
|
|
159
|
+
__privateSet(this, _sessionTableMessageColumn, sessionTableMessageColumn);
|
|
145
160
|
this.rangeRequest = this.rawRangeRequest;
|
|
146
161
|
if (props.autosubscribeColumns) {
|
|
147
162
|
__privateSet(this, _autosubscribeColumns, props.autosubscribeColumns);
|
|
@@ -211,6 +226,18 @@ const _VuuDataSource = class _VuuDataSource extends BaseDataSource {
|
|
|
211
226
|
}
|
|
212
227
|
}
|
|
213
228
|
}
|
|
229
|
+
/**
|
|
230
|
+
* Tell the server we wish to resume receiving messages. Server will send a
|
|
231
|
+
* snapshot of rows currently in cache. This can be used to update with
|
|
232
|
+
* latest data, e.g after an edit session during which we might have ignored
|
|
233
|
+
* some updates.
|
|
234
|
+
*/
|
|
235
|
+
sendResumeMessage() {
|
|
236
|
+
this.server?.send({
|
|
237
|
+
type: "resume",
|
|
238
|
+
viewport: this.viewport
|
|
239
|
+
});
|
|
240
|
+
}
|
|
214
241
|
resume(callback) {
|
|
215
242
|
const isDisabled = __privateGet(this, _status).startsWith("disabl");
|
|
216
243
|
const isSuspended = __privateGet(this, _status) === "suspended";
|
|
@@ -222,10 +249,7 @@ const _VuuDataSource = class _VuuDataSource extends BaseDataSource {
|
|
|
222
249
|
if (isDisabled) {
|
|
223
250
|
this.enable();
|
|
224
251
|
} else if (isSuspended) {
|
|
225
|
-
this.
|
|
226
|
-
type: "resume",
|
|
227
|
-
viewport: this.viewport
|
|
228
|
-
});
|
|
252
|
+
this.sendResumeMessage();
|
|
229
253
|
__privateSet(this, _status, "subscribed");
|
|
230
254
|
this.emit("resumed", this.viewport);
|
|
231
255
|
if (__privateGet(this, _selectedRowsCount) > 0) {
|
|
@@ -428,6 +452,15 @@ const _VuuDataSource = class _VuuDataSource extends BaseDataSource {
|
|
|
428
452
|
}
|
|
429
453
|
}
|
|
430
454
|
}
|
|
455
|
+
get range() {
|
|
456
|
+
return super.range;
|
|
457
|
+
}
|
|
458
|
+
set range(range) {
|
|
459
|
+
super.range = range;
|
|
460
|
+
if (__privateGet(this, _sessionDataSource)) {
|
|
461
|
+
__privateGet(this, _sessionDataSource).range = range;
|
|
462
|
+
}
|
|
463
|
+
}
|
|
431
464
|
get title() {
|
|
432
465
|
return super.title || `${this.table.module} ${this.table.table}`;
|
|
433
466
|
}
|
|
@@ -481,9 +514,13 @@ const _VuuDataSource = class _VuuDataSource extends BaseDataSource {
|
|
|
481
514
|
return Promise.reject();
|
|
482
515
|
}
|
|
483
516
|
createSessionDataSource(sessionTable) {
|
|
484
|
-
|
|
517
|
+
const columns = __privateGet(this, _sessionTableMessageColumn) ? this.columns.concat(__privateGet(this, _sessionTableMessageColumn)) : this.columns;
|
|
518
|
+
return new _VuuDataSource({
|
|
519
|
+
columns,
|
|
520
|
+
table: sessionTable
|
|
521
|
+
});
|
|
485
522
|
}
|
|
486
|
-
async beginEditSession(editSessionMode = "
|
|
523
|
+
async beginEditSession(editSessionMode = "all-rows") {
|
|
487
524
|
const rpcResponse = await this?.rpcRequest?.({
|
|
488
525
|
type: "RPC_REQUEST",
|
|
489
526
|
rpcName: "beginEditSession",
|
|
@@ -494,8 +531,10 @@ const _VuuDataSource = class _VuuDataSource extends BaseDataSource {
|
|
|
494
531
|
if (isRpcSuccess(rpcResponse)) {
|
|
495
532
|
const { table: sessionTable } = rpcResponse.data;
|
|
496
533
|
if (isInlineEditingSession(editSessionMode)) {
|
|
534
|
+
const columns = __privateGet(this, _sessionTableMessageColumn) ? this.columns.concat(__privateGet(this, _sessionTableMessageColumn)) : this.columns;
|
|
497
535
|
__privateSet(this, _sessionDataSource, new _VuuDataSource({
|
|
498
|
-
|
|
536
|
+
...this.config,
|
|
537
|
+
columns,
|
|
499
538
|
table: sessionTable,
|
|
500
539
|
viewport: sessionTable.table
|
|
501
540
|
}));
|
|
@@ -507,7 +546,7 @@ const _VuuDataSource = class _VuuDataSource extends BaseDataSource {
|
|
|
507
546
|
);
|
|
508
547
|
} else {
|
|
509
548
|
return new _VuuDataSource({
|
|
510
|
-
|
|
549
|
+
...this.config,
|
|
511
550
|
table: sessionTable,
|
|
512
551
|
viewport: sessionTable.table
|
|
513
552
|
});
|
|
@@ -519,11 +558,8 @@ const _VuuDataSource = class _VuuDataSource extends BaseDataSource {
|
|
|
519
558
|
}
|
|
520
559
|
}
|
|
521
560
|
async editCell(key, column, data) {
|
|
522
|
-
console.log(
|
|
523
|
-
`[VuuDataSource] editCell ${__privateGet(this, _sessionDataSource)?.viewport} rowKey ${key}, column ${column}, value ${data}`
|
|
524
|
-
);
|
|
525
561
|
const rpcHost = __privateGet(this, _sessionDataSource) ?? this;
|
|
526
|
-
|
|
562
|
+
return rpcHost.rpcRequest?.({
|
|
527
563
|
type: "RPC_REQUEST",
|
|
528
564
|
rpcName: "editCell",
|
|
529
565
|
params: {
|
|
@@ -532,26 +568,31 @@ const _VuuDataSource = class _VuuDataSource extends BaseDataSource {
|
|
|
532
568
|
key
|
|
533
569
|
}
|
|
534
570
|
});
|
|
535
|
-
if (isRpcSuccess(rpcResponse)) {
|
|
536
|
-
console.log("edit succeeded");
|
|
537
|
-
} else {
|
|
538
|
-
throw Error("oh oh");
|
|
539
|
-
}
|
|
540
571
|
}
|
|
541
|
-
async endEditSession(saveChanges = false) {
|
|
542
|
-
console.log(`[VuuDataSource] endEditSession saveChanges ${saveChanges}`);
|
|
572
|
+
async endEditSession(saveChanges = false, force = false) {
|
|
543
573
|
const type = "RPC_REQUEST";
|
|
544
574
|
const rpcName = "endEditSession";
|
|
545
|
-
const
|
|
575
|
+
const sessionDataSource = __privateGet(this, _sessionDataSource);
|
|
576
|
+
const rpcHost = sessionDataSource ?? this;
|
|
577
|
+
if (sessionDataSource) {
|
|
578
|
+
__privateSet(this, _sessionDataSource, void 0);
|
|
579
|
+
}
|
|
546
580
|
const rpcResponse = await rpcHost.rpcRequest?.(
|
|
547
|
-
saveChanges ? { type, rpcName, params: { save: true } } : { type, rpcName, params: {} }
|
|
581
|
+
saveChanges ? { type, rpcName, params: { save: true, force } } : { type, rpcName, params: {} }
|
|
548
582
|
);
|
|
549
583
|
if (isRpcSuccess(rpcResponse)) {
|
|
550
|
-
|
|
551
|
-
|
|
584
|
+
if (sessionDataSource) {
|
|
585
|
+
sessionDataSource?.unsubscribe();
|
|
586
|
+
}
|
|
552
587
|
} else {
|
|
553
|
-
|
|
588
|
+
if (rpcResponse?.errorMessage === "stale update") {
|
|
589
|
+
__privateSet(this, _sessionDataSource, sessionDataSource);
|
|
590
|
+
throw new StaleUpdateError(rpcResponse.errorMessage);
|
|
591
|
+
} else {
|
|
592
|
+
throw Error("unknown error");
|
|
593
|
+
}
|
|
554
594
|
}
|
|
595
|
+
this.sendResumeMessage();
|
|
555
596
|
}
|
|
556
597
|
async rpcRequest(rpcRequest) {
|
|
557
598
|
if (this.viewport && this.server) {
|
|
@@ -586,6 +627,7 @@ _menu = new WeakMap();
|
|
|
586
627
|
_optimize = new WeakMap();
|
|
587
628
|
_selectedRowsCount = new WeakMap();
|
|
588
629
|
_sessionDataSource = new WeakMap();
|
|
630
|
+
_sessionTableMessageColumn = new WeakMap();
|
|
589
631
|
_status = new WeakMap();
|
|
590
632
|
_tableSchema = new WeakMap();
|
|
591
633
|
let VuuDataSource = _VuuDataSource;
|
package/esm/VuuDataSource.js.map
CHANGED
|
@@ -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 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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"}
|
|
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 { 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 #sessionTableMessageColumn: string | undefined = undefined;\n #status: DataSourceStatus = \"initialising\";\n #tableSchema: TableSchema | undefined;\n\n public table: VuuTable;\n\n constructor({\n sessionTableMessageColumn,\n ...props\n }: 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 this.#sessionTableMessageColumn = sessionTableMessageColumn;\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 range() {\n return super.range;\n }\n\n set range(range: Range) {\n super.range = range;\n if (this.#sessionDataSource) {\n this.#sessionDataSource.range = range;\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 const columns = this.#sessionTableMessageColumn\n ? this.columns.concat(this.#sessionTableMessageColumn)\n : this.columns;\n return new VuuDataSource({\n columns: columns,\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 const columns = this.#sessionTableMessageColumn\n ? this.columns.concat(this.#sessionTableMessageColumn)\n : this.columns;\n this.#sessionDataSource = new VuuDataSource({\n ...this.config,\n 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 ...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 const rpcHost = this.#sessionDataSource ?? this;\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 const type = \"RPC_REQUEST\";\n const rpcName = \"endEditSession\";\n const sessionDataSource = this.#sessionDataSource;\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 if (sessionDataSource) {\n sessionDataSource?.unsubscribe();\n }\n } else {\n if (rpcResponse?.errorMessage === \"stale update\") {\n this.#sessionDataSource = sessionDataSource;\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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"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2.1.
|
|
2
|
+
"version": "2.1.12",
|
|
3
3
|
"author": "heswell",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"devDependencies": {
|
|
6
|
-
"@vuu-ui/vuu-data-types": "2.1.
|
|
7
|
-
"@vuu-ui/vuu-table-types": "2.1.
|
|
8
|
-
"@vuu-ui/vuu-filter-types": "2.1.
|
|
9
|
-
"@vuu-ui/vuu-protocol-types": "2.1.
|
|
6
|
+
"@vuu-ui/vuu-data-types": "2.1.12",
|
|
7
|
+
"@vuu-ui/vuu-table-types": "2.1.12",
|
|
8
|
+
"@vuu-ui/vuu-filter-types": "2.1.12",
|
|
9
|
+
"@vuu-ui/vuu-protocol-types": "2.1.12"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@vuu-ui/vuu-filter-parser": "2.1.
|
|
13
|
-
"@vuu-ui/vuu-utils": "2.1.
|
|
12
|
+
"@vuu-ui/vuu-filter-parser": "2.1.12",
|
|
13
|
+
"@vuu-ui/vuu-utils": "2.1.12"
|
|
14
14
|
},
|
|
15
15
|
"files": [
|
|
16
16
|
"README.md",
|
package/types/VuuDataSource.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { DataSource, DataSourceCallbackMessage, DataSourceConstructorProps, DataSourceStatus, DataSourceSubscribeCallback, DataSourceSubscribeProps, EditSessionMode, OptimizeStrategy, TableSchema, WithBaseFilter, WithFullConfig } from "@vuu-ui/vuu-data-types";
|
|
2
2
|
import type { LinkDescriptorWithLabel, RpcResultError, RpcResultSuccess, SelectRequest, VuuGroupBy, VuuMenu, VuuRange, VuuRowDataItemType, VuuRpcMenuRequest, VuuRpcResponse, VuuRpcServiceRequest, VuuTable } from "@vuu-ui/vuu-protocol-types";
|
|
3
3
|
import { MenuRpcResponse } from "@vuu-ui/vuu-data-types";
|
|
4
|
-
import { BaseDataSource } from "@vuu-ui/vuu-utils";
|
|
4
|
+
import { BaseDataSource, Range } from "@vuu-ui/vuu-utils";
|
|
5
5
|
type RangeRequest = (range: VuuRange) => void;
|
|
6
6
|
export declare class VuuDataSource extends BaseDataSource implements DataSource {
|
|
7
7
|
#private;
|
|
@@ -9,12 +9,19 @@ export declare class VuuDataSource extends BaseDataSource implements DataSource
|
|
|
9
9
|
private server;
|
|
10
10
|
rangeRequest: RangeRequest;
|
|
11
11
|
table: VuuTable;
|
|
12
|
-
constructor(props: DataSourceConstructorProps);
|
|
12
|
+
constructor({ sessionTableMessageColumn, ...props }: DataSourceConstructorProps);
|
|
13
13
|
subscribe(subscribeProps: DataSourceSubscribeProps, callback: DataSourceSubscribeCallback): Promise<void>;
|
|
14
14
|
handleMessageFromServer: (message: DataSourceCallbackMessage) => void;
|
|
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;
|
|
18
25
|
resume(callback?: DataSourceSubscribeCallback): void;
|
|
19
26
|
freeze(): void;
|
|
20
27
|
unfreeze(): void;
|
|
@@ -42,6 +49,8 @@ export declare class VuuDataSource extends BaseDataSource implements DataSource
|
|
|
42
49
|
set impendingConfig(config: WithBaseFilter<WithFullConfig>);
|
|
43
50
|
get groupBy(): VuuGroupBy;
|
|
44
51
|
set groupBy(groupBy: VuuGroupBy);
|
|
52
|
+
get range(): Range;
|
|
53
|
+
set range(range: Range);
|
|
45
54
|
get title(): string;
|
|
46
55
|
set title(title: string);
|
|
47
56
|
get visualLink(): LinkDescriptorWithLabel | undefined;
|
|
@@ -49,8 +58,8 @@ export declare class VuuDataSource extends BaseDataSource implements DataSource
|
|
|
49
58
|
remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>(): Promise<T>;
|
|
50
59
|
createSessionDataSource(sessionTable: VuuTable): VuuDataSource;
|
|
51
60
|
beginEditSession(editSessionMode?: EditSessionMode): Promise<VuuDataSource | undefined>;
|
|
52
|
-
editCell(key: string, column: string, data: VuuRowDataItemType): Promise<
|
|
53
|
-
endEditSession(saveChanges?: boolean): Promise<void>;
|
|
61
|
+
editCell(key: string, column: string, data: VuuRowDataItemType): Promise<RpcResultSuccess | RpcResultError | undefined>;
|
|
62
|
+
endEditSession(saveChanges?: boolean, force?: boolean): Promise<void>;
|
|
54
63
|
rpcRequest(rpcRequest: Omit<VuuRpcServiceRequest, "context">): Promise<RpcResultSuccess | RpcResultError>;
|
|
55
64
|
menuRpcCall(rpcRequest: Omit<VuuRpcMenuRequest, "vpId">): Promise<MenuRpcResponse<any> | undefined>;
|
|
56
65
|
insertRow(): Promise<string>;
|