@vuu-ui/vuu-data-test 2.2.1 → 3.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/TickingArrayDataSource.js +37 -114
- package/cjs/TickingArrayDataSource.js.map +1 -1
- package/cjs/core/module/VuuModule.js +112 -81
- package/cjs/core/module/VuuModule.js.map +1 -1
- package/cjs/index.js +0 -2
- package/cjs/index.js.map +1 -1
- package/cjs/session-table-utils.js +21 -4
- package/cjs/session-table-utils.js.map +1 -1
- package/cjs/test/TestModule.js +51 -12
- package/cjs/test/TestModule.js.map +1 -1
- package/esm/TickingArrayDataSource.js +38 -115
- package/esm/TickingArrayDataSource.js.map +1 -1
- package/esm/core/module/VuuModule.js +113 -82
- package/esm/core/module/VuuModule.js.map +1 -1
- package/esm/index.js +0 -1
- package/esm/index.js.map +1 -1
- package/esm/session-table-utils.js +21 -5
- package/esm/session-table-utils.js.map +1 -1
- package/esm/test/TestModule.js +51 -12
- package/esm/test/TestModule.js.map +1 -1
- package/package.json +7 -6
- package/types/TickingArrayDataSource.d.ts +10 -28
- package/types/core/module/VuuModule.d.ts +9 -9
- package/types/index.d.ts +0 -1
- package/types/session-table-utils.d.ts +3 -1
- package/types/test/TestModule.d.ts +4 -4
- package/cjs/SessionTable.js +0 -98
- package/cjs/SessionTable.js.map +0 -1
- package/esm/SessionTable.js +0 -95
- package/esm/SessionTable.js.map +0 -1
- package/types/SessionTable.d.ts +0 -12
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var vuuDataLocal = require('@vuu-ui/vuu-data-local');
|
|
4
4
|
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
5
|
+
var vuuUtils2 = require('@vuu-ui/vuu-utils2');
|
|
5
6
|
var makeSuggestions = require('./makeSuggestions.js');
|
|
6
7
|
|
|
7
8
|
var __defProp = Object.defineProperty;
|
|
@@ -14,14 +15,13 @@ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot
|
|
|
14
15
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), member.get(obj));
|
|
15
16
|
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
17
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
17
|
-
var _menuRpcServices, _pendingVisualLink, _rpcMenuServices, _rpcServices,
|
|
18
|
-
class
|
|
18
|
+
var _menuRpcServices, _pendingVisualLink, _rpcMenuServices, _rpcServices, _sourceTableDataSource, _table, _selectionLinkSubscribers, _visualLinkService, _getVisualLinks, _vuuModule;
|
|
19
|
+
const _TickingArrayDataSource = class _TickingArrayDataSource extends vuuDataLocal.ArrayDataSource {
|
|
19
20
|
constructor({
|
|
20
21
|
data,
|
|
21
22
|
getVisualLinks,
|
|
22
23
|
rpcServices,
|
|
23
24
|
rpcMenuServices,
|
|
24
|
-
sessionTables,
|
|
25
25
|
table,
|
|
26
26
|
menu,
|
|
27
27
|
visualLink,
|
|
@@ -41,9 +41,7 @@ class TickingArrayDataSource extends vuuDataLocal.ArrayDataSource {
|
|
|
41
41
|
__privateAdd(this, _pendingVisualLink);
|
|
42
42
|
__privateAdd(this, _rpcMenuServices);
|
|
43
43
|
__privateAdd(this, _rpcServices);
|
|
44
|
-
|
|
45
|
-
__privateAdd(this, _sessionTables);
|
|
46
|
-
__privateAdd(this, _sessionDataSource);
|
|
44
|
+
__privateAdd(this, _sourceTableDataSource);
|
|
47
45
|
__privateAdd(this, _table);
|
|
48
46
|
__privateAdd(this, _selectionLinkSubscribers);
|
|
49
47
|
__privateAdd(this, _visualLinkService);
|
|
@@ -54,18 +52,10 @@ class TickingArrayDataSource extends vuuDataLocal.ArrayDataSource {
|
|
|
54
52
|
this.updateRow(row, columnName);
|
|
55
53
|
} else if (sessionId) {
|
|
56
54
|
console.warn("THIS IS NEVER EXPECTED TO HAPPEN");
|
|
57
|
-
} else
|
|
55
|
+
} else {
|
|
58
56
|
this.updateRow(row, columnName);
|
|
59
57
|
}
|
|
60
58
|
});
|
|
61
|
-
__publicField(this, "handleSessionMessage", (msg) => {
|
|
62
|
-
if (msg.type === "subscribed") ; else if (msg.type === "viewport-update") {
|
|
63
|
-
if (msg.size !== void 0 && msg.size !== this.size) {
|
|
64
|
-
this.emit("resize", msg.size);
|
|
65
|
-
}
|
|
66
|
-
this.clientCallback?.(msg);
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
59
|
__publicField(this, "addRow", async (rowData = {}) => {
|
|
70
60
|
const keyColumn = this.tableSchema.key;
|
|
71
61
|
const rowKey = rowData[keyColumn] ?? vuuUtils.uuid();
|
|
@@ -84,8 +74,7 @@ class TickingArrayDataSource extends vuuDataLocal.ArrayDataSource {
|
|
|
84
74
|
return response?.errorMessage ?? "addRow failed";
|
|
85
75
|
});
|
|
86
76
|
__publicField(this, "deleteRow", async (key, mode = "hard") => {
|
|
87
|
-
const
|
|
88
|
-
const response = await rpcHost.rpcRequest?.({
|
|
77
|
+
const response = await this.rpcRequest({
|
|
89
78
|
type: "RPC_REQUEST",
|
|
90
79
|
rpcName: "deleteRow",
|
|
91
80
|
params: { key, mode }
|
|
@@ -96,8 +85,7 @@ class TickingArrayDataSource extends vuuDataLocal.ArrayDataSource {
|
|
|
96
85
|
return response?.errorMessage ?? "deleteRow failed";
|
|
97
86
|
});
|
|
98
87
|
__publicField(this, "deleteSelectedRows", async (mode = "soft") => {
|
|
99
|
-
const
|
|
100
|
-
const response = await rpcHost.rpcRequest?.({
|
|
88
|
+
const response = await this.rpcRequest({
|
|
101
89
|
type: "RPC_REQUEST",
|
|
102
90
|
rpcName: "deleteSelectedRows",
|
|
103
91
|
params: { mode }
|
|
@@ -108,8 +96,7 @@ class TickingArrayDataSource extends vuuDataLocal.ArrayDataSource {
|
|
|
108
96
|
};
|
|
109
97
|
});
|
|
110
98
|
__publicField(this, "undoRowChange", async (key) => {
|
|
111
|
-
const
|
|
112
|
-
const response = await rpcHost.rpcRequest?.({
|
|
99
|
+
const response = await this.rpcRequest({
|
|
113
100
|
type: "RPC_REQUEST",
|
|
114
101
|
rpcName: "undoRowChange",
|
|
115
102
|
params: { key }
|
|
@@ -120,7 +107,6 @@ class TickingArrayDataSource extends vuuDataLocal.ArrayDataSource {
|
|
|
120
107
|
__privateSet(this, _rpcMenuServices, rpcMenuServices);
|
|
121
108
|
__privateSet(this, _pendingVisualLink, visualLink);
|
|
122
109
|
__privateSet(this, _rpcServices, rpcServices);
|
|
123
|
-
__privateSet(this, _sessionTables, sessionTables);
|
|
124
110
|
__privateSet(this, _table, table);
|
|
125
111
|
__privateSet(this, _visualLinkService, visualLinkService);
|
|
126
112
|
__privateSet(this, _getVisualLinks, getVisualLinks);
|
|
@@ -144,15 +130,6 @@ class TickingArrayDataSource extends vuuDataLocal.ArrayDataSource {
|
|
|
144
130
|
super.unsubscribe();
|
|
145
131
|
__privateSet(this, _table, void 0);
|
|
146
132
|
}
|
|
147
|
-
set range(range) {
|
|
148
|
-
super.range = range;
|
|
149
|
-
if (__privateGet(this, _sessionDataSource)) {
|
|
150
|
-
__privateGet(this, _sessionDataSource).range = range;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
get range() {
|
|
154
|
-
return super.range;
|
|
155
|
-
}
|
|
156
133
|
set links(links) {
|
|
157
134
|
super.links = links;
|
|
158
135
|
}
|
|
@@ -163,33 +140,8 @@ class TickingArrayDataSource extends vuuDataLocal.ArrayDataSource {
|
|
|
163
140
|
getSelectedRowIds() {
|
|
164
141
|
return Array.from(this.selectedRows);
|
|
165
142
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
*
|
|
169
|
-
* `updateRowWithSessionCheck` already blocks individual row updates arriving
|
|
170
|
-
* via the table's "update" event. However, `sendRowsToClient` can also be
|
|
171
|
-
* reached through other paths that bypass that handler:
|
|
172
|
-
* - `setRange` (user scrolls the viewport)
|
|
173
|
-
* - config changes (filter / sort / group-by)
|
|
174
|
-
* - row inserts into the backing table
|
|
175
|
-
*
|
|
176
|
-
* Without this guard those paths would push source-table rows to the
|
|
177
|
-
* client and overwrite the edited session view.
|
|
178
|
-
*/
|
|
179
|
-
sendRowsToClient(forceFullRefresh = false, row) {
|
|
180
|
-
if (__privateGet(this, _sessionDataSource)) {
|
|
181
|
-
console.warn(
|
|
182
|
-
`[TickingArrayDataSource] sendRowsToClient suppressed during active edit session (forceFullRefresh=${forceFullRefresh}, ${row ? `rowKey=${row[6]}` : "full batch - likely setRange/scroll"})`
|
|
183
|
-
);
|
|
184
|
-
return;
|
|
185
|
-
}
|
|
186
|
-
super.sendRowsToClient(forceFullRefresh, row);
|
|
187
|
-
}
|
|
188
|
-
select(selectRequest) {
|
|
189
|
-
super.select(selectRequest);
|
|
190
|
-
if (__privateGet(this, _sessionDataSource)) {
|
|
191
|
-
__privateGet(this, _sessionDataSource).select(selectRequest);
|
|
192
|
-
}
|
|
143
|
+
isSessionDataSourceOf(dataSource) {
|
|
144
|
+
return __privateGet(this, _sourceTableDataSource) === dataSource;
|
|
193
145
|
}
|
|
194
146
|
async createSessionDataSource(copyOption) {
|
|
195
147
|
const rpcResponse = await this?.rpcRequest?.({
|
|
@@ -199,58 +151,24 @@ class TickingArrayDataSource extends vuuDataLocal.ArrayDataSource {
|
|
|
199
151
|
});
|
|
200
152
|
if (vuuUtils.isRpcSuccess(rpcResponse)) {
|
|
201
153
|
const { table: sessionTable } = rpcResponse.data;
|
|
202
|
-
|
|
154
|
+
const columns = this.config.columns.includes("vuu_action") ? this.config.columns : this.config.columns.concat("vuu_action");
|
|
155
|
+
const sessionDataSource = __privateGet(this, _vuuModule)?.createDataSource(
|
|
203
156
|
sessionTable.table,
|
|
204
157
|
sessionTable.table,
|
|
205
|
-
this.config
|
|
206
|
-
);
|
|
207
|
-
} else {
|
|
208
|
-
throw Error(
|
|
209
|
-
`[TickingArrayDataSource] createSessionDataSource ${rpcResponse?.errorMessage}`
|
|
158
|
+
{ ...this.config, columns }
|
|
210
159
|
);
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
async beginEditSession(editSessionMode = "inline-all-rows") {
|
|
214
|
-
const rpcResponse = await this?.rpcRequest?.({
|
|
215
|
-
type: "RPC_REQUEST",
|
|
216
|
-
rpcName: "beginEditSession",
|
|
217
|
-
params: {
|
|
218
|
-
editSessionMode
|
|
219
|
-
}
|
|
220
|
-
});
|
|
221
|
-
if (vuuUtils.isRpcSuccess(rpcResponse)) {
|
|
222
|
-
const { table: sessionTable } = rpcResponse.data;
|
|
223
|
-
if (vuuUtils.isInlineEditingSession(editSessionMode)) {
|
|
224
|
-
__privateSet(this, _sessionDataSource, __privateGet(this, _vuuModule)?.createDataSource(
|
|
225
|
-
sessionTable.table,
|
|
226
|
-
sessionTable.table,
|
|
227
|
-
this.config
|
|
228
|
-
));
|
|
229
|
-
__privateGet(this, _sessionDataSource)?.subscribe(
|
|
230
|
-
{
|
|
231
|
-
range: this.range
|
|
232
|
-
},
|
|
233
|
-
this.handleSessionMessage
|
|
234
|
-
);
|
|
235
|
-
} else {
|
|
236
|
-
return __privateGet(this, _vuuModule)?.createDataSource(
|
|
237
|
-
sessionTable.table,
|
|
238
|
-
sessionTable.table,
|
|
239
|
-
this.config
|
|
240
|
-
);
|
|
160
|
+
if (sessionDataSource instanceof _TickingArrayDataSource) {
|
|
161
|
+
__privateSet(sessionDataSource, _sourceTableDataSource, this);
|
|
241
162
|
}
|
|
163
|
+
return sessionDataSource;
|
|
242
164
|
} else {
|
|
243
165
|
throw Error(
|
|
244
|
-
`[
|
|
166
|
+
`[TickingArrayDataSource] createSessionDataSource ${rpcResponse?.errorMessage}`
|
|
245
167
|
);
|
|
246
168
|
}
|
|
247
169
|
}
|
|
248
170
|
async editCell(key, column, data) {
|
|
249
|
-
|
|
250
|
-
`[VuuDataSource] editCell ${__privateGet(this, _sessionDataSource)?.viewport} rowKey ${key}, column ${column}, value ${data}`
|
|
251
|
-
);
|
|
252
|
-
const rpcHost = __privateGet(this, _sessionDataSource) ?? this;
|
|
253
|
-
return rpcHost.rpcRequest?.({
|
|
171
|
+
return this.rpcRequest({
|
|
254
172
|
type: "RPC_REQUEST",
|
|
255
173
|
rpcName: "editCell",
|
|
256
174
|
params: {
|
|
@@ -260,26 +178,31 @@ class TickingArrayDataSource extends vuuDataLocal.ArrayDataSource {
|
|
|
260
178
|
}
|
|
261
179
|
});
|
|
262
180
|
}
|
|
181
|
+
set columns(columns) {
|
|
182
|
+
super.columns = columns;
|
|
183
|
+
}
|
|
184
|
+
get columns() {
|
|
185
|
+
return super.columns;
|
|
186
|
+
}
|
|
263
187
|
async endEditSession(saveChanges = false) {
|
|
264
188
|
const type = "RPC_REQUEST";
|
|
265
189
|
const rpcName = "endEditSession";
|
|
266
|
-
const
|
|
267
|
-
const rpcHost = sessionDataSource ?? this;
|
|
268
|
-
if (sessionDataSource) {
|
|
269
|
-
__privateSet(this, _sessionDataSource, void 0);
|
|
270
|
-
}
|
|
271
|
-
const rpcResponse = await rpcHost.rpcRequest?.(
|
|
190
|
+
const rpcResponse = await this.rpcRequest(
|
|
272
191
|
saveChanges ? { type, rpcName, params: { save: true } } : { type, rpcName, params: {} }
|
|
273
192
|
);
|
|
274
193
|
if (vuuUtils.isRpcSuccess(rpcResponse)) {
|
|
275
|
-
|
|
276
|
-
|
|
194
|
+
const sourceTableDataSource = __privateGet(this, _sourceTableDataSource);
|
|
195
|
+
if (sourceTableDataSource) {
|
|
196
|
+
__privateSet(this, _sourceTableDataSource, void 0);
|
|
197
|
+
this.unsubscribe();
|
|
198
|
+
} else {
|
|
199
|
+
this.sendRowsToClient(true);
|
|
200
|
+
}
|
|
277
201
|
} else {
|
|
278
202
|
if (rpcResponse?.errorMessage === "stale update") {
|
|
279
|
-
|
|
280
|
-
this.sendRowsToClient(true);
|
|
203
|
+
throw new vuuUtils2.StaleUpdateError(rpcResponse.errorMessage);
|
|
281
204
|
} else {
|
|
282
|
-
throw Error("
|
|
205
|
+
throw Error(rpcResponse?.errorMessage ?? "endEditSession failed");
|
|
283
206
|
}
|
|
284
207
|
}
|
|
285
208
|
}
|
|
@@ -387,18 +310,18 @@ class TickingArrayDataSource extends vuuDataLocal.ArrayDataSource {
|
|
|
387
310
|
unfreeze() {
|
|
388
311
|
super.unfreeze();
|
|
389
312
|
}
|
|
390
|
-
}
|
|
313
|
+
};
|
|
391
314
|
_menuRpcServices = new WeakMap();
|
|
392
315
|
_pendingVisualLink = new WeakMap();
|
|
393
316
|
_rpcMenuServices = new WeakMap();
|
|
394
317
|
_rpcServices = new WeakMap();
|
|
395
|
-
|
|
396
|
-
_sessionDataSource = new WeakMap();
|
|
318
|
+
_sourceTableDataSource = new WeakMap();
|
|
397
319
|
_table = new WeakMap();
|
|
398
320
|
_selectionLinkSubscribers = new WeakMap();
|
|
399
321
|
_visualLinkService = new WeakMap();
|
|
400
322
|
_getVisualLinks = new WeakMap();
|
|
401
323
|
_vuuModule = new WeakMap();
|
|
324
|
+
let TickingArrayDataSource = _TickingArrayDataSource;
|
|
402
325
|
|
|
403
326
|
exports.TickingArrayDataSource = TickingArrayDataSource;
|
|
404
327
|
//# sourceMappingURL=TickingArrayDataSource.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TickingArrayDataSource.js","sources":["../../../packages/vuu-data-test/src/TickingArrayDataSource.ts"],"sourcesContent":["import {\n ArrayDataSource,\n ArrayDataSourceConstructorProps,\n} from \"@vuu-ui/vuu-data-local\";\nimport type {\n DataSourceBase,\n DataSourceCallbackMessage,\n DataSourceRowWithBigint,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n DataSourceVisualLinkCreatedMessage,\n DeleteRowMode,\n EditSessionMode,\n CopyOption,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n LinkDescriptorWithLabel,\n RpcResultError,\n RpcResultSuccess,\n SelectRequest,\n VuuCreateVisualLink,\n VuuMenu,\n VuuRemoveVisualLink,\n VuuRowDataItemType,\n VuuRpcMenuRequest,\n VuuRpcMenuResponse,\n VuuRpcServiceRequest,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n isInlineEditingSession,\n isRpcSuccess,\n isTypeaheadRequest,\n Range,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n IVuuModule,\n RpcMenuService,\n RpcService,\n SessionTableMap,\n} from \"./core/module/VuuModule\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport { Table } from \"./Table\";\n\nexport type VisualLinkHandler = (\n message: VuuCreateVisualLink | VuuRemoveVisualLink,\n) => Promise<DataSourceVisualLinkCreatedMessage | void>;\n\nexport interface TickingArrayDataSourceConstructorProps\n extends Omit<ArrayDataSourceConstructorProps, \"data\"> {\n data?: Array<VuuRowDataItemType[]>;\n getVisualLinks?: (tableName: string) => LinkDescriptorWithLabel[] | undefined;\n menu?: VuuMenu;\n rpcMenuServices?: RpcMenuService[];\n rpcServices?: RpcService[];\n sessionTables?: SessionTableMap;\n table?: Table;\n visualLinkService?: VisualLinkHandler;\n vuuModule?: IVuuModule;\n}\n\ntype LinkSubscription = {\n sourceColumnName?: string;\n columnName: string;\n linkType: \"subscribe-link-filter\" | \"subscribe-link-select\";\n};\n\nexport class TickingArrayDataSource extends ArrayDataSource {\n #menuRpcServices: RpcService[] | undefined;\n #pendingVisualLink?: LinkDescriptorWithLabel;\n #rpcMenuServices: RpcMenuService[] | undefined;\n #rpcServices: RpcService[] | undefined;\n // A reference to session tables hosted within client side module\n #sessionTables: SessionTableMap | undefined;\n #sessionDataSource: DataSourceBase<DataSourceRowWithBigint> | undefined =\n undefined;\n #table?: Table;\n #selectionLinkSubscribers: Map<string, LinkSubscription> | undefined;\n #visualLinkService?: VisualLinkHandler;\n #getVisualLinks?: (\n tableName: string,\n ) => LinkDescriptorWithLabel[] | undefined;\n #vuuModule?: IVuuModule;\n\n constructor({\n data,\n getVisualLinks,\n rpcServices,\n rpcMenuServices,\n sessionTables,\n table,\n menu,\n visualLink,\n visualLinkService,\n vuuModule,\n ...arrayDataSourceProps\n }: TickingArrayDataSourceConstructorProps) {\n if (data === undefined && table === undefined) {\n throw Error(\"TickingArrayDataSource must be constructed with data\");\n }\n super({\n ...arrayDataSourceProps,\n data: data ?? table?.data ?? [],\n dataMap: table?.map,\n });\n this._menu = menu;\n\n this.#rpcMenuServices = rpcMenuServices;\n this.#pendingVisualLink = visualLink;\n this.#rpcServices = rpcServices;\n this.#sessionTables = sessionTables;\n this.#table = table;\n this.#visualLinkService = visualLinkService;\n this.#getVisualLinks = getVisualLinks;\n this.#vuuModule = vuuModule;\n\n if (table) {\n this.tableSchema = table.schema;\n table.on(\"insert\", this.insert);\n table.on(\"update\", this.updateRowWithSessionCheck);\n // Use the base-class low-level handler so the overridden deleteRow\n // (which routes through rpcRequest)\n table.on(\"delete\", this.handleDeleteFromTable);\n }\n }\n\n updateRowWithSessionCheck = (\n row: Array<bigint | VuuRowDataItemType>,\n columnName?: string,\n sessionId?: string,\n ) => {\n if (sessionId && sessionId === this.viewport) {\n this.updateRow(row, columnName);\n } else if (sessionId) {\n // will never happen\n console.warn(\"THIS IS NEVER EXPECTED TO HAPPEN\");\n } else if (this.#sessionDataSource) {\n // queue updates for deferred application, issue warnings when edits in progress\n // this.emit(\"remote-update-during-local-edit\", row);\n } else {\n this.updateRow(row, columnName);\n }\n };\n\n async subscribe(\n subscribeProps: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n const subscription = super.subscribe(subscribeProps, callback);\n // if (subscribeProps.range) {\n // this.#updateGenerator?.setRange(subscribeProps.range);\n // }\n if (this.#pendingVisualLink) {\n this.visualLink = this.#pendingVisualLink;\n this.#pendingVisualLink = undefined;\n }\n\n return subscription;\n }\n\n unsubscribe() {\n super.unsubscribe();\n this.#table = undefined;\n }\n\n set range(range: Range) {\n super.range = range;\n // Keep session datasource range in sync while editing.\n if (this.#sessionDataSource) {\n (this.#sessionDataSource as ArrayDataSource).range = range;\n }\n // this.#updateGenerator?.setRange(range);\n }\n get range() {\n return super.range;\n }\n\n set links(links: LinkDescriptorWithLabel[] | undefined) {\n super.links = links;\n }\n\n get links() {\n return this.#getVisualLinks?.(this.table.table);\n }\n\n getSelectedRowIds(): string[] {\n return Array.from(this.selectedRows);\n }\n\n /**\n * Suppress row flushes from the source datasource while a session is active.\n *\n * `updateRowWithSessionCheck` already blocks individual row updates arriving\n * via the table's \"update\" event. However, `sendRowsToClient` can also be\n * reached through other paths that bypass that handler:\n * - `setRange` (user scrolls the viewport)\n * - config changes (filter / sort / group-by)\n * - row inserts into the backing table\n *\n * Without this guard those paths would push source-table rows to the\n * client and overwrite the edited session view.\n */\n sendRowsToClient(forceFullRefresh = false, row?: DataSourceRowWithBigint) {\n if (this.#sessionDataSource) {\n console.warn(\n `[TickingArrayDataSource] sendRowsToClient suppressed during active edit session` +\n ` (forceFullRefresh=${forceFullRefresh}, ${row ? `rowKey=${row[6]}` : \"full batch - likely setRange/scroll\"})`,\n );\n return;\n }\n super.sendRowsToClient(forceFullRefresh, row);\n }\n\n select(selectRequest: Omit<SelectRequest, \"vpId\">) {\n // Forwarding the select request to the session\n // datasource causes it to update its own selectedRows\n // and re-send its rows\n super.select(selectRequest);\n if (this.#sessionDataSource) {\n (this.#sessionDataSource as ArrayDataSource).select(selectRequest);\n }\n }\n\n handleSessionMessage = (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.emit(\"resize\", msg.size);\n }\n this.clientCallback?.(msg);\n }\n };\n\n async createSessionDataSource(\n copyOption: CopyOption,\n ): Promise<DataSourceBase<DataSourceRowWithBigint> | undefined> {\n const rpcResponse = await this?.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"createSessionTable\",\n params: { copyOption },\n });\n if (isRpcSuccess(rpcResponse)) {\n const { table: sessionTable } = rpcResponse.data as { table: VuuTable };\n return this.#vuuModule?.createDataSource(\n sessionTable.table,\n sessionTable.table,\n this.config,\n );\n } else {\n throw Error(\n `[TickingArrayDataSource] createSessionDataSource ${rpcResponse?.errorMessage}`,\n );\n }\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 = this.#vuuModule?.createDataSource(\n sessionTable.table,\n sessionTable.table,\n this.config,\n );\n\n this.#sessionDataSource?.subscribe(\n {\n range: this.range,\n },\n this.handleSessionMessage,\n );\n } else {\n return this.#vuuModule?.createDataSource(\n sessionTable.table,\n sessionTable.table,\n this.config,\n );\n }\n\n // we need to route messages from the session datasource to listening\n // client whilst still monitoring responses on the source table to which\n // we are currently subscribed.\n } else {\n throw Error(\n `[VuuDataSource] beginEditSession ${rpcResponse.errorMessage}`,\n );\n ///\n }\n }\n\n async editCell(key: string, column: string, data: VuuRowDataItemType) {\n console.log(\n `[VuuDataSource] editCell ${this.#sessionDataSource?.viewport} rowKey ${key}, column ${column}, value ${data}`,\n );\n\n const rpcHost = this.#sessionDataSource ?? this;\n\n return rpcHost.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"editCell\",\n params: {\n column,\n data,\n key,\n },\n });\n }\n\n addRow = async (\n rowData: Record<string, VuuRowDataItemType> = {},\n ): Promise<true | string> => {\n // Ensure each added row has a unique key.\n const keyColumn = this.tableSchema.key;\n const rowKey = (rowData[keyColumn] as string | undefined) ?? uuid();\n const rowDataWithKey: Record<string, VuuRowDataItemType> = {\n ...rowData,\n [keyColumn]: rowKey,\n };\n const response = await this.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"addRow\",\n params: { key: rowKey, data: rowDataWithKey },\n });\n if (isRpcSuccess(response)) {\n return true;\n }\n return response?.errorMessage ?? \"addRow failed\";\n };\n\n deleteRow = async (\n key: string,\n mode: DeleteRowMode = \"hard\",\n ): Promise<true | string> => {\n const rpcHost = this.#sessionDataSource ?? this;\n const response = await rpcHost.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"deleteRow\",\n params: { key, mode },\n });\n if (isRpcSuccess(response)) {\n return true;\n }\n return response?.errorMessage ?? \"deleteRow failed\";\n };\n\n deleteSelectedRows = async (\n mode: DeleteRowMode = \"soft\",\n ): Promise<RpcResultSuccess | RpcResultError> => {\n const rpcHost = this.#sessionDataSource ?? this;\n const response = await rpcHost.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"deleteSelectedRows\",\n params: { mode },\n });\n return (\n response ?? {\n type: \"ERROR_RESULT\",\n errorMessage: \"deleteSelectedRows failed\",\n }\n );\n };\n\n undoRowChange = async (\n key: string,\n ): Promise<RpcResultSuccess | RpcResultError> => {\n const rpcHost = this.#sessionDataSource ?? this;\n const response = await rpcHost.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"undoRowChange\",\n params: { key },\n });\n return (\n response ?? { type: \"ERROR_RESULT\", errorMessage: \"undoRowChange failed\" }\n );\n };\n\n async endEditSession(saveChanges = false) {\n const type = \"RPC_REQUEST\";\n const rpcName = \"endEditSession\";\n\n const sessionDataSource = this.#sessionDataSource;\n\n const rpcHost = sessionDataSource ?? this;\n\n if (sessionDataSource) {\n // timing is important here. By breaking this reference before\n // we send the endEdit RPC call, the application of session edits\n // to the source table will be handled correctly.\n this.#sessionDataSource = undefined;\n }\n\n const rpcResponse = await rpcHost.rpcRequest?.(\n saveChanges\n ? { type, rpcName, params: { save: true } }\n : { type, rpcName, params: {} },\n );\n\n if (isRpcSuccess(rpcResponse)) {\n sessionDataSource?.unsubscribe();\n this.sendRowsToClient(true);\n } else {\n // TODO do we reinstate the sessionDataSource ?\n if (rpcResponse?.errorMessage === \"stale update\") {\n sessionDataSource?.unsubscribe();\n this.sendRowsToClient(true);\n } else {\n throw Error(\"unknown error\");\n }\n }\n }\n\n async rpcRequest(\n rpcRequest: Omit<VuuRpcServiceRequest, \"context\">,\n ): Promise<RpcResultSuccess | RpcResultError> {\n if (isTypeaheadRequest(rpcRequest)) {\n const {\n params: { column, starts },\n } = rpcRequest;\n const data = await this.getTypeaheadSuggestions(column, starts);\n return {\n type: \"SUCCESS_RESULT\",\n data,\n } as RpcResultSuccess;\n } else {\n const rpcService = this.#rpcServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n if (rpcService) {\n return rpcService.service({\n ...rpcRequest,\n context: {\n type: \"VIEWPORT_CONTEXT\",\n viewPortId: this.viewport,\n },\n });\n } else {\n throw Error(\n `[TickingArrayDataSource] no service to handle RPC request ${rpcRequest.rpcName}`,\n );\n }\n }\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcMenuRequest, \"vpId\">,\n ): Promise<VuuRpcMenuResponse> {\n const rpcService = this.#rpcMenuServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n\n if (rpcService) {\n return rpcService.service({\n ...rpcRequest,\n vpId: this.viewport,\n } as VuuRpcMenuRequest);\n } else {\n throw Error(\n `[TickingArrayDataSource] menuRpcCall no service for ${rpcRequest.rpcName}`,\n );\n }\n }\n\n getTypeaheadSuggestions(column: string, pattern?: string): Promise<string[]> {\n if (this.#table) {\n const columnIndex = this.columnMap[column];\n if (columnIndex === undefined) {\n console.warn(\n `[TickingArrayDataSource] getTypeaheadSuggestions. No column ${column}`,\n );\n return Promise.resolve([]);\n } else {\n return makeSuggestions(this.currentData, columnIndex, pattern);\n }\n } else {\n throw Error(\n \"cannot call getTypeaheadSuggestions on TickingDataSource if table has not been provided\",\n );\n }\n }\n\n get visualLink() {\n return this._config.visualLink;\n }\n\n set visualLink(visualLink: LinkDescriptorWithLabel | undefined) {\n this._config = {\n ...this._config,\n visualLink,\n };\n\n if (visualLink) {\n const {\n parentClientVpId,\n link: { fromColumn, toColumn },\n } = visualLink;\n\n if (this.viewport) {\n this.#visualLinkService?.({\n childVpId: this.viewport,\n childColumnName: fromColumn,\n type: \"CREATE_VISUAL_LINK\",\n parentVpId: parentClientVpId,\n parentColumnName: toColumn,\n }).then((response) => {\n this.emit(\n \"visual-link-created\",\n response as DataSourceVisualLinkCreatedMessage,\n );\n });\n }\n } else {\n this.#visualLinkService?.({\n childVpId: this.viewport,\n type: \"REMOVE_VISUAL_LINK\",\n }).then((/* response */) => {\n this.emit(\"visual-link-removed\");\n });\n }\n }\n\n freeze() {\n super.freeze();\n }\n\n unfreeze() {\n super.unfreeze();\n }\n}\n"],"names":["ArrayDataSource","uuid","isRpcSuccess","isInlineEditingSession","isTypeaheadRequest","makeSuggestions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TickingArrayDataSource.js","sources":["../../../packages/vuu-data-test/src/TickingArrayDataSource.ts"],"sourcesContent":["import {\n ArrayDataSource,\n type ArrayDataSourceConstructorProps,\n} from \"@vuu-ui/vuu-data-local\";\nimport type {\n DataSourceBase,\n DataSource,\n DataSourceRowWithBigint,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n DataSourceVisualLinkCreatedMessage,\n DeleteRowMode,\n CopyOption,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n LinkDescriptorWithLabel,\n RpcResultError,\n RpcResultSuccess,\n VuuCreateVisualLink,\n VuuMenu,\n VuuRemoveVisualLink,\n VuuRowDataItemType,\n VuuRpcMenuRequest,\n VuuRpcMenuResponse,\n VuuRpcServiceRequest,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n isRpcSuccess,\n isTypeaheadRequest,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport { StaleUpdateError } from \"@vuu-ui/vuu-utils2\";\nimport type {\n IVuuModule,\n RpcMenuService,\n RpcService,\n} from \"./core/module/VuuModule\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport type { Table } from \"./Table\";\n\nexport type VisualLinkHandler = (\n message: VuuCreateVisualLink | VuuRemoveVisualLink,\n) => Promise<DataSourceVisualLinkCreatedMessage | void>;\n\nexport interface TickingArrayDataSourceConstructorProps\n extends Omit<ArrayDataSourceConstructorProps, \"data\"> {\n data?: Array<VuuRowDataItemType[]>;\n getVisualLinks?: (tableName: string) => LinkDescriptorWithLabel[] | undefined;\n menu?: VuuMenu;\n rpcMenuServices?: RpcMenuService[];\n rpcServices?: RpcService[];\n table?: Table;\n visualLinkService?: VisualLinkHandler;\n vuuModule?: IVuuModule;\n}\n\ntype LinkSubscription = {\n sourceColumnName?: string;\n columnName: string;\n linkType: \"subscribe-link-filter\" | \"subscribe-link-select\";\n};\n\nexport class TickingArrayDataSource extends ArrayDataSource {\n #menuRpcServices: RpcService[] | undefined;\n #pendingVisualLink?: LinkDescriptorWithLabel;\n #rpcMenuServices: RpcMenuService[] | undefined;\n #rpcServices: RpcService[] | undefined;\n #sourceTableDataSource: TickingArrayDataSource | undefined;\n #table?: Table;\n #selectionLinkSubscribers: Map<string, LinkSubscription> | undefined;\n #visualLinkService?: VisualLinkHandler;\n #getVisualLinks?: (\n tableName: string,\n ) => LinkDescriptorWithLabel[] | undefined;\n #vuuModule?: IVuuModule;\n\n constructor({\n data,\n getVisualLinks,\n rpcServices,\n rpcMenuServices,\n table,\n menu,\n visualLink,\n visualLinkService,\n vuuModule,\n ...arrayDataSourceProps\n }: TickingArrayDataSourceConstructorProps) {\n if (data === undefined && table === undefined) {\n throw Error(\"TickingArrayDataSource must be constructed with data\");\n }\n super({\n ...arrayDataSourceProps,\n data: data ?? table?.data ?? [],\n dataMap: table?.map,\n });\n this._menu = menu;\n\n this.#rpcMenuServices = rpcMenuServices;\n this.#pendingVisualLink = visualLink;\n this.#rpcServices = rpcServices;\n this.#table = table;\n this.#visualLinkService = visualLinkService;\n this.#getVisualLinks = getVisualLinks;\n this.#vuuModule = vuuModule;\n\n if (table) {\n this.tableSchema = table.schema;\n table.on(\"insert\", this.insert);\n table.on(\"update\", this.updateRowWithSessionCheck);\n // Use the base-class low-level handler so the overridden deleteRow\n // (which routes through rpcRequest)\n table.on(\"delete\", this.handleDeleteFromTable);\n }\n }\n\n updateRowWithSessionCheck = (\n row: Array<bigint | VuuRowDataItemType>,\n columnName?: string,\n sessionId?: string,\n ) => {\n if (sessionId && sessionId === this.viewport) {\n this.updateRow(row, columnName);\n } else if (sessionId) {\n // will never happen\n console.warn(\"THIS IS NEVER EXPECTED TO HAPPEN\");\n } else {\n this.updateRow(row, columnName);\n }\n };\n\n async subscribe(\n subscribeProps: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n const subscription = super.subscribe(subscribeProps, callback);\n // if (subscribeProps.range) {\n // this.#updateGenerator?.setRange(subscribeProps.range);\n // }\n if (this.#pendingVisualLink) {\n this.visualLink = this.#pendingVisualLink;\n this.#pendingVisualLink = undefined;\n }\n\n return subscription;\n }\n\n unsubscribe() {\n super.unsubscribe();\n this.#table = undefined;\n }\n\n set links(links: LinkDescriptorWithLabel[] | undefined) {\n super.links = links;\n }\n\n get links() {\n return this.#getVisualLinks?.(this.table.table);\n }\n\n getSelectedRowIds(): string[] {\n return Array.from(this.selectedRows);\n }\n\n isSessionDataSourceOf(dataSource: DataSource): boolean {\n return this.#sourceTableDataSource === dataSource;\n }\n\n async createSessionDataSource(\n copyOption: CopyOption,\n ): Promise<DataSourceBase<DataSourceRowWithBigint> | undefined> {\n const rpcResponse = await this?.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"createSessionTable\",\n params: { copyOption },\n });\n if (isRpcSuccess(rpcResponse)) {\n const { table: sessionTable } = rpcResponse.data as { table: VuuTable };\n const columns = this.config.columns.includes(\"vuu_action\")\n ? this.config.columns\n : this.config.columns.concat(\"vuu_action\");\n const sessionDataSource = this.#vuuModule?.createDataSource(\n sessionTable.table,\n sessionTable.table,\n { ...this.config, columns },\n );\n if (sessionDataSource instanceof TickingArrayDataSource) {\n sessionDataSource.#sourceTableDataSource = this;\n }\n return sessionDataSource;\n } else {\n throw Error(\n `[TickingArrayDataSource] createSessionDataSource ${rpcResponse?.errorMessage}`,\n );\n }\n }\n\n async editCell(key: string, column: string, data: VuuRowDataItemType) {\n return this.rpcRequest({\n type: \"RPC_REQUEST\",\n rpcName: \"editCell\",\n params: {\n column,\n data,\n key,\n },\n });\n }\n\n addRow = async (\n rowData: Record<string, VuuRowDataItemType> = {},\n ): Promise<true | string> => {\n // Ensure each added row has a unique key.\n const keyColumn = this.tableSchema.key;\n const rowKey = (rowData[keyColumn] as string | undefined) ?? uuid();\n const rowDataWithKey: Record<string, VuuRowDataItemType> = {\n ...rowData,\n [keyColumn]: rowKey,\n };\n const response = await this.rpcRequest?.({\n type: \"RPC_REQUEST\",\n rpcName: \"addRow\",\n params: { key: rowKey, data: rowDataWithKey },\n });\n if (isRpcSuccess(response)) {\n return true;\n }\n return response?.errorMessage ?? \"addRow failed\";\n };\n\n deleteRow = async (\n key: string,\n mode: DeleteRowMode = \"hard\",\n ): Promise<true | string> => {\n const response = await this.rpcRequest({\n type: \"RPC_REQUEST\",\n rpcName: \"deleteRow\",\n params: { key, mode },\n });\n if (isRpcSuccess(response)) {\n return true;\n }\n return response?.errorMessage ?? \"deleteRow failed\";\n };\n\n deleteSelectedRows = async (\n mode: DeleteRowMode = \"soft\",\n ): Promise<RpcResultSuccess | RpcResultError> => {\n const response = await this.rpcRequest({\n type: \"RPC_REQUEST\",\n rpcName: \"deleteSelectedRows\",\n params: { mode },\n });\n return (\n response ?? {\n type: \"ERROR_RESULT\",\n errorMessage: \"deleteSelectedRows failed\",\n }\n );\n };\n\n undoRowChange = async (\n key: string,\n ): Promise<RpcResultSuccess | RpcResultError> => {\n const response = await this.rpcRequest({\n type: \"RPC_REQUEST\",\n rpcName: \"undoRowChange\",\n params: { key },\n });\n return (\n response ?? { type: \"ERROR_RESULT\", errorMessage: \"undoRowChange failed\" }\n );\n };\n\n set columns(columns: string[]) {\n super.columns = columns;\n }\n\n get columns() {\n return super.columns;\n }\n\n async endEditSession(saveChanges = false) {\n const type = \"RPC_REQUEST\";\n const rpcName = \"endEditSession\";\n\n const rpcResponse = await this.rpcRequest(\n saveChanges\n ? { type, rpcName, params: { save: true } }\n : { type, rpcName, params: {} },\n );\n\n if (isRpcSuccess(rpcResponse)) {\n const sourceTableDataSource = this.#sourceTableDataSource;\n if (sourceTableDataSource) {\n this.#sourceTableDataSource = undefined;\n this.unsubscribe();\n } else {\n this.sendRowsToClient(true);\n }\n } else {\n if (rpcResponse?.errorMessage === \"stale update\") {\n throw new StaleUpdateError(rpcResponse.errorMessage);\n } else {\n throw Error(rpcResponse?.errorMessage ?? \"endEditSession failed\");\n }\n }\n }\n\n async rpcRequest(\n rpcRequest: Omit<VuuRpcServiceRequest, \"context\">,\n ): Promise<RpcResultSuccess | RpcResultError> {\n if (isTypeaheadRequest(rpcRequest)) {\n const {\n params: { column, starts },\n } = rpcRequest;\n const data = await this.getTypeaheadSuggestions(column, starts);\n return {\n type: \"SUCCESS_RESULT\",\n data,\n } as RpcResultSuccess;\n } else {\n const rpcService = this.#rpcServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n if (rpcService) {\n return rpcService.service({\n ...rpcRequest,\n context: {\n type: \"VIEWPORT_CONTEXT\",\n viewPortId: this.viewport,\n },\n });\n } else {\n throw Error(\n `[TickingArrayDataSource] no service to handle RPC request ${rpcRequest.rpcName}`,\n );\n }\n }\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcMenuRequest, \"vpId\">,\n ): Promise<VuuRpcMenuResponse> {\n const rpcService = this.#rpcMenuServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n\n if (rpcService) {\n return rpcService.service({\n ...rpcRequest,\n vpId: this.viewport,\n } as VuuRpcMenuRequest);\n } else {\n throw Error(\n `[TickingArrayDataSource] menuRpcCall no service for ${rpcRequest.rpcName}`,\n );\n }\n }\n\n getTypeaheadSuggestions(column: string, pattern?: string): Promise<string[]> {\n if (this.#table) {\n const columnIndex = this.columnMap[column];\n if (columnIndex === undefined) {\n console.warn(\n `[TickingArrayDataSource] getTypeaheadSuggestions. No column ${column}`,\n );\n return Promise.resolve([]);\n } else {\n return makeSuggestions(this.currentData, columnIndex, pattern);\n }\n } else {\n throw Error(\n \"cannot call getTypeaheadSuggestions on TickingDataSource if table has not been provided\",\n );\n }\n }\n\n get visualLink() {\n return this._config.visualLink;\n }\n\n set visualLink(visualLink: LinkDescriptorWithLabel | undefined) {\n this._config = {\n ...this._config,\n visualLink,\n };\n\n if (visualLink) {\n const {\n parentClientVpId,\n link: { fromColumn, toColumn },\n } = visualLink;\n\n if (this.viewport) {\n this.#visualLinkService?.({\n childVpId: this.viewport,\n childColumnName: fromColumn,\n type: \"CREATE_VISUAL_LINK\",\n parentVpId: parentClientVpId,\n parentColumnName: toColumn,\n }).then((response) => {\n this.emit(\n \"visual-link-created\",\n response as DataSourceVisualLinkCreatedMessage,\n );\n });\n }\n } else {\n this.#visualLinkService?.({\n childVpId: this.viewport,\n type: \"REMOVE_VISUAL_LINK\",\n }).then((/* response */) => {\n this.emit(\"visual-link-removed\");\n });\n }\n }\n\n freeze() {\n super.freeze();\n }\n\n unfreeze() {\n super.unfreeze();\n }\n}\n"],"names":["ArrayDataSource","uuid","isRpcSuccess","StaleUpdateError","isTypeaheadRequest","makeSuggestions"],"mappings":"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"}
|