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