@vuu-ui/vuu-data-local 0.0.26
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/LICENSE +201 -0
- package/README.md +0 -0
- package/cjs/array-data-source/aggregate-utils.js +243 -0
- package/cjs/array-data-source/aggregate-utils.js.map +1 -0
- package/cjs/array-data-source/array-data-source.js +539 -0
- package/cjs/array-data-source/array-data-source.js.map +1 -0
- package/cjs/array-data-source/array-data-utils.js +52 -0
- package/cjs/array-data-source/array-data-utils.js.map +1 -0
- package/cjs/array-data-source/group-utils.js +169 -0
- package/cjs/array-data-source/group-utils.js.map +1 -0
- package/cjs/array-data-source/sort-utils.js +54 -0
- package/cjs/array-data-source/sort-utils.js.map +1 -0
- package/cjs/index.js +10 -0
- package/cjs/index.js.map +1 -0
- package/cjs/json-data-source/json-data-source.js +388 -0
- package/cjs/json-data-source/json-data-source.js.map +1 -0
- package/esm/array-data-source/aggregate-utils.js +241 -0
- package/esm/array-data-source/aggregate-utils.js.map +1 -0
- package/esm/array-data-source/array-data-source.js +537 -0
- package/esm/array-data-source/array-data-source.js.map +1 -0
- package/esm/array-data-source/array-data-utils.js +49 -0
- package/esm/array-data-source/array-data-utils.js.map +1 -0
- package/esm/array-data-source/group-utils.js +165 -0
- package/esm/array-data-source/group-utils.js.map +1 -0
- package/esm/array-data-source/sort-utils.js +52 -0
- package/esm/array-data-source/sort-utils.js.map +1 -0
- package/esm/index.js +3 -0
- package/esm/index.js.map +1 -0
- package/esm/json-data-source/json-data-source.js +386 -0
- package/esm/json-data-source/json-data-source.js.map +1 -0
- package/package.json +34 -0
- package/types/array-data-source/aggregate-utils.d.ts +8 -0
- package/types/array-data-source/array-data-source.d.ts +81 -0
- package/types/array-data-source/array-data-utils.d.ts +4 -0
- package/types/array-data-source/group-utils.d.ts +10 -0
- package/types/array-data-source/sort-utils.d.ts +4 -0
- package/types/index.d.ts +2 -0
- package/types/json-data-source/json-data-source.d.ts +54 -0
|
@@ -0,0 +1,539 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vuuFilterParser = require('@vuu-ui/vuu-filter-parser');
|
|
4
|
+
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
5
|
+
var aggregateUtils = require('./aggregate-utils.js');
|
|
6
|
+
var arrayDataUtils = require('./array-data-utils.js');
|
|
7
|
+
var groupUtils = require('./group-utils.js');
|
|
8
|
+
var sortUtils = require('./sort-utils.js');
|
|
9
|
+
|
|
10
|
+
var __accessCheck = (obj, member, msg) => {
|
|
11
|
+
if (!member.has(obj))
|
|
12
|
+
throw TypeError("Cannot " + msg);
|
|
13
|
+
};
|
|
14
|
+
var __privateGet = (obj, member, getter) => {
|
|
15
|
+
__accessCheck(obj, member, "read from private field");
|
|
16
|
+
return getter ? getter.call(obj) : member.get(obj);
|
|
17
|
+
};
|
|
18
|
+
var __privateAdd = (obj, member, value) => {
|
|
19
|
+
if (member.has(obj))
|
|
20
|
+
throw TypeError("Cannot add the same private member more than once");
|
|
21
|
+
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
22
|
+
};
|
|
23
|
+
var __privateSet = (obj, member, value, setter) => {
|
|
24
|
+
__accessCheck(obj, member, "write to private field");
|
|
25
|
+
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
26
|
+
return value;
|
|
27
|
+
};
|
|
28
|
+
var _columnMap, _config, _data, _links, _range, _selectedRowsCount, _size, _status, _title;
|
|
29
|
+
const { debug, info } = vuuUtils.logger("ArrayDataSource");
|
|
30
|
+
const { KEY } = vuuUtils.metadataKeys;
|
|
31
|
+
const toDataSourceRow = (key) => (data, index) => {
|
|
32
|
+
return [index, index, true, false, 1, 0, String(data[key]), 0, ...data];
|
|
33
|
+
};
|
|
34
|
+
const buildTableSchema = (columns, keyColumn) => {
|
|
35
|
+
const schema = {
|
|
36
|
+
columns: columns.map(({ name, serverDataType = "string" }) => ({
|
|
37
|
+
name,
|
|
38
|
+
serverDataType
|
|
39
|
+
})),
|
|
40
|
+
key: keyColumn ?? columns[0].name,
|
|
41
|
+
table: { module: "", table: "Array" }
|
|
42
|
+
};
|
|
43
|
+
return schema;
|
|
44
|
+
};
|
|
45
|
+
class ArrayDataSource extends vuuUtils.EventEmitter {
|
|
46
|
+
constructor({
|
|
47
|
+
aggregations,
|
|
48
|
+
// different from RemoteDataSource
|
|
49
|
+
columnDescriptors,
|
|
50
|
+
data,
|
|
51
|
+
dataMap,
|
|
52
|
+
filter,
|
|
53
|
+
groupBy,
|
|
54
|
+
keyColumn,
|
|
55
|
+
rangeChangeRowset = "delta",
|
|
56
|
+
sort,
|
|
57
|
+
title,
|
|
58
|
+
viewport
|
|
59
|
+
}) {
|
|
60
|
+
super();
|
|
61
|
+
this.lastRangeServed = { from: 0, to: 0 };
|
|
62
|
+
this.openTreeNodes = [];
|
|
63
|
+
/** Map reflecting positions of columns in client data sent to user */
|
|
64
|
+
__privateAdd(this, _columnMap, void 0);
|
|
65
|
+
__privateAdd(this, _config, vuuUtils.vanillaConfig);
|
|
66
|
+
__privateAdd(this, _data, void 0);
|
|
67
|
+
__privateAdd(this, _links, void 0);
|
|
68
|
+
__privateAdd(this, _range, vuuUtils.NULL_RANGE);
|
|
69
|
+
__privateAdd(this, _selectedRowsCount, 0);
|
|
70
|
+
__privateAdd(this, _size, 0);
|
|
71
|
+
__privateAdd(this, _status, "initialising");
|
|
72
|
+
__privateAdd(this, _title, void 0);
|
|
73
|
+
this.selectedRows = [];
|
|
74
|
+
this.keys = new vuuUtils.KeySet(__privateGet(this, _range));
|
|
75
|
+
this.processedData = void 0;
|
|
76
|
+
this.insert = (row) => {
|
|
77
|
+
const dataSourceRow = toDataSourceRow(this.key)(row, this.size);
|
|
78
|
+
__privateGet(this, _data).push(dataSourceRow);
|
|
79
|
+
const { from, to } = __privateGet(this, _range);
|
|
80
|
+
const [rowIdx] = dataSourceRow;
|
|
81
|
+
if (rowIdx >= from && rowIdx < to) {
|
|
82
|
+
this.sendRowsToClient();
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
this.update = (row, columnName) => {
|
|
86
|
+
const keyValue = row[this.key];
|
|
87
|
+
const colIndex = __privateGet(this, _columnMap)[columnName];
|
|
88
|
+
const dataColIndex = this.dataMap?.[columnName];
|
|
89
|
+
const dataIndex = __privateGet(this, _data).findIndex((row2) => row2[KEY] === keyValue);
|
|
90
|
+
if (dataIndex !== -1 && dataColIndex !== void 0) {
|
|
91
|
+
const dataSourceRow = __privateGet(this, _data)[dataIndex];
|
|
92
|
+
dataSourceRow[colIndex] = row[dataColIndex];
|
|
93
|
+
const { from, to } = __privateGet(this, _range);
|
|
94
|
+
const [rowIdx] = dataSourceRow;
|
|
95
|
+
if (rowIdx >= from && rowIdx < to) {
|
|
96
|
+
this.sendRowsToClient(false, dataSourceRow);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
this.updateRow = (row) => {
|
|
101
|
+
const keyValue = row[this.key];
|
|
102
|
+
const dataIndex = __privateGet(this, _data).findIndex((row2) => row2[KEY] === keyValue);
|
|
103
|
+
if (dataIndex !== -1) {
|
|
104
|
+
const dataSourceRow = toDataSourceRow(this.key)(row, dataIndex);
|
|
105
|
+
__privateGet(this, _data)[dataIndex] = dataSourceRow;
|
|
106
|
+
const { from, to } = __privateGet(this, _range);
|
|
107
|
+
if (dataIndex >= from && dataIndex < to) {
|
|
108
|
+
this.sendRowsToClient(false, dataSourceRow);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
if (!data || !columnDescriptors) {
|
|
113
|
+
throw Error(
|
|
114
|
+
"ArrayDataSource constructor called without data or without columnDescriptors"
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
this.columnDescriptors = columnDescriptors;
|
|
118
|
+
this.dataMap = dataMap;
|
|
119
|
+
this.key = keyColumn ? this.columnDescriptors.findIndex((col) => col.name === keyColumn) : 0;
|
|
120
|
+
this.rangeChangeRowset = rangeChangeRowset;
|
|
121
|
+
this.tableSchema = buildTableSchema(columnDescriptors, keyColumn);
|
|
122
|
+
this.viewport = viewport || vuuUtils.uuid();
|
|
123
|
+
__privateSet(this, _size, data.length);
|
|
124
|
+
__privateSet(this, _title, title);
|
|
125
|
+
const columns = columnDescriptors.map((col) => col.name);
|
|
126
|
+
__privateSet(this, _columnMap, vuuUtils.buildColumnMap(columns));
|
|
127
|
+
this.dataIndices = arrayDataUtils.buildDataToClientMap(__privateGet(this, _columnMap), this.dataMap);
|
|
128
|
+
__privateSet(this, _data, data.map(toDataSourceRow(this.key)));
|
|
129
|
+
this.config = {
|
|
130
|
+
...__privateGet(this, _config),
|
|
131
|
+
aggregations: aggregations || __privateGet(this, _config).aggregations,
|
|
132
|
+
columns,
|
|
133
|
+
filter: filter || __privateGet(this, _config).filter,
|
|
134
|
+
groupBy: groupBy || __privateGet(this, _config).groupBy,
|
|
135
|
+
sort: sort || __privateGet(this, _config).sort
|
|
136
|
+
};
|
|
137
|
+
debug?.(`columnMap: ${JSON.stringify(__privateGet(this, _columnMap))}`);
|
|
138
|
+
}
|
|
139
|
+
async subscribe({
|
|
140
|
+
viewport = this.viewport ?? vuuUtils.uuid(),
|
|
141
|
+
columns,
|
|
142
|
+
aggregations,
|
|
143
|
+
range,
|
|
144
|
+
sort,
|
|
145
|
+
groupBy,
|
|
146
|
+
filter
|
|
147
|
+
}, callback) {
|
|
148
|
+
this.clientCallback = callback;
|
|
149
|
+
this.viewport = viewport;
|
|
150
|
+
__privateSet(this, _status, "subscribed");
|
|
151
|
+
this.lastRangeServed = { from: 0, to: 0 };
|
|
152
|
+
let config = __privateGet(this, _config);
|
|
153
|
+
const hasConfigProps = aggregations || columns || filter || groupBy || sort;
|
|
154
|
+
if (hasConfigProps) {
|
|
155
|
+
if (range) {
|
|
156
|
+
__privateSet(this, _range, range);
|
|
157
|
+
}
|
|
158
|
+
config = {
|
|
159
|
+
...config,
|
|
160
|
+
aggregations: aggregations || __privateGet(this, _config).aggregations,
|
|
161
|
+
columns: columns || __privateGet(this, _config).columns,
|
|
162
|
+
filter: filter || __privateGet(this, _config).filter,
|
|
163
|
+
groupBy: groupBy || __privateGet(this, _config).groupBy,
|
|
164
|
+
sort: sort || __privateGet(this, _config).sort
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
this.clientCallback?.({
|
|
168
|
+
...config,
|
|
169
|
+
type: "subscribed",
|
|
170
|
+
clientViewportId: this.viewport,
|
|
171
|
+
range: __privateGet(this, _range),
|
|
172
|
+
tableSchema: this.tableSchema
|
|
173
|
+
});
|
|
174
|
+
if (hasConfigProps) {
|
|
175
|
+
this.config = config;
|
|
176
|
+
} else {
|
|
177
|
+
this.clientCallback({
|
|
178
|
+
clientViewportId: this.viewport,
|
|
179
|
+
mode: "size-only",
|
|
180
|
+
type: "viewport-update",
|
|
181
|
+
size: __privateGet(this, _data).length
|
|
182
|
+
});
|
|
183
|
+
if (range) {
|
|
184
|
+
this.range = range;
|
|
185
|
+
this.sendRowsToClient();
|
|
186
|
+
} else if (__privateGet(this, _range) !== vuuUtils.NULL_RANGE) {
|
|
187
|
+
this.sendRowsToClient();
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
unsubscribe() {
|
|
192
|
+
console.log(`unsubscribe noop`);
|
|
193
|
+
}
|
|
194
|
+
suspend() {
|
|
195
|
+
console.log(`suspend #${this.viewport}, current status ${__privateGet(this, _status)}`);
|
|
196
|
+
info?.(`suspend #${this.viewport}, current status ${__privateGet(this, _status)}`);
|
|
197
|
+
__privateSet(this, _status, "suspended");
|
|
198
|
+
return this;
|
|
199
|
+
}
|
|
200
|
+
resume() {
|
|
201
|
+
console.log(`resume #${this.viewport}, current status ${__privateGet(this, _status)}`);
|
|
202
|
+
const isSuspended = __privateGet(this, _status) === "suspended";
|
|
203
|
+
info?.(`resume #${this.viewport}, current status ${__privateGet(this, _status)}`);
|
|
204
|
+
console.log(`resume noop`);
|
|
205
|
+
if (isSuspended) {
|
|
206
|
+
__privateSet(this, _status, "subscribed");
|
|
207
|
+
}
|
|
208
|
+
return this;
|
|
209
|
+
}
|
|
210
|
+
disable() {
|
|
211
|
+
console.log(`disable noop`);
|
|
212
|
+
return this;
|
|
213
|
+
}
|
|
214
|
+
enable() {
|
|
215
|
+
console.log(`enable noop`);
|
|
216
|
+
return this;
|
|
217
|
+
}
|
|
218
|
+
select(selected) {
|
|
219
|
+
__privateSet(this, _selectedRowsCount, selected.length);
|
|
220
|
+
debug?.(`select ${JSON.stringify(selected)}`);
|
|
221
|
+
this.selectedRows = selected;
|
|
222
|
+
this.setRange(vuuUtils.resetRange(__privateGet(this, _range)), true);
|
|
223
|
+
}
|
|
224
|
+
openTreeNode(key) {
|
|
225
|
+
this.openTreeNodes.push(key);
|
|
226
|
+
this.processedData = groupUtils.expandGroup(
|
|
227
|
+
this.openTreeNodes,
|
|
228
|
+
__privateGet(this, _data),
|
|
229
|
+
__privateGet(this, _config).groupBy,
|
|
230
|
+
__privateGet(this, _columnMap),
|
|
231
|
+
this.groupMap,
|
|
232
|
+
this.processedData
|
|
233
|
+
);
|
|
234
|
+
this.setRange(vuuUtils.resetRange(__privateGet(this, _range)), true);
|
|
235
|
+
}
|
|
236
|
+
closeTreeNode(key) {
|
|
237
|
+
this.openTreeNodes = this.openTreeNodes.filter((value) => value !== key);
|
|
238
|
+
if (this.processedData) {
|
|
239
|
+
this.processedData = groupUtils.collapseGroup(key, this.processedData);
|
|
240
|
+
this.setRange(vuuUtils.resetRange(__privateGet(this, _range)), true);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
get links() {
|
|
244
|
+
return __privateGet(this, _links);
|
|
245
|
+
}
|
|
246
|
+
get menu() {
|
|
247
|
+
return this._menu;
|
|
248
|
+
}
|
|
249
|
+
get status() {
|
|
250
|
+
return __privateGet(this, _status);
|
|
251
|
+
}
|
|
252
|
+
get data() {
|
|
253
|
+
return __privateGet(this, _data);
|
|
254
|
+
}
|
|
255
|
+
// Only used by the UpdateGenerator
|
|
256
|
+
get currentData() {
|
|
257
|
+
return this.processedData ?? __privateGet(this, _data);
|
|
258
|
+
}
|
|
259
|
+
get table() {
|
|
260
|
+
return this.tableSchema.table;
|
|
261
|
+
}
|
|
262
|
+
get config() {
|
|
263
|
+
return __privateGet(this, _config);
|
|
264
|
+
}
|
|
265
|
+
set config(config) {
|
|
266
|
+
const configChanges = this.applyConfig(config);
|
|
267
|
+
if (configChanges) {
|
|
268
|
+
if (config) {
|
|
269
|
+
const originalConfig = __privateGet(this, _config);
|
|
270
|
+
const newConfig = config?.filter?.filter && config?.filter.filterStruct === void 0 ? {
|
|
271
|
+
...config,
|
|
272
|
+
filter: {
|
|
273
|
+
filter: config.filter.filter,
|
|
274
|
+
filterStruct: vuuFilterParser.parseFilter(config.filter.filter)
|
|
275
|
+
}
|
|
276
|
+
} : config;
|
|
277
|
+
__privateSet(this, _config, vuuUtils.withConfigDefaults(newConfig));
|
|
278
|
+
let processedData;
|
|
279
|
+
if (vuuUtils.hasFilter(config)) {
|
|
280
|
+
const { filter, filterStruct = vuuFilterParser.parseFilter(filter) } = config.filter;
|
|
281
|
+
if (filterStruct) {
|
|
282
|
+
const fn = vuuFilterParser.filterPredicate(__privateGet(this, _columnMap), filterStruct);
|
|
283
|
+
processedData = __privateGet(this, _data).filter(fn);
|
|
284
|
+
} else {
|
|
285
|
+
throw Error("filter must include filterStruct");
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
if (vuuUtils.hasSort(config)) {
|
|
289
|
+
processedData = sortUtils.sortRows(
|
|
290
|
+
processedData ?? __privateGet(this, _data),
|
|
291
|
+
config.sort,
|
|
292
|
+
__privateGet(this, _columnMap)
|
|
293
|
+
);
|
|
294
|
+
}
|
|
295
|
+
if (this.openTreeNodes.length > 0 && vuuUtils.isGroupByChanged(originalConfig, config)) {
|
|
296
|
+
if (__privateGet(this, _config).groupBy.length === 0) {
|
|
297
|
+
this.openTreeNodes.length = 0;
|
|
298
|
+
} else {
|
|
299
|
+
console.log("adjust the openTReeNodes groupBy changed ", {
|
|
300
|
+
originalGroupBy: originalConfig.groupBy,
|
|
301
|
+
newGroupBy: newConfig.groupBy
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
if (vuuUtils.hasGroupBy(config)) {
|
|
306
|
+
const [groupedData, groupMap] = groupUtils.groupRows(
|
|
307
|
+
processedData ?? __privateGet(this, _data),
|
|
308
|
+
config.groupBy,
|
|
309
|
+
__privateGet(this, _columnMap)
|
|
310
|
+
);
|
|
311
|
+
this.groupMap = groupMap;
|
|
312
|
+
processedData = groupedData;
|
|
313
|
+
if (this.openTreeNodes.length > 0) {
|
|
314
|
+
processedData = groupUtils.expandGroup(
|
|
315
|
+
this.openTreeNodes,
|
|
316
|
+
__privateGet(this, _data),
|
|
317
|
+
__privateGet(this, _config).groupBy,
|
|
318
|
+
__privateGet(this, _columnMap),
|
|
319
|
+
this.groupMap,
|
|
320
|
+
processedData
|
|
321
|
+
);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
this.processedData = processedData?.map((row, i) => {
|
|
325
|
+
const dolly = row.slice();
|
|
326
|
+
dolly[0] = i;
|
|
327
|
+
dolly[1] = i;
|
|
328
|
+
return dolly;
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
this.setRange(vuuUtils.resetRange(__privateGet(this, _range)), true);
|
|
332
|
+
this.emit("config", __privateGet(this, _config), void 0, configChanges);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
applyConfig(config) {
|
|
336
|
+
const { noChanges, ...otherChanges } = vuuUtils.isConfigChanged(
|
|
337
|
+
__privateGet(this, _config),
|
|
338
|
+
config
|
|
339
|
+
);
|
|
340
|
+
if (noChanges !== true) {
|
|
341
|
+
if (config) {
|
|
342
|
+
const newConfig = config?.filter?.filter && config?.filter.filterStruct === void 0 ? {
|
|
343
|
+
...config,
|
|
344
|
+
filter: {
|
|
345
|
+
filter: config.filter.filter,
|
|
346
|
+
filterStruct: vuuFilterParser.parseFilter(config.filter.filter)
|
|
347
|
+
}
|
|
348
|
+
} : config;
|
|
349
|
+
__privateSet(this, _config, vuuUtils.withConfigDefaults(newConfig));
|
|
350
|
+
return otherChanges;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
get selectedRowsCount() {
|
|
355
|
+
return __privateGet(this, _selectedRowsCount);
|
|
356
|
+
}
|
|
357
|
+
get size() {
|
|
358
|
+
return this.processedData?.length ?? __privateGet(this, _data).length;
|
|
359
|
+
}
|
|
360
|
+
get range() {
|
|
361
|
+
return __privateGet(this, _range);
|
|
362
|
+
}
|
|
363
|
+
set range(range) {
|
|
364
|
+
this.setRange(range);
|
|
365
|
+
}
|
|
366
|
+
delete(row) {
|
|
367
|
+
console.log(`delete row ${row.join(",")}`);
|
|
368
|
+
}
|
|
369
|
+
setRange(range, forceFullRefresh = false) {
|
|
370
|
+
if (range.from !== __privateGet(this, _range).from || range.to !== __privateGet(this, _range).to) {
|
|
371
|
+
__privateSet(this, _range, range);
|
|
372
|
+
const keysResequenced = this.keys.reset(range);
|
|
373
|
+
this.sendRowsToClient(forceFullRefresh || keysResequenced);
|
|
374
|
+
} else if (forceFullRefresh) {
|
|
375
|
+
this.sendRowsToClient(forceFullRefresh);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
sendRowsToClient(forceFullRefresh = false, row) {
|
|
379
|
+
if (row) {
|
|
380
|
+
this.clientCallback?.({
|
|
381
|
+
clientViewportId: this.viewport,
|
|
382
|
+
mode: "update",
|
|
383
|
+
rows: [
|
|
384
|
+
arrayDataUtils.toClientRow(row, this.keys, this.selectedRows, this.dataIndices)
|
|
385
|
+
],
|
|
386
|
+
type: "viewport-update"
|
|
387
|
+
});
|
|
388
|
+
} else {
|
|
389
|
+
const rowRange = this.rangeChangeRowset === "delta" && !forceFullRefresh ? vuuUtils.rangeNewItems(this.lastRangeServed, __privateGet(this, _range)) : __privateGet(this, _range);
|
|
390
|
+
const data = this.processedData ?? __privateGet(this, _data);
|
|
391
|
+
const rowsWithinViewport = data.slice(rowRange.from, rowRange.to).map(
|
|
392
|
+
(row2) => arrayDataUtils.toClientRow(row2, this.keys, this.selectedRows, this.dataIndices)
|
|
393
|
+
);
|
|
394
|
+
this.clientCallback?.({
|
|
395
|
+
clientViewportId: this.viewport,
|
|
396
|
+
mode: "batch",
|
|
397
|
+
rows: rowsWithinViewport,
|
|
398
|
+
size: data.length,
|
|
399
|
+
type: "viewport-update"
|
|
400
|
+
});
|
|
401
|
+
this.lastRangeServed = {
|
|
402
|
+
from: __privateGet(this, _range).from,
|
|
403
|
+
to: Math.min(
|
|
404
|
+
__privateGet(this, _range).to,
|
|
405
|
+
__privateGet(this, _range).from + rowsWithinViewport.length
|
|
406
|
+
)
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
get columns() {
|
|
411
|
+
return __privateGet(this, _config).columns;
|
|
412
|
+
}
|
|
413
|
+
set columns(columns) {
|
|
414
|
+
const addedColumns = vuuUtils.getAddedItems(this.config.columns, columns);
|
|
415
|
+
if (addedColumns.length > 0) {
|
|
416
|
+
const columnsWithoutDescriptors = vuuUtils.getMissingItems(
|
|
417
|
+
this.columnDescriptors,
|
|
418
|
+
addedColumns,
|
|
419
|
+
(col) => col.name
|
|
420
|
+
);
|
|
421
|
+
console.log(`columnsWithoutDescriptors`, {
|
|
422
|
+
columnsWithoutDescriptors
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
__privateSet(this, _columnMap, vuuUtils.buildColumnMap(columns));
|
|
426
|
+
this.dataIndices = arrayDataUtils.buildDataToClientMap(__privateGet(this, _columnMap), this.dataMap);
|
|
427
|
+
this.config = {
|
|
428
|
+
...__privateGet(this, _config),
|
|
429
|
+
columns
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
get aggregations() {
|
|
433
|
+
return __privateGet(this, _config).aggregations;
|
|
434
|
+
}
|
|
435
|
+
set aggregations(aggregations) {
|
|
436
|
+
__privateSet(this, _config, {
|
|
437
|
+
...__privateGet(this, _config),
|
|
438
|
+
aggregations
|
|
439
|
+
});
|
|
440
|
+
const targetData = this.processedData ?? __privateGet(this, _data);
|
|
441
|
+
const leafData = __privateGet(this, _data);
|
|
442
|
+
aggregateUtils.aggregateData(
|
|
443
|
+
aggregations,
|
|
444
|
+
targetData,
|
|
445
|
+
__privateGet(this, _config).groupBy,
|
|
446
|
+
leafData,
|
|
447
|
+
__privateGet(this, _columnMap),
|
|
448
|
+
this.groupMap
|
|
449
|
+
);
|
|
450
|
+
this.setRange(vuuUtils.resetRange(__privateGet(this, _range)), true);
|
|
451
|
+
this.emit("config", __privateGet(this, _config));
|
|
452
|
+
}
|
|
453
|
+
get sort() {
|
|
454
|
+
return __privateGet(this, _config).sort;
|
|
455
|
+
}
|
|
456
|
+
set sort(sort) {
|
|
457
|
+
debug?.(`sort ${JSON.stringify(sort)}`);
|
|
458
|
+
this.config = {
|
|
459
|
+
...__privateGet(this, _config),
|
|
460
|
+
sort
|
|
461
|
+
};
|
|
462
|
+
}
|
|
463
|
+
get filter() {
|
|
464
|
+
return __privateGet(this, _config).filter;
|
|
465
|
+
}
|
|
466
|
+
set filter(filter) {
|
|
467
|
+
debug?.(`filter ${JSON.stringify(filter)}`);
|
|
468
|
+
this.config = {
|
|
469
|
+
...__privateGet(this, _config),
|
|
470
|
+
filter
|
|
471
|
+
};
|
|
472
|
+
}
|
|
473
|
+
get groupBy() {
|
|
474
|
+
return __privateGet(this, _config).groupBy;
|
|
475
|
+
}
|
|
476
|
+
set groupBy(groupBy) {
|
|
477
|
+
this.config = {
|
|
478
|
+
...__privateGet(this, _config),
|
|
479
|
+
groupBy
|
|
480
|
+
};
|
|
481
|
+
}
|
|
482
|
+
get title() {
|
|
483
|
+
return __privateGet(this, _title);
|
|
484
|
+
}
|
|
485
|
+
set title(title) {
|
|
486
|
+
__privateSet(this, _title, title);
|
|
487
|
+
}
|
|
488
|
+
get _clientCallback() {
|
|
489
|
+
return this.clientCallback;
|
|
490
|
+
}
|
|
491
|
+
createLink({
|
|
492
|
+
parentVpId,
|
|
493
|
+
link: { fromColumn, toColumn }
|
|
494
|
+
}) {
|
|
495
|
+
console.log("create link", {
|
|
496
|
+
parentVpId,
|
|
497
|
+
fromColumn,
|
|
498
|
+
toColumn
|
|
499
|
+
});
|
|
500
|
+
}
|
|
501
|
+
removeLink() {
|
|
502
|
+
console.log("remove link");
|
|
503
|
+
}
|
|
504
|
+
findRow(rowKey) {
|
|
505
|
+
const row = __privateGet(this, _data)[rowKey];
|
|
506
|
+
if (row) {
|
|
507
|
+
return row;
|
|
508
|
+
} else {
|
|
509
|
+
throw `no row found for key ${rowKey}`;
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
applyEdit(row, columnName, value) {
|
|
513
|
+
console.log(`ArrayDataSource applyEdit ${row[0]} ${columnName} ${value}`);
|
|
514
|
+
return Promise.resolve(true);
|
|
515
|
+
}
|
|
516
|
+
async menuRpcCall(rpcRequest) {
|
|
517
|
+
return new Promise((resolve) => {
|
|
518
|
+
const { type } = rpcRequest;
|
|
519
|
+
switch (type) {
|
|
520
|
+
case "VP_EDIT_CELL_RPC":
|
|
521
|
+
break;
|
|
522
|
+
default:
|
|
523
|
+
resolve(void 0);
|
|
524
|
+
}
|
|
525
|
+
});
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
_columnMap = new WeakMap();
|
|
529
|
+
_config = new WeakMap();
|
|
530
|
+
_data = new WeakMap();
|
|
531
|
+
_links = new WeakMap();
|
|
532
|
+
_range = new WeakMap();
|
|
533
|
+
_selectedRowsCount = new WeakMap();
|
|
534
|
+
_size = new WeakMap();
|
|
535
|
+
_status = new WeakMap();
|
|
536
|
+
_title = new WeakMap();
|
|
537
|
+
|
|
538
|
+
exports.ArrayDataSource = ArrayDataSource;
|
|
539
|
+
//# sourceMappingURL=array-data-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array-data-source.js","sources":["../../src/array-data-source/array-data-source.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceConfig,\n DataSourceConstructorProps,\n DataSourceEvents,\n DataSourceFilter,\n DataSourceRow,\n DataSourceStatus,\n MenuRpcResponse,\n Selection,\n SubscribeCallback,\n SubscribeProps,\n TableSchema,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInRPCEditResponse,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport { filterPredicate, parseFilter } from \"@vuu-ui/vuu-filter-parser\";\nimport type {\n ClientToServerEditRpc,\n ClientToServerMenuRPC,\n LinkDescriptorWithLabel,\n VuuAggregation,\n VuuGroupBy,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport type { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n buildColumnMap,\n ColumnMap,\n isConfigChanged,\n EventEmitter,\n getAddedItems,\n getMissingItems,\n isGroupByChanged,\n hasFilter,\n hasGroupBy,\n hasSort,\n KeySet,\n logger,\n metadataKeys,\n NULL_RANGE,\n rangeNewItems,\n resetRange,\n uuid,\n vanillaConfig,\n withConfigDefaults,\n DataSourceConfigChanges,\n} from \"@vuu-ui/vuu-utils\";\nimport { aggregateData } from \"./aggregate-utils\";\nimport { buildDataToClientMap, toClientRow } from \"./array-data-utils\";\nimport { collapseGroup, expandGroup, GroupMap, groupRows } from \"./group-utils\";\nimport { sortRows } from \"./sort-utils\";\n\nconst { debug, info } = logger(\"ArrayDataSource\");\n\nconst { KEY } = metadataKeys;\n\nexport interface ArrayDataSourceConstructorProps\n extends Omit<DataSourceConstructorProps, \"bufferSize\" | \"table\"> {\n columnDescriptors: ColumnDescriptor[];\n data: Array<VuuRowDataItemType[]>;\n dataMap?: ColumnMap;\n keyColumn?: string;\n rangeChangeRowset?: \"delta\" | \"full\";\n}\n\nconst toDataSourceRow =\n (key: number) =>\n (data: VuuRowDataItemType[], index: number): DataSourceRow => {\n return [index, index, true, false, 1, 0, String(data[key]), 0, ...data];\n };\n\nconst buildTableSchema = (\n columns: ColumnDescriptor[],\n keyColumn?: string\n): TableSchema => {\n const schema: TableSchema = {\n columns: columns.map(({ name, serverDataType = \"string\" }) => ({\n name,\n serverDataType,\n })),\n key: keyColumn ?? columns[0].name,\n table: { module: \"\", table: \"Array\" },\n };\n\n return schema;\n};\n\nexport class ArrayDataSource\n extends EventEmitter<DataSourceEvents>\n implements DataSource\n{\n private clientCallback: SubscribeCallback | undefined;\n private columnDescriptors: ColumnDescriptor[];\n /** sorted offsets of data within raw data, reflecting sort order\n * of columns specified by client.\n */\n private dataIndices: number[] | undefined;\n /** Map reflecting positions of data items in raw data */\n private dataMap: ColumnMap | undefined;\n private groupMap: undefined | GroupMap;\n /** the index of key field within raw data row */\n private key: number;\n private lastRangeServed: VuuRange = { from: 0, to: 0 };\n private rangeChangeRowset: \"delta\" | \"full\";\n private openTreeNodes: string[] = [];\n\n /** Map reflecting positions of columns in client data sent to user */\n #columnMap: ColumnMap;\n #config: WithFullConfig = vanillaConfig;\n #data: DataSourceRow[];\n #links: LinkDescriptorWithLabel[] | undefined;\n #range: VuuRange = NULL_RANGE;\n #selectedRowsCount = 0;\n #size = 0;\n #status: DataSourceStatus = \"initialising\";\n #title: string | undefined;\n\n protected _menu: VuuMenu | undefined;\n protected selectedRows: Selection = [];\n\n public tableSchema: TableSchema;\n public viewport: string;\n\n private keys = new KeySet(this.#range);\n protected processedData: DataSourceRow[] | undefined = undefined;\n\n constructor({\n aggregations,\n // different from RemoteDataSource\n columnDescriptors,\n data,\n dataMap,\n filter,\n groupBy,\n keyColumn,\n rangeChangeRowset = \"delta\",\n sort,\n title,\n viewport,\n }: ArrayDataSourceConstructorProps) {\n super();\n\n if (!data || !columnDescriptors) {\n throw Error(\n \"ArrayDataSource constructor called without data or without columnDescriptors\"\n );\n }\n\n this.columnDescriptors = columnDescriptors;\n this.dataMap = dataMap;\n this.key = keyColumn\n ? this.columnDescriptors.findIndex((col) => col.name === keyColumn)\n : 0;\n this.rangeChangeRowset = rangeChangeRowset;\n this.tableSchema = buildTableSchema(columnDescriptors, keyColumn);\n this.viewport = viewport || uuid();\n this.#size = data.length;\n this.#title = title;\n\n const columns = columnDescriptors.map((col) => col.name);\n this.#columnMap = buildColumnMap(columns);\n this.dataIndices = buildDataToClientMap(this.#columnMap, this.dataMap);\n this.#data = data.map<DataSourceRow>(toDataSourceRow(this.key));\n\n this.config = {\n ...this.#config,\n aggregations: aggregations || this.#config.aggregations,\n columns,\n filter: filter || this.#config.filter,\n groupBy: groupBy || this.#config.groupBy,\n sort: sort || this.#config.sort,\n };\n\n debug?.(`columnMap: ${JSON.stringify(this.#columnMap)}`);\n }\n\n async subscribe(\n {\n viewport = this.viewport ?? uuid(),\n columns,\n aggregations,\n range,\n sort,\n groupBy,\n filter,\n }: SubscribeProps,\n callback: SubscribeCallback\n ) {\n this.clientCallback = callback;\n this.viewport = viewport;\n this.#status = \"subscribed\";\n this.lastRangeServed = { from: 0, to: 0 };\n\n let config = this.#config;\n\n const hasConfigProps = aggregations || columns || filter || groupBy || sort;\n if (hasConfigProps) {\n if (range) {\n this.#range = range;\n }\n config = {\n ...config,\n aggregations: aggregations || this.#config.aggregations,\n columns: columns || this.#config.columns,\n filter: filter || this.#config.filter,\n groupBy: groupBy || this.#config.groupBy,\n sort: sort || this.#config.sort,\n };\n }\n\n this.clientCallback?.({\n ...config,\n type: \"subscribed\",\n clientViewportId: this.viewport,\n range: this.#range,\n tableSchema: this.tableSchema,\n });\n\n if (hasConfigProps) {\n // invoke setter to action config\n this.config = config;\n } else {\n this.clientCallback({\n clientViewportId: this.viewport,\n mode: \"size-only\",\n type: \"viewport-update\",\n size: this.#data.length,\n });\n if (range) {\n // set range and trigger dispatch of initial rows\n this.range = range;\n this.sendRowsToClient();\n } else if (this.#range !== NULL_RANGE) {\n this.sendRowsToClient();\n }\n }\n }\n\n unsubscribe() {\n console.log(`unsubscribe noop`);\n }\n\n suspend() {\n console.log(`suspend #${this.viewport}, current status ${this.#status}`);\n info?.(`suspend #${this.viewport}, current status ${this.#status}`);\n this.#status = \"suspended\";\n\n return this;\n }\n\n resume() {\n console.log(`resume #${this.viewport}, current status ${this.#status}`);\n // const isDisabled = this.#status.startsWith(\"disabl\");\n const isSuspended = this.#status === \"suspended\";\n info?.(`resume #${this.viewport}, current status ${this.#status}`);\n console.log(`resume noop`);\n if (isSuspended) {\n this.#status = \"subscribed\";\n }\n return this;\n }\n\n disable() {\n console.log(`disable noop`);\n return this;\n }\n\n enable() {\n console.log(`enable noop`);\n return this;\n }\n\n select(selected: Selection) {\n this.#selectedRowsCount = selected.length;\n debug?.(`select ${JSON.stringify(selected)}`);\n this.selectedRows = selected;\n this.setRange(resetRange(this.#range), true);\n }\n\n openTreeNode(key: string) {\n this.openTreeNodes.push(key);\n this.processedData = expandGroup(\n this.openTreeNodes,\n this.#data,\n this.#config.groupBy,\n this.#columnMap,\n this.groupMap as GroupMap,\n this.processedData as DataSourceRow[]\n );\n this.setRange(resetRange(this.#range), true);\n }\n\n closeTreeNode(key: string) {\n this.openTreeNodes = this.openTreeNodes.filter((value) => value !== key);\n if (this.processedData) {\n this.processedData = collapseGroup(key, this.processedData);\n this.setRange(resetRange(this.#range), true);\n }\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 data() {\n return this.#data;\n }\n\n // Only used by the UpdateGenerator\n get currentData() {\n return this.processedData ?? this.#data;\n }\n\n get table() {\n return this.tableSchema.table;\n }\n\n get config() {\n return this.#config;\n }\n\n set config(config: DataSourceConfig) {\n const configChanges = this.applyConfig(config);\n if (configChanges) {\n if (config) {\n const originalConfig = this.#config;\n const newConfig: DataSourceConfig =\n config?.filter?.filter && config?.filter.filterStruct === undefined\n ? {\n ...config,\n filter: {\n filter: config.filter.filter,\n filterStruct: parseFilter(config.filter.filter),\n },\n }\n : config;\n\n this.#config = withConfigDefaults(newConfig);\n\n let processedData: DataSourceRow[] | undefined;\n\n if (hasFilter(config)) {\n const { filter, filterStruct = parseFilter(filter) } = config.filter;\n if (filterStruct) {\n const fn = filterPredicate(this.#columnMap, filterStruct);\n processedData = this.#data.filter(fn);\n } else {\n throw Error(\"filter must include filterStruct\");\n }\n }\n\n if (hasSort(config)) {\n processedData = sortRows(\n processedData ?? this.#data,\n config.sort,\n this.#columnMap\n );\n }\n\n if (\n this.openTreeNodes.length > 0 &&\n isGroupByChanged(originalConfig, config)\n ) {\n if (this.#config.groupBy.length === 0) {\n this.openTreeNodes.length = 0;\n } else {\n //TODO purge any openTreeNodes for a no-longer-present groupBy col\n console.log(\"adjust the openTReeNodes groupBy changed \", {\n originalGroupBy: originalConfig.groupBy,\n newGroupBy: newConfig.groupBy,\n });\n }\n }\n\n if (hasGroupBy(config)) {\n const [groupedData, groupMap] = groupRows(\n processedData ?? this.#data,\n config.groupBy,\n this.#columnMap\n );\n this.groupMap = groupMap;\n processedData = groupedData;\n\n if (this.openTreeNodes.length > 0) {\n processedData = expandGroup(\n this.openTreeNodes,\n this.#data,\n this.#config.groupBy,\n this.#columnMap,\n this.groupMap as GroupMap,\n processedData as DataSourceRow[]\n );\n }\n }\n\n this.processedData = processedData?.map((row, i) => {\n const dolly = row.slice() as DataSourceRow;\n dolly[0] = i;\n dolly[1] = i;\n return dolly;\n });\n }\n\n this.setRange(resetRange(this.#range), true);\n\n this.emit(\"config\", this.#config, undefined, configChanges);\n }\n }\n\n applyConfig(config: DataSourceConfig): DataSourceConfigChanges | undefined {\n const { noChanges, ...otherChanges } = isConfigChanged(\n this.#config,\n config\n );\n\n if (noChanges !== true) {\n if (config) {\n const newConfig: DataSourceConfig =\n config?.filter?.filter && config?.filter.filterStruct === undefined\n ? {\n ...config,\n filter: {\n filter: config.filter.filter,\n filterStruct: parseFilter(config.filter.filter),\n },\n }\n : config;\n this.#config = withConfigDefaults(newConfig);\n return otherChanges;\n }\n }\n }\n\n get selectedRowsCount() {\n return this.#selectedRowsCount;\n }\n\n get size() {\n // return this.#size;\n return this.processedData?.length ?? this.#data.length;\n }\n\n get range() {\n return this.#range;\n }\n\n set range(range: VuuRange) {\n this.setRange(range);\n }\n\n protected delete(row: VuuRowDataItemType[]) {\n console.log(`delete row ${row.join(\",\")}`);\n }\n\n protected insert = (row: VuuRowDataItemType[]) => {\n // TODO take sorting, filtering. grouping into account\n const dataSourceRow = toDataSourceRow(this.key)(row, this.size);\n (this.#data as DataSourceRow[]).push(dataSourceRow);\n const { from, to } = this.#range;\n const [rowIdx] = dataSourceRow;\n if (rowIdx >= from && rowIdx < to) {\n this.sendRowsToClient();\n }\n };\n\n protected update = (row: VuuRowDataItemType[], columnName: string) => {\n // TODO take sorting, filtering. grouping into account\n const keyValue = row[this.key];\n const colIndex = this.#columnMap[columnName];\n const dataColIndex = this.dataMap?.[columnName];\n const dataIndex = this.#data.findIndex((row) => row[KEY] === keyValue);\n if (dataIndex !== -1 && dataColIndex !== undefined) {\n const dataSourceRow = this.#data[dataIndex];\n dataSourceRow[colIndex] = row[dataColIndex];\n const { from, to } = this.#range;\n const [rowIdx] = dataSourceRow;\n if (rowIdx >= from && rowIdx < to) {\n this.sendRowsToClient(false, dataSourceRow);\n }\n }\n };\n\n protected updateRow = (row: VuuRowDataItemType[]) => {\n // TODO take sorting, filtering. grouping into account\n const keyValue = row[this.key];\n const dataIndex = this.#data.findIndex((row) => row[KEY] === keyValue);\n if (dataIndex !== -1) {\n const dataSourceRow = toDataSourceRow(this.key)(row, dataIndex);\n // maybe update this in place\n this.#data[dataIndex] = dataSourceRow;\n const { from, to } = this.#range;\n if (dataIndex >= from && dataIndex < to) {\n this.sendRowsToClient(false, dataSourceRow);\n }\n }\n };\n\n private setRange(range: VuuRange, forceFullRefresh = false) {\n if (range.from !== this.#range.from || range.to !== this.#range.to) {\n this.#range = range;\n const keysResequenced = this.keys.reset(range);\n this.sendRowsToClient(forceFullRefresh || keysResequenced);\n } else if (forceFullRefresh) {\n this.sendRowsToClient(forceFullRefresh);\n }\n }\n\n sendRowsToClient(forceFullRefresh = false, row?: DataSourceRow) {\n if (row) {\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"update\",\n rows: [\n toClientRow(row, this.keys, this.selectedRows, this.dataIndices),\n ],\n type: \"viewport-update\",\n });\n } else {\n const rowRange =\n this.rangeChangeRowset === \"delta\" && !forceFullRefresh\n ? rangeNewItems(this.lastRangeServed, this.#range)\n : this.#range;\n const data = this.processedData ?? this.#data;\n\n const rowsWithinViewport = data\n .slice(rowRange.from, rowRange.to)\n .map((row) =>\n toClientRow(row, this.keys, this.selectedRows, this.dataIndices)\n );\n\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n rows: rowsWithinViewport,\n size: data.length,\n type: \"viewport-update\",\n });\n this.lastRangeServed = {\n from: this.#range.from,\n to: Math.min(\n this.#range.to,\n this.#range.from + rowsWithinViewport.length\n ),\n };\n }\n }\n\n get columns() {\n return this.#config.columns;\n }\n\n set columns(columns: string[]) {\n const addedColumns = getAddedItems(this.config.columns, columns);\n if (addedColumns.length > 0) {\n const columnsWithoutDescriptors = getMissingItems(\n this.columnDescriptors,\n addedColumns,\n (col) => col.name\n );\n console.log(`columnsWithoutDescriptors`, {\n columnsWithoutDescriptors,\n });\n }\n this.#columnMap = buildColumnMap(columns);\n this.dataIndices = buildDataToClientMap(this.#columnMap, this.dataMap);\n\n this.config = {\n ...this.#config,\n columns,\n };\n }\n\n get aggregations() {\n return this.#config.aggregations;\n }\n\n set aggregations(aggregations: VuuAggregation[]) {\n this.#config = {\n ...this.#config,\n aggregations,\n };\n\n const targetData = this.processedData ?? this.#data;\n const leafData = this.#data;\n\n aggregateData(\n aggregations,\n targetData,\n this.#config.groupBy,\n leafData,\n this.#columnMap,\n this.groupMap as GroupMap\n );\n this.setRange(resetRange(this.#range), true);\n\n this.emit(\"config\", this.#config);\n }\n\n get sort() {\n return this.#config.sort;\n }\n\n set sort(sort: VuuSort) {\n debug?.(`sort ${JSON.stringify(sort)}`);\n this.config = {\n ...this.#config,\n sort,\n };\n }\n\n get filter() {\n return this.#config.filter;\n }\n\n set filter(filter: DataSourceFilter) {\n debug?.(`filter ${JSON.stringify(filter)}`);\n // TODO check that filter has changed\n this.config = {\n ...this.#config,\n filter,\n };\n }\n\n get groupBy() {\n return this.#config.groupBy;\n }\n\n set groupBy(groupBy: VuuGroupBy) {\n this.config = {\n ...this.#config,\n groupBy,\n };\n }\n\n get title() {\n return this.#title;\n }\n\n set title(title: string | undefined) {\n this.#title = title;\n }\n\n get _clientCallback() {\n return this.clientCallback;\n }\n\n createLink({\n parentVpId,\n link: { fromColumn, toColumn },\n }: LinkDescriptorWithLabel) {\n console.log(\"create link\", {\n parentVpId,\n fromColumn,\n toColumn,\n });\n }\n\n removeLink() {\n console.log(\"remove link\");\n }\n\n private findRow(rowKey: number) {\n const row = this.#data[rowKey];\n if (row) {\n return row;\n } else {\n throw `no row found for key ${rowKey}`;\n }\n }\n\n applyEdit(\n row: DataSourceRow,\n columnName: string,\n value: VuuRowDataItemType\n ): Promise<true> {\n console.log(`ArrayDataSource applyEdit ${row[0]} ${columnName} ${value}`);\n return Promise.resolve(true);\n }\n\n async menuRpcCall(\n rpcRequest: Omit<ClientToServerMenuRPC, \"vpId\"> | ClientToServerEditRpc\n ): Promise<\n | MenuRpcResponse\n | VuuUIMessageInRPCEditReject\n | VuuUIMessageInRPCEditResponse\n | undefined\n > {\n return new Promise((resolve) => {\n const { type } = rpcRequest;\n switch (type) {\n case \"VP_EDIT_CELL_RPC\":\n {\n // TODO\n // const { rowKey, field, value } = rpcRequest;\n // try {\n // this.update(rowKey, field, value);\n // resolve(undefined);\n // } catch (error) {\n // resolve({ error: String(error), type: \"VP_EDIT_RPC_REJECT\" });\n // }\n }\n\n break;\n default:\n resolve(undefined);\n }\n });\n }\n}\n"],"names":["logger","metadataKeys","EventEmitter","vanillaConfig","NULL_RANGE","KeySet","row","uuid","buildColumnMap","buildDataToClientMap","resetRange","expandGroup","collapseGroup","parseFilter","withConfigDefaults","hasFilter","filterPredicate","hasSort","sortRows","isGroupByChanged","hasGroupBy","groupRows","isConfigChanged","toClientRow","rangeNewItems","getAddedItems","getMissingItems","aggregateData"],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
4
|
+
|
|
5
|
+
const { RENDER_IDX, SELECTED } = vuuUtils.metadataKeys;
|
|
6
|
+
const toClientRow = (row, keys, selection, dataIndices) => {
|
|
7
|
+
const [rowIndex] = row;
|
|
8
|
+
let clientRow;
|
|
9
|
+
if (dataIndices) {
|
|
10
|
+
const { count } = vuuUtils.metadataKeys;
|
|
11
|
+
clientRow = row.slice(0, count).concat(dataIndices.map((idx) => row[idx]));
|
|
12
|
+
} else {
|
|
13
|
+
clientRow = row.slice();
|
|
14
|
+
}
|
|
15
|
+
clientRow[RENDER_IDX] = keys.keyFor(rowIndex);
|
|
16
|
+
clientRow[SELECTED] = vuuUtils.getSelectionStatus(selection, rowIndex);
|
|
17
|
+
return clientRow;
|
|
18
|
+
};
|
|
19
|
+
const divergentMaps = (columnMap, dataMap) => {
|
|
20
|
+
if (dataMap) {
|
|
21
|
+
const { count: mapOffset } = vuuUtils.metadataKeys;
|
|
22
|
+
for (const [columnName, index] of Object.entries(columnMap)) {
|
|
23
|
+
const dataIdx = dataMap[columnName];
|
|
24
|
+
if (dataIdx === void 0) {
|
|
25
|
+
throw Error(
|
|
26
|
+
`ArrayDataSource column ${columnName} is not in underlying data set`
|
|
27
|
+
);
|
|
28
|
+
} else if (dataIdx !== index - mapOffset) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return false;
|
|
34
|
+
};
|
|
35
|
+
const getDataIndices = (columnMap, dataMap) => {
|
|
36
|
+
const { count: mapOffset } = vuuUtils.metadataKeys;
|
|
37
|
+
const result = [];
|
|
38
|
+
Object.entries(columnMap).forEach(([columnName]) => {
|
|
39
|
+
result.push(dataMap[columnName] + mapOffset);
|
|
40
|
+
});
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
const buildDataToClientMap = (columnMap, dataMap) => {
|
|
44
|
+
if (dataMap && divergentMaps(columnMap, dataMap)) {
|
|
45
|
+
return getDataIndices(columnMap, dataMap);
|
|
46
|
+
}
|
|
47
|
+
return void 0;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
exports.buildDataToClientMap = buildDataToClientMap;
|
|
51
|
+
exports.toClientRow = toClientRow;
|
|
52
|
+
//# sourceMappingURL=array-data-utils.js.map
|