@vuu-ui/vuu-data-local 0.8.87 → 0.8.88
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/array-data-source/aggregate-utils.js.map +1 -1
- package/cjs/array-data-source/array-data-source.js +38 -37
- package/cjs/array-data-source/array-data-source.js.map +1 -1
- package/cjs/array-data-source/array-data-utils.js.map +1 -1
- package/cjs/array-data-source/group-utils.js.map +1 -1
- package/cjs/array-data-source/sort-utils.js.map +1 -1
- package/cjs/json-data-source/json-data-source.js +1 -1
- package/cjs/json-data-source/json-data-source.js.map +1 -1
- package/esm/array-data-source/aggregate-utils.js.map +1 -1
- package/esm/array-data-source/array-data-source.js +39 -38
- package/esm/array-data-source/array-data-source.js.map +1 -1
- package/esm/array-data-source/array-data-utils.js.map +1 -1
- package/esm/array-data-source/group-utils.js.map +1 -1
- package/esm/array-data-source/sort-utils.js.map +1 -1
- package/esm/json-data-source/json-data-source.js +1 -1
- package/esm/json-data-source/json-data-source.js.map +1 -1
- package/package.json +7 -7
- package/types/array-data-source/array-data-source.d.ts +9 -6
- package/types/json-data-source/json-data-source.d.ts +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate-utils.js","sources":["../../src/array-data-source/aggregate-utils.ts"],"sourcesContent":["import type { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport type { VuuAggregation, VuuGroupBy } from \"@vuu-ui/vuu-protocol-types\";\nimport type { ColumnMap } from \"@vuu-ui/vuu-utils\";\nimport type { GroupMap, KeyList } from \"./group-utils\";\n\nexport const count = (arr: any[]) => arr.length;\n\nexport const aggregateData = (\n aggregations: VuuAggregation[],\n targetData: readonly DataSourceRow[],\n groupBy: VuuGroupBy,\n leafData: readonly DataSourceRow[],\n columnMap: ColumnMap,\n groupMap: GroupMap\n) => {\n const aggType = aggregations[aggregations.length - 1].aggType;\n const groupIndices = groupBy.map<number>((column) => columnMap[column]);\n\n switch (aggType) {\n case 1:\n return aggregateSum(\n groupMap,\n leafData,\n columnMap,\n aggregations,\n targetData,\n groupIndices\n );\n case 2:\n return aggregateAverage(\n groupMap,\n leafData,\n columnMap,\n aggregations,\n targetData,\n groupIndices\n );\n case 3:\n return aggregateCount(\n groupMap,\n columnMap,\n aggregations,\n targetData,\n groupIndices\n );\n case 4:\n return aggregateHigh(\n groupMap,\n leafData,\n columnMap,\n aggregations,\n targetData,\n groupIndices\n );\n case 5:\n return aggregateLow(\n groupMap,\n leafData,\n columnMap,\n aggregations,\n targetData,\n groupIndices\n );\n case 6:\n return aggregateDistinct(\n groupMap,\n leafData,\n columnMap,\n aggregations,\n targetData,\n groupIndices\n );\n }\n};\n\nfunction aggregateCount(\n groupMap: GroupMap,\n columnMap: ColumnMap,\n aggregations: VuuAggregation[],\n targetData: readonly DataSourceRow[],\n groupIndices: number[]\n): { [key: string]: number } {\n const counts: { [key: string]: number } = {};\n const aggColumn = getAggColumn(columnMap, aggregations);\n\n function countRecursive(map: GroupMap | KeyList) {\n if (Array.isArray(map)) {\n return map.length;\n } else {\n let count = 0;\n for (const key in map) {\n count += 1 + countRecursive(map[key]);\n }\n return count;\n }\n }\n\n for (const key in groupMap) {\n const count = countRecursive(groupMap[key]);\n counts[key] = count;\n }\n\n for (let index = 0; index < targetData.length; index++) {\n for (const key in counts) {\n if (targetData[index][groupIndices[0]] === key) {\n targetData[index][aggColumn] = counts[key];\n }\n }\n }\n\n console.log(\"!!!! targetData\", targetData);\n console.log(\"!!!! counts\", counts);\n return counts;\n}\n\nfunction getAggColumn(columnMap: ColumnMap, aggregations: VuuAggregation[]) {\n console.log(\"!!!! aggregation length\", aggregations.length);\n const columnName = aggregations[aggregations.length - 1].column;\n const columnNumber = columnMap[columnName];\n return columnNumber;\n}\n\nfunction aggregateSum(\n groupMap: GroupMap,\n leafData: readonly DataSourceRow[],\n columnMap: ColumnMap,\n aggregations: VuuAggregation[],\n targetData: readonly DataSourceRow[],\n groupIndices: number[]\n): { [key: string]: number } {\n const sums: { [key: string]: number } = {};\n const aggColumn = getAggColumn(columnMap, aggregations);\n\n function sumRecursive(\n map: GroupMap | KeyList,\n leafData: readonly DataSourceRow[],\n aggColumn: number\n ) {\n if (Array.isArray(map)) {\n let sum = 0;\n for (const key of map) {\n sum += Number(leafData[key][aggColumn]);\n }\n return sum;\n } else {\n let sum = 0;\n for (const key in map) {\n sum += sumRecursive(map[key], leafData, aggColumn);\n }\n return sum;\n }\n }\n\n for (const key in groupMap) {\n console.log(key);\n const sum = Number(sumRecursive(groupMap[key], leafData, aggColumn));\n sums[key] = sum;\n }\n\n for (let index = 0; index < targetData.length; index++) {\n for (const key in sums) {\n if (targetData[index][groupIndices[0]] === key) {\n targetData[index][aggColumn] = sums[key];\n }\n }\n }\n\n console.log(\"!!!! targetData\", targetData);\n console.log(\"!!!! sums\", sums);\n return sums;\n}\n\nfunction aggregateAverage(\n groupMap: GroupMap,\n leafData: readonly DataSourceRow[],\n columnMap: ColumnMap,\n aggregations: VuuAggregation[],\n targetData: readonly DataSourceRow[],\n groupIndices: number[]\n): { [key: string]: number } {\n const averages: { [key: string]: number } = {};\n const aggColumn = getAggColumn(columnMap, aggregations);\n\n const count = aggregateCount(\n groupMap,\n columnMap,\n aggregations,\n targetData,\n groupIndices\n );\n const sum = aggregateSum(\n groupMap,\n leafData,\n columnMap,\n aggregations,\n targetData,\n groupIndices\n );\n\n for (const key in count) {\n let average = 0;\n average = sum[key] / count[key];\n averages[key] = average;\n }\n\n for (let index = 0; index < targetData.length; index++) {\n for (const key in averages) {\n if (targetData[index][groupIndices[0]] === key) {\n targetData[index][aggColumn] = averages[key];\n }\n }\n }\n\n console.log(\"!!!! targetData\", targetData);\n console.log(\"!!!! averages\", averages);\n return averages;\n}\n\nfunction getLeafColumnData(\n map: GroupMap | KeyList,\n leafData: readonly DataSourceRow[],\n aggColumn: number\n): number[] {\n const data: number[] = [];\n\n if (Array.isArray(map)) {\n for (const key of map) {\n data.push(leafData[key][aggColumn] as number);\n }\n } else {\n for (const key in map) {\n data.push(...getLeafColumnData(map[key], leafData, aggColumn));\n }\n }\n\n return data;\n}\n\nfunction aggregateDistinct(\n groupMap: GroupMap,\n leafData: readonly DataSourceRow[],\n columnMap: ColumnMap,\n aggregations: VuuAggregation[],\n targetData: readonly DataSourceRow[],\n groupIndices: number[]\n): { [key: string]: number } {\n const distincts: { [key: string]: number } = {};\n const aggColumn = getAggColumn(columnMap, aggregations);\n\n for (const key in groupMap) {\n const leafColumnData = getLeafColumnData(\n groupMap[key],\n leafData,\n aggColumn\n );\n const distinct: any = [...new Set(leafColumnData)];\n\n distincts[key] = distinct;\n }\n\n for (let index = 0; index < targetData.length; index++) {\n for (const key in distincts) {\n if (targetData[index][groupIndices[0]] === key) {\n targetData[index][aggColumn] = distincts[key];\n }\n }\n }\n\n return distincts;\n}\n\nfunction aggregateHigh(\n groupMap: GroupMap,\n leafData: readonly DataSourceRow[],\n columnMap: ColumnMap,\n aggregations: VuuAggregation[],\n targetData: readonly DataSourceRow[],\n groupIndices: number[]\n): { [key: string]: number } {\n const highs: { [key: string]: number } = {};\n const aggColumn = getAggColumn(columnMap, aggregations);\n\n for (const key in groupMap) {\n const leafColumnData = getLeafColumnData(\n groupMap[key],\n leafData,\n aggColumn\n );\n const maxNumber = Math.max(...leafColumnData);\n\n highs[key] = maxNumber;\n }\n for (let index = 0; index < targetData.length; index++) {\n for (const key in highs) {\n if (targetData[index][groupIndices[0]] === key) {\n targetData[index][aggColumn] = highs[key];\n }\n }\n }\n\n return highs;\n}\n\nfunction aggregateLow(\n groupMap: GroupMap,\n leafData: readonly DataSourceRow[],\n columnMap: ColumnMap,\n aggregations: VuuAggregation[],\n targetData: readonly DataSourceRow[],\n groupIndices: number[]\n): { [key: string]: number } {\n const mins: { [key: string]: number } = {};\n const aggColumn = getAggColumn(columnMap, aggregations);\n\n for (const key in groupMap) {\n const leafColumnData = getLeafColumnData(\n groupMap[key],\n leafData,\n aggColumn\n );\n const minNumber = Math.min(...leafColumnData);\n mins[key] = minNumber;\n }\n\n for (let index = 0; index < targetData.length; index++) {\n for (const key in mins) {\n if (targetData[index][groupIndices[0]] === key) {\n targetData[index][aggColumn] = mins[key];\n }\n }\n }\n\n return mins;\n}\n"],"names":["count","leafData","aggColumn"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"aggregate-utils.js","sources":["../../src/array-data-source/aggregate-utils.ts"],"sourcesContent":["import type { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport type { VuuAggregation, VuuGroupBy } from \"@vuu-ui/vuu-protocol-types\";\nimport type { ColumnMap } from \"@vuu-ui/vuu-utils\";\nimport type { GroupMap, KeyList } from \"./group-utils\";\n\nexport const count = (arr: any[]) => arr.length;\n\nexport const aggregateData = (\n aggregations: VuuAggregation[],\n targetData: readonly DataSourceRow[],\n groupBy: VuuGroupBy,\n leafData: readonly DataSourceRow[],\n columnMap: ColumnMap,\n groupMap: GroupMap,\n) => {\n const aggType = aggregations[aggregations.length - 1].aggType;\n const groupIndices = groupBy.map<number>((column) => columnMap[column]);\n\n switch (aggType) {\n case 1:\n return aggregateSum(\n groupMap,\n leafData,\n columnMap,\n aggregations,\n targetData,\n groupIndices,\n );\n case 2:\n return aggregateAverage(\n groupMap,\n leafData,\n columnMap,\n aggregations,\n targetData,\n groupIndices,\n );\n case 3:\n return aggregateCount(\n groupMap,\n columnMap,\n aggregations,\n targetData,\n groupIndices,\n );\n case 4:\n return aggregateHigh(\n groupMap,\n leafData,\n columnMap,\n aggregations,\n targetData,\n groupIndices,\n );\n case 5:\n return aggregateLow(\n groupMap,\n leafData,\n columnMap,\n aggregations,\n targetData,\n groupIndices,\n );\n case 6:\n return aggregateDistinct(\n groupMap,\n leafData,\n columnMap,\n aggregations,\n targetData,\n groupIndices,\n );\n }\n};\n\nfunction aggregateCount(\n groupMap: GroupMap,\n columnMap: ColumnMap,\n aggregations: VuuAggregation[],\n targetData: readonly DataSourceRow[],\n groupIndices: number[],\n): { [key: string]: number } {\n const counts: { [key: string]: number } = {};\n const aggColumn = getAggColumn(columnMap, aggregations);\n\n function countRecursive(map: GroupMap | KeyList) {\n if (Array.isArray(map)) {\n return map.length;\n } else {\n let count = 0;\n for (const key in map) {\n count += 1 + countRecursive(map[key]);\n }\n return count;\n }\n }\n\n for (const key in groupMap) {\n const count = countRecursive(groupMap[key]);\n counts[key] = count;\n }\n\n for (let index = 0; index < targetData.length; index++) {\n for (const key in counts) {\n if (targetData[index][groupIndices[0]] === key) {\n targetData[index][aggColumn] = counts[key];\n }\n }\n }\n\n console.log(\"!!!! targetData\", targetData);\n console.log(\"!!!! counts\", counts);\n return counts;\n}\n\nfunction getAggColumn(columnMap: ColumnMap, aggregations: VuuAggregation[]) {\n console.log(\"!!!! aggregation length\", aggregations.length);\n const columnName = aggregations[aggregations.length - 1].column;\n const columnNumber = columnMap[columnName];\n return columnNumber;\n}\n\nfunction aggregateSum(\n groupMap: GroupMap,\n leafData: readonly DataSourceRow[],\n columnMap: ColumnMap,\n aggregations: VuuAggregation[],\n targetData: readonly DataSourceRow[],\n groupIndices: number[],\n): { [key: string]: number } {\n const sums: { [key: string]: number } = {};\n const aggColumn = getAggColumn(columnMap, aggregations);\n\n function sumRecursive(\n map: GroupMap | KeyList,\n leafData: readonly DataSourceRow[],\n aggColumn: number,\n ) {\n if (Array.isArray(map)) {\n let sum = 0;\n for (const key of map) {\n sum += Number(leafData[key][aggColumn]);\n }\n return sum;\n } else {\n let sum = 0;\n for (const key in map) {\n sum += sumRecursive(map[key], leafData, aggColumn);\n }\n return sum;\n }\n }\n\n for (const key in groupMap) {\n console.log(key);\n const sum = Number(sumRecursive(groupMap[key], leafData, aggColumn));\n sums[key] = sum;\n }\n\n for (let index = 0; index < targetData.length; index++) {\n for (const key in sums) {\n if (targetData[index][groupIndices[0]] === key) {\n targetData[index][aggColumn] = sums[key];\n }\n }\n }\n\n console.log(\"!!!! targetData\", targetData);\n console.log(\"!!!! sums\", sums);\n return sums;\n}\n\nfunction aggregateAverage(\n groupMap: GroupMap,\n leafData: readonly DataSourceRow[],\n columnMap: ColumnMap,\n aggregations: VuuAggregation[],\n targetData: readonly DataSourceRow[],\n groupIndices: number[],\n): { [key: string]: number } {\n const averages: { [key: string]: number } = {};\n const aggColumn = getAggColumn(columnMap, aggregations);\n\n const count = aggregateCount(\n groupMap,\n columnMap,\n aggregations,\n targetData,\n groupIndices,\n );\n const sum = aggregateSum(\n groupMap,\n leafData,\n columnMap,\n aggregations,\n targetData,\n groupIndices,\n );\n\n for (const key in count) {\n let average = 0;\n average = sum[key] / count[key];\n averages[key] = average;\n }\n\n for (let index = 0; index < targetData.length; index++) {\n for (const key in averages) {\n if (targetData[index][groupIndices[0]] === key) {\n targetData[index][aggColumn] = averages[key];\n }\n }\n }\n\n console.log(\"!!!! targetData\", targetData);\n console.log(\"!!!! averages\", averages);\n return averages;\n}\n\nfunction getLeafColumnData(\n map: GroupMap | KeyList,\n leafData: readonly DataSourceRow[],\n aggColumn: number,\n): number[] {\n const data: number[] = [];\n\n if (Array.isArray(map)) {\n for (const key of map) {\n data.push(leafData[key][aggColumn] as number);\n }\n } else {\n for (const key in map) {\n data.push(...getLeafColumnData(map[key], leafData, aggColumn));\n }\n }\n\n return data;\n}\n\nfunction aggregateDistinct(\n groupMap: GroupMap,\n leafData: readonly DataSourceRow[],\n columnMap: ColumnMap,\n aggregations: VuuAggregation[],\n targetData: readonly DataSourceRow[],\n groupIndices: number[],\n): { [key: string]: number } {\n const distincts: { [key: string]: number } = {};\n const aggColumn = getAggColumn(columnMap, aggregations);\n\n for (const key in groupMap) {\n const leafColumnData = getLeafColumnData(\n groupMap[key],\n leafData,\n aggColumn,\n );\n const distinct: any = [...new Set(leafColumnData)];\n\n distincts[key] = distinct;\n }\n\n for (let index = 0; index < targetData.length; index++) {\n for (const key in distincts) {\n if (targetData[index][groupIndices[0]] === key) {\n targetData[index][aggColumn] = distincts[key];\n }\n }\n }\n\n return distincts;\n}\n\nfunction aggregateHigh(\n groupMap: GroupMap,\n leafData: readonly DataSourceRow[],\n columnMap: ColumnMap,\n aggregations: VuuAggregation[],\n targetData: readonly DataSourceRow[],\n groupIndices: number[],\n): { [key: string]: number } {\n const highs: { [key: string]: number } = {};\n const aggColumn = getAggColumn(columnMap, aggregations);\n\n for (const key in groupMap) {\n const leafColumnData = getLeafColumnData(\n groupMap[key],\n leafData,\n aggColumn,\n );\n const maxNumber = Math.max(...leafColumnData);\n\n highs[key] = maxNumber;\n }\n for (let index = 0; index < targetData.length; index++) {\n for (const key in highs) {\n if (targetData[index][groupIndices[0]] === key) {\n targetData[index][aggColumn] = highs[key];\n }\n }\n }\n\n return highs;\n}\n\nfunction aggregateLow(\n groupMap: GroupMap,\n leafData: readonly DataSourceRow[],\n columnMap: ColumnMap,\n aggregations: VuuAggregation[],\n targetData: readonly DataSourceRow[],\n groupIndices: number[],\n): { [key: string]: number } {\n const mins: { [key: string]: number } = {};\n const aggColumn = getAggColumn(columnMap, aggregations);\n\n for (const key in groupMap) {\n const leafColumnData = getLeafColumnData(\n groupMap[key],\n leafData,\n aggColumn,\n );\n const minNumber = Math.min(...leafColumnData);\n mins[key] = minNumber;\n }\n\n for (let index = 0; index < targetData.length; index++) {\n for (const key in mins) {\n if (targetData[index][groupIndices[0]] === key) {\n targetData[index][aggColumn] = mins[key];\n }\n }\n }\n\n return mins;\n}\n"],"names":["count","leafData","aggColumn"],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot
|
|
|
14
14
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
15
15
|
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
16
16
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
17
|
-
var _columnMap,
|
|
17
|
+
var _columnMap, _data, _keys, _links, _range, _selectedRowsCount, _size, _status, _title;
|
|
18
18
|
const { debug, info } = vuuUtils.logger("ArrayDataSource");
|
|
19
19
|
const { KEY } = vuuUtils.metadataKeys;
|
|
20
20
|
const toDataSourceRow = (key) => (data, index) => {
|
|
@@ -51,7 +51,7 @@ class ArrayDataSource extends vuuUtils.EventEmitter {
|
|
|
51
51
|
this.openTreeNodes = [];
|
|
52
52
|
/** Map reflecting positions of columns in client data sent to user */
|
|
53
53
|
__privateAdd(this, _columnMap);
|
|
54
|
-
|
|
54
|
+
this._config = vuuUtils.vanillaConfig;
|
|
55
55
|
__privateAdd(this, _data);
|
|
56
56
|
__privateAdd(this, _keys, new vuuUtils.KeySet(vuuUtils.NULL_RANGE));
|
|
57
57
|
__privateAdd(this, _links);
|
|
@@ -103,6 +103,7 @@ class ArrayDataSource extends vuuUtils.EventEmitter {
|
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
};
|
|
106
|
+
console.log(`ArrayDataSource #${viewport}`);
|
|
106
107
|
if (!data || !columnDescriptors) {
|
|
107
108
|
throw Error(
|
|
108
109
|
"ArrayDataSource constructor called without data or without columnDescriptors"
|
|
@@ -121,12 +122,12 @@ class ArrayDataSource extends vuuUtils.EventEmitter {
|
|
|
121
122
|
this.dataIndices = arrayDataUtils.buildDataToClientMap(__privateGet(this, _columnMap), this.dataMap);
|
|
122
123
|
__privateSet(this, _data, data.map(toDataSourceRow(this.key)));
|
|
123
124
|
this.config = {
|
|
124
|
-
...
|
|
125
|
-
aggregations: aggregations ||
|
|
125
|
+
...this._config,
|
|
126
|
+
aggregations: aggregations || this._config.aggregations,
|
|
126
127
|
columns,
|
|
127
|
-
filterSpec: filterSpec ||
|
|
128
|
-
groupBy: groupBy ||
|
|
129
|
-
sort: sort ||
|
|
128
|
+
filterSpec: filterSpec || this._config.filterSpec,
|
|
129
|
+
groupBy: groupBy || this._config.groupBy,
|
|
130
|
+
sort: sort || this._config.sort
|
|
130
131
|
};
|
|
131
132
|
debug?.(`columnMap: ${JSON.stringify(__privateGet(this, _columnMap))}`);
|
|
132
133
|
}
|
|
@@ -143,7 +144,7 @@ class ArrayDataSource extends vuuUtils.EventEmitter {
|
|
|
143
144
|
this.viewport = viewport;
|
|
144
145
|
__privateSet(this, _status, "subscribed");
|
|
145
146
|
this.lastRangeServed = { from: 0, to: 0 };
|
|
146
|
-
let config =
|
|
147
|
+
let config = this._config;
|
|
147
148
|
const hasConfigProps = aggregations || columns || filterSpec || groupBy || sort;
|
|
148
149
|
if (hasConfigProps) {
|
|
149
150
|
if (range) {
|
|
@@ -151,11 +152,11 @@ class ArrayDataSource extends vuuUtils.EventEmitter {
|
|
|
151
152
|
}
|
|
152
153
|
config = {
|
|
153
154
|
...config,
|
|
154
|
-
aggregations: aggregations ||
|
|
155
|
-
columns: columns ||
|
|
156
|
-
filterSpec: filterSpec ||
|
|
157
|
-
groupBy: groupBy ||
|
|
158
|
-
sort: sort ||
|
|
155
|
+
aggregations: aggregations || this._config.aggregations,
|
|
156
|
+
columns: columns || this._config.columns,
|
|
157
|
+
filterSpec: filterSpec || this._config.filterSpec,
|
|
158
|
+
groupBy: groupBy || this._config.groupBy,
|
|
159
|
+
sort: sort || this._config.sort
|
|
159
160
|
};
|
|
160
161
|
}
|
|
161
162
|
const subscribedMessage = {
|
|
@@ -218,7 +219,7 @@ class ArrayDataSource extends vuuUtils.EventEmitter {
|
|
|
218
219
|
this.processedData = groupUtils.expandGroup(
|
|
219
220
|
this.openTreeNodes,
|
|
220
221
|
__privateGet(this, _data),
|
|
221
|
-
|
|
222
|
+
this._config.groupBy,
|
|
222
223
|
__privateGet(this, _columnMap),
|
|
223
224
|
this.groupMap,
|
|
224
225
|
this.processedData
|
|
@@ -255,13 +256,13 @@ class ArrayDataSource extends vuuUtils.EventEmitter {
|
|
|
255
256
|
return this.tableSchema.table;
|
|
256
257
|
}
|
|
257
258
|
get config() {
|
|
258
|
-
return
|
|
259
|
+
return this._config;
|
|
259
260
|
}
|
|
260
261
|
set config(config) {
|
|
261
262
|
const configChanges = this.applyConfig(config);
|
|
262
263
|
if (configChanges) {
|
|
263
264
|
if (config) {
|
|
264
|
-
const originalConfig =
|
|
265
|
+
const originalConfig = this._config;
|
|
265
266
|
const newConfig = config?.filterSpec?.filter && config?.filterSpec.filterStruct === void 0 ? {
|
|
266
267
|
...config,
|
|
267
268
|
filterSpec: {
|
|
@@ -269,7 +270,7 @@ class ArrayDataSource extends vuuUtils.EventEmitter {
|
|
|
269
270
|
filterStruct: vuuFilterParser.parseFilter(config.filterSpec.filter)
|
|
270
271
|
}
|
|
271
272
|
} : config;
|
|
272
|
-
|
|
273
|
+
this._config = vuuUtils.withConfigDefaults(newConfig);
|
|
273
274
|
let processedData;
|
|
274
275
|
if (vuuUtils.hasFilter(config)) {
|
|
275
276
|
const { filter, filterStruct = vuuFilterParser.parseFilter(filter) } = config.filterSpec;
|
|
@@ -288,7 +289,7 @@ class ArrayDataSource extends vuuUtils.EventEmitter {
|
|
|
288
289
|
);
|
|
289
290
|
}
|
|
290
291
|
if (this.openTreeNodes.length > 0 && vuuUtils.isGroupByChanged(originalConfig, config)) {
|
|
291
|
-
if (
|
|
292
|
+
if (this._config.groupBy.length === 0) {
|
|
292
293
|
this.openTreeNodes.length = 0;
|
|
293
294
|
} else {
|
|
294
295
|
console.log("adjust the openTReeNodes groupBy changed ", {
|
|
@@ -309,7 +310,7 @@ class ArrayDataSource extends vuuUtils.EventEmitter {
|
|
|
309
310
|
processedData = groupUtils.expandGroup(
|
|
310
311
|
this.openTreeNodes,
|
|
311
312
|
__privateGet(this, _data),
|
|
312
|
-
|
|
313
|
+
this._config.groupBy,
|
|
313
314
|
__privateGet(this, _columnMap),
|
|
314
315
|
this.groupMap,
|
|
315
316
|
processedData
|
|
@@ -324,12 +325,12 @@ class ArrayDataSource extends vuuUtils.EventEmitter {
|
|
|
324
325
|
});
|
|
325
326
|
}
|
|
326
327
|
this.setRange(vuuUtils.resetRange(__privateGet(this, _range)), true);
|
|
327
|
-
this.emit("config",
|
|
328
|
+
this.emit("config", this._config, void 0, configChanges);
|
|
328
329
|
}
|
|
329
330
|
}
|
|
330
331
|
applyConfig(config) {
|
|
331
332
|
const { noChanges, ...otherChanges } = vuuUtils.isConfigChanged(
|
|
332
|
-
|
|
333
|
+
this._config,
|
|
333
334
|
config
|
|
334
335
|
);
|
|
335
336
|
if (noChanges !== true) {
|
|
@@ -341,7 +342,7 @@ class ArrayDataSource extends vuuUtils.EventEmitter {
|
|
|
341
342
|
filterStruct: vuuFilterParser.parseFilter(config.filterSpec.filter)
|
|
342
343
|
}
|
|
343
344
|
} : config;
|
|
344
|
-
|
|
345
|
+
this._config = vuuUtils.withConfigDefaults(newConfig);
|
|
345
346
|
return otherChanges;
|
|
346
347
|
}
|
|
347
348
|
}
|
|
@@ -432,7 +433,7 @@ class ArrayDataSource extends vuuUtils.EventEmitter {
|
|
|
432
433
|
}
|
|
433
434
|
}
|
|
434
435
|
get columns() {
|
|
435
|
-
return
|
|
436
|
+
return this._config.columns;
|
|
436
437
|
}
|
|
437
438
|
set columns(columns) {
|
|
438
439
|
const addedColumns = vuuUtils.getAddedItems(this.config.columns, columns);
|
|
@@ -449,57 +450,57 @@ class ArrayDataSource extends vuuUtils.EventEmitter {
|
|
|
449
450
|
__privateSet(this, _columnMap, vuuUtils.buildColumnMap(columns));
|
|
450
451
|
this.dataIndices = arrayDataUtils.buildDataToClientMap(__privateGet(this, _columnMap), this.dataMap);
|
|
451
452
|
this.config = {
|
|
452
|
-
...
|
|
453
|
+
...this._config,
|
|
453
454
|
columns
|
|
454
455
|
};
|
|
455
456
|
}
|
|
456
457
|
get aggregations() {
|
|
457
|
-
return
|
|
458
|
+
return this._config.aggregations;
|
|
458
459
|
}
|
|
459
460
|
set aggregations(aggregations) {
|
|
460
|
-
|
|
461
|
-
...
|
|
461
|
+
this._config = {
|
|
462
|
+
...this._config,
|
|
462
463
|
aggregations
|
|
463
|
-
}
|
|
464
|
+
};
|
|
464
465
|
const targetData = this.processedData ?? __privateGet(this, _data);
|
|
465
466
|
const leafData = __privateGet(this, _data);
|
|
466
467
|
aggregateUtils.aggregateData(
|
|
467
468
|
aggregations,
|
|
468
469
|
targetData,
|
|
469
|
-
|
|
470
|
+
this._config.groupBy,
|
|
470
471
|
leafData,
|
|
471
472
|
__privateGet(this, _columnMap),
|
|
472
473
|
this.groupMap
|
|
473
474
|
);
|
|
474
475
|
this.setRange(vuuUtils.resetRange(__privateGet(this, _range)), true);
|
|
475
|
-
this.emit("config",
|
|
476
|
+
this.emit("config", this._config);
|
|
476
477
|
}
|
|
477
478
|
get sort() {
|
|
478
|
-
return
|
|
479
|
+
return this._config.sort;
|
|
479
480
|
}
|
|
480
481
|
set sort(sort) {
|
|
481
482
|
debug?.(`sort ${JSON.stringify(sort)}`);
|
|
482
483
|
this.config = {
|
|
483
|
-
...
|
|
484
|
+
...this._config,
|
|
484
485
|
sort
|
|
485
486
|
};
|
|
486
487
|
}
|
|
487
488
|
get filter() {
|
|
488
|
-
return
|
|
489
|
+
return this._config.filterSpec;
|
|
489
490
|
}
|
|
490
491
|
set filter(filter) {
|
|
491
492
|
debug?.(`filter ${JSON.stringify(filter)}`);
|
|
492
493
|
this.config = {
|
|
493
|
-
...
|
|
494
|
+
...this._config,
|
|
494
495
|
filterSpec: filter
|
|
495
496
|
};
|
|
496
497
|
}
|
|
497
498
|
get groupBy() {
|
|
498
|
-
return
|
|
499
|
+
return this._config.groupBy;
|
|
499
500
|
}
|
|
500
501
|
set groupBy(groupBy) {
|
|
501
502
|
this.config = {
|
|
502
|
-
...
|
|
503
|
+
...this._config,
|
|
503
504
|
groupBy
|
|
504
505
|
};
|
|
505
506
|
}
|
|
@@ -508,6 +509,7 @@ class ArrayDataSource extends vuuUtils.EventEmitter {
|
|
|
508
509
|
}
|
|
509
510
|
set title(title) {
|
|
510
511
|
__privateSet(this, _title, title);
|
|
512
|
+
this.emit("title-changed", this.viewport, title);
|
|
511
513
|
}
|
|
512
514
|
get _clientCallback() {
|
|
513
515
|
return this.clientCallback;
|
|
@@ -569,7 +571,6 @@ class ArrayDataSource extends vuuUtils.EventEmitter {
|
|
|
569
571
|
}
|
|
570
572
|
}
|
|
571
573
|
_columnMap = new WeakMap();
|
|
572
|
-
_config = new WeakMap();
|
|
573
574
|
_data = new WeakMap();
|
|
574
575
|
_keys = new WeakMap();
|
|
575
576
|
_links = new WeakMap();
|
|
@@ -1 +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 DataSourceSubscribedMessage,\n Selection,\n SubscribeCallback,\n SubscribeProps,\n TableSchema,\n WithFullConfig\n} from \"@vuu-ui/vuu-data-types\";\nimport { filterPredicate, parseFilter } from \"@vuu-ui/vuu-filter-parser\";\nimport type {\n LinkDescriptorWithLabel,\n VuuAggregation,\n VuuGroupBy,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n VuuSort,\n VuuRpcResponse,\n VuuRpcRequest\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 selectionCount,\n isEditCellRequest\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\n// const isError = (err: unknown): err is { message: string } =>\n// typeof err === \"object\" && err !== null && err.hasOwnProperty(\"message\");\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 #keys = new KeySet(NULL_RANGE);\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 protected processedData: DataSourceRow[] | undefined = undefined;\n\n constructor({\n aggregations,\n // different from RemoteDataSource\n columnDescriptors,\n data,\n dataMap,\n filterSpec,\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 filterSpec: filterSpec || this.#config.filterSpec,\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 ?? (this.viewport = uuid()),\n columns,\n aggregations,\n range,\n sort,\n groupBy,\n filterSpec\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 =\n aggregations || columns || filterSpec || groupBy || sort;\n if (hasConfigProps) {\n if (range) {\n this.setRange(range);\n }\n config = {\n ...config,\n aggregations: aggregations || this.#config.aggregations,\n columns: columns || this.#config.columns,\n filterSpec: filterSpec || this.#config.filterSpec,\n groupBy: groupBy || this.#config.groupBy,\n sort: sort || this.#config.sort\n };\n }\n\n const subscribedMessage: DataSourceSubscribedMessage = {\n ...config,\n type: \"subscribed\",\n clientViewportId: this.viewport,\n range: this.#range,\n tableSchema: this.tableSchema\n };\n this.clientCallback?.(subscribedMessage);\n this.emit(\"subscribed\", subscribedMessage);\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 this.range = range;\n } else if (this.#range !== NULL_RANGE) {\n this.sendRowsToClient();\n }\n }\n }\n\n unsubscribe() {\n this.#status = \"unsubscribed\";\n this.emit(\"unsubscribed\", this.viewport);\n }\n\n suspend() {\n if (this.#status !== \"unsubscribed\") {\n info?.(`suspend #${this.viewport}, current status ${this.#status}`);\n this.#status = \"suspended\";\n }\n }\n\n resume() {\n // const isDisabled = this.#status.startsWith(\"disabl\");\n const isSuspended = this.#status === \"suspended\";\n info?.(`resume #${this.viewport}, current status ${this.#status}`);\n if (isSuspended) {\n this.#status = \"subscribed\";\n }\n }\n\n disable() {\n this.emit(\"disabled\", this.viewport);\n }\n\n enable() {\n this.emit(\"enabled\", this.viewport);\n }\n\n select(selected: Selection) {\n this.#selectedRowsCount = selectionCount(selected);\n debug?.(`select ${JSON.stringify(selected)}`);\n this.selectedRows = selected;\n this.setRange(resetRange(this.#range), true);\n this.emit(\"row-selection\", selected, this.#selectedRowsCount);\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 set links(links: LinkDescriptorWithLabel[] | undefined) {\n this.#links = 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?.filterSpec?.filter &&\n config?.filterSpec.filterStruct === undefined\n ? {\n ...config,\n filterSpec: {\n filter: config.filterSpec.filter,\n filterStruct: parseFilter(config.filterSpec.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) } =\n config.filterSpec;\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?.filterSpec?.filter &&\n config?.filterSpec.filterStruct === undefined\n ? {\n ...config,\n filterSpec: {\n filter: config.filterSpec.filter,\n filterStruct: parseFilter(config.filterSpec.filter)\n }\n }\n : config;\n this.#config = withConfigDefaults(newConfig);\n return otherChanges;\n }\n }\n }\n\n get columnMap() {\n return this.#columnMap;\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 private validateDataValue(columnName: string, value: VuuRowDataItemType) {\n console.log(`validate data value ${columnName} ${value}`);\n const columnDescriptor = this.columnDescriptors.find(\n (col) => col.name === columnName\n );\n if (columnDescriptor) {\n switch (columnDescriptor.serverDataType) {\n case \"int\":\n {\n if (typeof value === \"number\") {\n if (Math.floor(value) !== value) {\n throw Error(`${columnName} is int but value = ${value}`);\n }\n } else if (typeof value === \"string\") {\n const numericValue = parseFloat(value);\n if (Math.floor(numericValue) !== numericValue) {\n throw Error(`${columnName} is ${value} is not a valid integer`);\n }\n }\n }\n break;\n default:\n }\n } else {\n throw Error(`Unknown column ${columnName}`);\n }\n }\n\n protected updateDataItem = (\n keyValue: string,\n columnName: string,\n value: VuuRowDataItemType\n ) => {\n this.validateDataValue(columnName, value);\n // TODO take sorting, filtering. grouping into account\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] = value;\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 update = (row: VuuRowDataItemType[], columnName: string) => {\n // TODO take sorting, filtering. grouping into account\n const keyValue = row[this.key] as string;\n const dataColIndex = this.dataMap?.[columnName] as number;\n return this.updateDataItem(keyValue, columnName, row[dataColIndex]);\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.filterSpec;\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 filterSpec: 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 ?? `${this.table.module} ${this.table.table}`;\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 rowKey: string,\n columnName: string,\n value: VuuRowDataItemType\n ): Promise<true> {\n console.log(`ArrayDataSource applyEdit ${rowKey} ${columnName} ${value}`);\n return Promise.resolve(true);\n }\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">\n ): Promise<VuuRpcResponse> {\n return new Promise((resolve) => {\n if (isEditCellRequest(rpcRequest)) {\n const { rowKey, field, value } = rpcRequest;\n try {\n this.updateDataItem(rowKey, field, value);\n resolve({\n action: {\n type: \"VP_EDIT_SUCCESS\"\n },\n rpcName: \"VP_EDIT_CELL_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId: this.viewport\n });\n } catch (error) {\n resolve({\n error: String(error),\n rpcName: \"VP_EDIT_CELL_RPC\",\n type: \"VIEW_PORT_MENU_REJ\",\n vpId: this.viewport\n });\n }\n } else {\n throw Error(\"menuRpcCall invalid rpcRequest\");\n }\n });\n }\n}\n"],"names":["logger","metadataKeys","EventEmitter","vanillaConfig","KeySet","NULL_RANGE","row","uuid","buildColumnMap","buildDataToClientMap","selectionCount","resetRange","expandGroup","collapseGroup","parseFilter","withConfigDefaults","hasFilter","filterPredicate","hasSort","sortRows","isGroupByChanged","hasGroupBy","groupRows","isConfigChanged","toClientRow","rangeNewItems","getAddedItems","getMissingItems","aggregateData","isEditCellRequest"],"mappings":"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"}
|
|
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 DataSourceSubscribedMessage,\n Selection,\n SubscribeCallback,\n SubscribeProps,\n TableSchema,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport { filterPredicate, parseFilter } from \"@vuu-ui/vuu-filter-parser\";\nimport type {\n LinkDescriptorWithLabel,\n VuuAggregation,\n VuuGroupBy,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n VuuSort,\n VuuRpcResponse,\n VuuRpcRequest,\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 selectionCount,\n isEditCellRequest,\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\n// const isError = (err: unknown): err is { message: string } =>\n// typeof err === \"object\" && err !== null && err.hasOwnProperty(\"message\");\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 protected _config: WithFullConfig & { visualLink?: LinkDescriptorWithLabel } =\n vanillaConfig;\n #data: DataSourceRow[];\n #keys = new KeySet(NULL_RANGE);\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 protected processedData: DataSourceRow[] | undefined = undefined;\n\n constructor({\n aggregations,\n // different from RemoteDataSource\n columnDescriptors,\n data,\n dataMap,\n filterSpec,\n groupBy,\n keyColumn,\n rangeChangeRowset = \"delta\",\n sort,\n title,\n viewport,\n }: ArrayDataSourceConstructorProps) {\n super();\n console.log(`ArrayDataSource #${viewport}`);\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 filterSpec: filterSpec || this._config.filterSpec,\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 ?? (this.viewport = uuid()),\n columns,\n aggregations,\n range,\n sort,\n groupBy,\n filterSpec,\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 =\n aggregations || columns || filterSpec || groupBy || sort;\n if (hasConfigProps) {\n if (range) {\n this.setRange(range);\n }\n config = {\n ...config,\n aggregations: aggregations || this._config.aggregations,\n columns: columns || this._config.columns,\n filterSpec: filterSpec || this._config.filterSpec,\n groupBy: groupBy || this._config.groupBy,\n sort: sort || this._config.sort,\n };\n }\n\n const subscribedMessage: DataSourceSubscribedMessage = {\n ...config,\n type: \"subscribed\",\n clientViewportId: this.viewport,\n range: this.#range,\n tableSchema: this.tableSchema,\n };\n this.clientCallback?.(subscribedMessage);\n this.emit(\"subscribed\", subscribedMessage);\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 this.range = range;\n } else if (this.#range !== NULL_RANGE) {\n this.sendRowsToClient();\n }\n }\n }\n\n unsubscribe() {\n this.#status = \"unsubscribed\";\n this.emit(\"unsubscribed\", this.viewport);\n }\n\n suspend() {\n if (this.#status !== \"unsubscribed\") {\n info?.(`suspend #${this.viewport}, current status ${this.#status}`);\n this.#status = \"suspended\";\n }\n }\n\n resume() {\n // const isDisabled = this.#status.startsWith(\"disabl\");\n const isSuspended = this.#status === \"suspended\";\n info?.(`resume #${this.viewport}, current status ${this.#status}`);\n if (isSuspended) {\n this.#status = \"subscribed\";\n }\n }\n\n disable() {\n this.emit(\"disabled\", this.viewport);\n }\n\n enable() {\n this.emit(\"enabled\", this.viewport);\n }\n\n select(selected: Selection) {\n this.#selectedRowsCount = selectionCount(selected);\n debug?.(`select ${JSON.stringify(selected)}`);\n this.selectedRows = selected;\n this.setRange(resetRange(this.#range), true);\n this.emit(\"row-selection\", selected, this.#selectedRowsCount);\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 set links(links: LinkDescriptorWithLabel[] | undefined) {\n this.#links = 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?.filterSpec?.filter &&\n config?.filterSpec.filterStruct === undefined\n ? {\n ...config,\n filterSpec: {\n filter: config.filterSpec.filter,\n filterStruct: parseFilter(config.filterSpec.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) } =\n config.filterSpec;\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?.filterSpec?.filter &&\n config?.filterSpec.filterStruct === undefined\n ? {\n ...config,\n filterSpec: {\n filter: config.filterSpec.filter,\n filterStruct: parseFilter(config.filterSpec.filter),\n },\n }\n : config;\n this._config = withConfigDefaults(newConfig);\n return otherChanges;\n }\n }\n }\n\n get columnMap() {\n return this.#columnMap;\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 private validateDataValue(columnName: string, value: VuuRowDataItemType) {\n console.log(`validate data value ${columnName} ${value}`);\n const columnDescriptor = this.columnDescriptors.find(\n (col) => col.name === columnName,\n );\n if (columnDescriptor) {\n switch (columnDescriptor.serverDataType) {\n case \"int\":\n {\n if (typeof value === \"number\") {\n if (Math.floor(value) !== value) {\n throw Error(`${columnName} is int but value = ${value}`);\n }\n } else if (typeof value === \"string\") {\n const numericValue = parseFloat(value);\n if (Math.floor(numericValue) !== numericValue) {\n throw Error(`${columnName} is ${value} is not a valid integer`);\n }\n }\n }\n break;\n default:\n }\n } else {\n throw Error(`Unknown column ${columnName}`);\n }\n }\n\n protected updateDataItem = (\n keyValue: string,\n columnName: string,\n value: VuuRowDataItemType,\n ) => {\n this.validateDataValue(columnName, value);\n // TODO take sorting, filtering. grouping into account\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] = value;\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 update = (row: VuuRowDataItemType[], columnName: string) => {\n // TODO take sorting, filtering. grouping into account\n const keyValue = row[this.key] as string;\n const dataColIndex = this.dataMap?.[columnName] as number;\n return this.updateDataItem(keyValue, columnName, row[dataColIndex]);\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.filterSpec;\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 filterSpec: 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 ?? `${this.table.module} ${this.table.table}`;\n }\n\n set title(title: string) {\n this.#title = title;\n this.emit(\"title-changed\", this.viewport, 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 rowKey: string,\n columnName: string,\n value: VuuRowDataItemType,\n ): Promise<true> {\n console.log(`ArrayDataSource applyEdit ${rowKey} ${columnName} ${value}`);\n return Promise.resolve(true);\n }\n async remoteProcedureCall<T extends VuuRpcResponse = VuuRpcResponse>() {\n return Promise.reject<T>();\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">,\n ): Promise<VuuRpcResponse> {\n return new Promise((resolve) => {\n if (isEditCellRequest(rpcRequest)) {\n const { rowKey, field, value } = rpcRequest;\n try {\n this.updateDataItem(rowKey, field, value);\n resolve({\n action: {\n type: \"VP_EDIT_SUCCESS\",\n },\n rpcName: \"VP_EDIT_CELL_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId: this.viewport,\n });\n } catch (error) {\n resolve({\n error: String(error),\n rpcName: \"VP_EDIT_CELL_RPC\",\n type: \"VIEW_PORT_MENU_REJ\",\n vpId: this.viewport,\n });\n }\n } else {\n throw Error(\"menuRpcCall invalid rpcRequest\");\n }\n });\n }\n}\n"],"names":["logger","metadataKeys","EventEmitter","vanillaConfig","KeySet","NULL_RANGE","row","uuid","buildColumnMap","buildDataToClientMap","selectionCount","resetRange","expandGroup","collapseGroup","parseFilter","withConfigDefaults","hasFilter","filterPredicate","hasSort","sortRows","isGroupByChanged","hasGroupBy","groupRows","isConfigChanged","toClientRow","rangeNewItems","getAddedItems","getMissingItems","aggregateData","isEditCellRequest"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array-data-utils.js","sources":["../../src/array-data-source/array-data-utils.ts"],"sourcesContent":["import type { DataSourceRow, Selection } from \"@vuu-ui/vuu-data-types\";\nimport {\n ColumnMap,\n getSelectionStatus,\n KeySet,\n metadataKeys
|
|
1
|
+
{"version":3,"file":"array-data-utils.js","sources":["../../src/array-data-source/array-data-utils.ts"],"sourcesContent":["import type { DataSourceRow, Selection } from \"@vuu-ui/vuu-data-types\";\nimport {\n ColumnMap,\n getSelectionStatus,\n KeySet,\n metadataKeys,\n} from \"@vuu-ui/vuu-utils\";\n\nconst { RENDER_IDX, SELECTED } = metadataKeys;\n\nexport const toClientRow = (\n row: DataSourceRow,\n keys: KeySet,\n selection: Selection,\n dataIndices?: number[],\n) => {\n const [rowIndex] = row;\n let clientRow;\n if (dataIndices) {\n // If client has specified a different ordering of columns from the way they are\n // ordered inn the underlying data, this is where we effect the ordering.\n const { count } = metadataKeys;\n clientRow = row\n .slice(0, count)\n .concat(dataIndices.map((idx) => row[idx])) as DataSourceRow;\n } else {\n clientRow = row.slice() as DataSourceRow;\n }\n clientRow[RENDER_IDX] = keys.keyFor(rowIndex);\n clientRow[SELECTED] = getSelectionStatus(selection, rowIndex);\n return clientRow;\n};\n\nconst divergentMaps = (columnMap: ColumnMap, dataMap?: ColumnMap) => {\n if (dataMap) {\n const { count: mapOffset } = metadataKeys;\n for (const [columnName, index] of Object.entries(columnMap)) {\n const dataIdx = dataMap[columnName];\n if (dataIdx === undefined) {\n throw Error(\n `ArrayDataSource column ${columnName} is not in underlying data set`,\n );\n } else if (dataIdx !== index - mapOffset) {\n return true;\n }\n }\n }\n return false;\n};\n\nconst getDataIndices = (columnMap: ColumnMap, dataMap: ColumnMap) => {\n const { count: mapOffset } = metadataKeys;\n const result: number[] = [];\n Object.entries(columnMap).forEach(([columnName]) => {\n result.push(dataMap[columnName] + mapOffset);\n });\n return result;\n};\n\nexport const buildDataToClientMap = (\n columnMap: ColumnMap,\n dataMap?: ColumnMap,\n): number[] | undefined => {\n if (dataMap && divergentMaps(columnMap, dataMap)) {\n return getDataIndices(columnMap, dataMap);\n }\n return undefined;\n};\n"],"names":["metadataKeys","getSelectionStatus"],"mappings":";;;;AAQA,MAAM,EAAE,UAAY,EAAA,QAAA,EAAa,GAAAA,qBAAA,CAAA;AAE1B,MAAM,WAAc,GAAA,CACzB,GACA,EAAA,IAAA,EACA,WACA,WACG,KAAA;AACH,EAAM,MAAA,CAAC,QAAQ,CAAI,GAAA,GAAA,CAAA;AACnB,EAAI,IAAA,SAAA,CAAA;AACJ,EAAA,IAAI,WAAa,EAAA;AAGf,IAAM,MAAA,EAAE,OAAU,GAAAA,qBAAA,CAAA;AAClB,IAAA,SAAA,GAAY,GACT,CAAA,KAAA,CAAM,CAAG,EAAA,KAAK,CACd,CAAA,MAAA,CAAO,WAAY,CAAA,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAI,CAAA,GAAG,CAAC,CAAC,CAAA,CAAA;AAAA,GACvC,MAAA;AACL,IAAA,SAAA,GAAY,IAAI,KAAM,EAAA,CAAA;AAAA,GACxB;AACA,EAAA,SAAA,CAAU,UAAU,CAAA,GAAI,IAAK,CAAA,MAAA,CAAO,QAAQ,CAAA,CAAA;AAC5C,EAAA,SAAA,CAAU,QAAQ,CAAA,GAAIC,2BAAmB,CAAA,SAAA,EAAW,QAAQ,CAAA,CAAA;AAC5D,EAAO,OAAA,SAAA,CAAA;AACT,EAAA;AAEA,MAAM,aAAA,GAAgB,CAAC,SAAA,EAAsB,OAAwB,KAAA;AACnE,EAAA,IAAI,OAAS,EAAA;AACX,IAAM,MAAA,EAAE,KAAO,EAAA,SAAA,EAAc,GAAAD,qBAAA,CAAA;AAC7B,IAAA,KAAA,MAAW,CAAC,UAAY,EAAA,KAAK,KAAK,MAAO,CAAA,OAAA,CAAQ,SAAS,CAAG,EAAA;AAC3D,MAAM,MAAA,OAAA,GAAU,QAAQ,UAAU,CAAA,CAAA;AAClC,MAAA,IAAI,YAAY,KAAW,CAAA,EAAA;AACzB,QAAM,MAAA,KAAA;AAAA,UACJ,0BAA0B,UAAU,CAAA,8BAAA,CAAA;AAAA,SACtC,CAAA;AAAA,OACF,MAAA,IAAW,OAAY,KAAA,KAAA,GAAQ,SAAW,EAAA;AACxC,QAAO,OAAA,IAAA,CAAA;AAAA,OACT;AAAA,KACF;AAAA,GACF;AACA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,cAAA,GAAiB,CAAC,SAAA,EAAsB,OAAuB,KAAA;AACnE,EAAM,MAAA,EAAE,KAAO,EAAA,SAAA,EAAc,GAAAA,qBAAA,CAAA;AAC7B,EAAA,MAAM,SAAmB,EAAC,CAAA;AAC1B,EAAA,MAAA,CAAO,QAAQ,SAAS,CAAA,CAAE,QAAQ,CAAC,CAAC,UAAU,CAAM,KAAA;AAClD,IAAA,MAAA,CAAO,IAAK,CAAA,OAAA,CAAQ,UAAU,CAAA,GAAI,SAAS,CAAA,CAAA;AAAA,GAC5C,CAAA,CAAA;AACD,EAAO,OAAA,MAAA,CAAA;AACT,CAAA,CAAA;AAEa,MAAA,oBAAA,GAAuB,CAClC,SAAA,EACA,OACyB,KAAA;AACzB,EAAA,IAAI,OAAW,IAAA,aAAA,CAAc,SAAW,EAAA,OAAO,CAAG,EAAA;AAChD,IAAO,OAAA,cAAA,CAAe,WAAW,OAAO,CAAA,CAAA;AAAA,GAC1C;AACA,EAAO,OAAA,KAAA,CAAA,CAAA;AACT;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group-utils.js","sources":["../../src/array-data-source/group-utils.ts"],"sourcesContent":["import type { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport type { VuuGroupBy } from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap, metadataKeys } from \"@vuu-ui/vuu-utils\";\n\nexport type KeyList = number[];\nexport type GroupMap = { [key: string]: GroupMap | KeyList };\n\nconst { DEPTH, IS_EXPANDED, KEY } = metadataKeys;\n\nexport const collapseGroup = (\n key: string,\n groupedRows: readonly DataSourceRow[]\n): DataSourceRow[] => {\n const rows: DataSourceRow[] = [];\n\n for (\n let i = 0, idx = 0, collapsed = false, len = groupedRows.length;\n i < len;\n i++\n ) {\n const row = groupedRows[i];\n const { [DEPTH]: depth, [KEY]: rowKey } = row;\n if (rowKey === key) {\n const collapsedRow = row.slice() as DataSourceRow;\n collapsedRow[IS_EXPANDED] = false;\n rows.push(collapsedRow);\n idx += 1;\n collapsed = true;\n while (i < len - 1 && groupedRows[i + 1][DEPTH] > depth) {\n i += 1;\n }\n } else if (collapsed) {\n const newRow = row.slice() as DataSourceRow;\n newRow[0] = idx;\n newRow[1] = idx;\n rows.push(newRow);\n idx += 1;\n } else {\n rows.push(row);\n idx += 1;\n }\n }\n\n return rows;\n};\n\nexport const expandGroup = (\n keys: string[],\n sourceRows: readonly DataSourceRow[],\n groupBy: VuuGroupBy,\n columnMap: ColumnMap,\n groupMap: GroupMap,\n processedData: readonly DataSourceRow[]\n): DataSourceRow[] => {\n const groupIndices = groupBy.map<number>((column) => columnMap[column]);\n return dataRowsFromGroups2(\n groupMap,\n groupIndices,\n keys,\n sourceRows,\n undefined,\n undefined,\n undefined,\n processedData\n );\n};\n\nconst dataRowsFromGroups2 = (\n groupMap: GroupMap,\n groupIndices: number[],\n openKeys: string[],\n sourceRows: readonly DataSourceRow[] = [],\n root = \"$root\",\n depth = 1,\n rows: DataSourceRow[] = [],\n processedData: readonly DataSourceRow[]\n) => {\n console.log(`dataRowsFromGroups2 1)`);\n const keys = Object.keys(groupMap).sort();\n for (const key of keys) {\n const idx = rows.length;\n const groupKey = `${root}|${key}`;\n const row: DataSourceRow = [idx, idx, false, false, depth, 0, groupKey, 0];\n // TODO whats this\n row[groupIndices[depth - 1]] = key;\n rows.push(row);\n\n if (openKeys.includes(groupKey)) {\n row[IS_EXPANDED] = true;\n if (Array.isArray(groupMap[key])) {\n pushChildren(\n rows,\n groupMap[key] as KeyList,\n sourceRows,\n groupKey,\n depth + 1\n );\n } else {\n dataRowsFromGroups2(\n groupMap[key] as GroupMap,\n groupIndices,\n openKeys,\n sourceRows,\n groupKey,\n depth + 1,\n rows,\n processedData\n );\n }\n }\n }\n console.log(`dataRowsFromGroups2 2)`);\n\n for (const key in rows) {\n for (const index in rows) {\n if (rows[key][2] === false && processedData[index] != undefined) {\n if (\n rows[key][groupIndices[0]] === processedData[index][groupIndices[0]]\n ) {\n rows[key] = rows[key].splice(0, 8).concat(\n processedData[index].slice(\n 8, // groupIndices[0] + 1,\n processedData[index].length\n )\n ) as DataSourceRow;\n break;\n }\n }\n }\n }\n console.log(`dataRowsFromGroups2 3)`);\n\n return rows;\n};\n\nconst pushChildren = (\n rows: DataSourceRow[],\n tree: KeyList,\n sourceRows: readonly DataSourceRow[],\n parentKey: string,\n depth: number\n) => {\n for (const rowIdx of tree) {\n const idx = rows.length;\n const sourceRow = sourceRows[rowIdx].slice() as DataSourceRow;\n sourceRow[0] = idx;\n sourceRow[1] = idx;\n sourceRow[DEPTH] = depth;\n sourceRow[KEY] = `${parentKey}|${sourceRow[KEY]}`;\n rows.push(sourceRow);\n }\n};\n\nexport const groupRows = (\n rows: readonly DataSourceRow[],\n groupBy: VuuGroupBy,\n columnMap: ColumnMap\n): [DataSourceRow[], GroupMap] => {\n const groupIndices = groupBy.map<number>((column) => columnMap[column]);\n const groupTree = groupLeafRows(rows, groupIndices);\n const groupedDataRows = dataRowsFromGroups(groupTree, groupIndices);\n // 2) collapse int groups\n\n return [groupedDataRows, groupTree];\n};\n\nconst dataRowsFromGroups = (groupTree: GroupMap, groupIndices: number[]) => {\n const depth = 0;\n const rows: DataSourceRow[] = [];\n let idx = 0;\n const keys = Object.keys(groupTree).sort();\n for (const key of keys) {\n const row: DataSourceRow = [\n idx,\n idx,\n false,\n false,\n 1,\n 0,\n `$root|${key}`,\n 0\n ];\n row[groupIndices[depth]] = key;\n rows.push(row);\n idx += 1;\n }\n return rows;\n};\n\nfunction groupLeafRows(leafRows: readonly DataSourceRow[], groupby: number[]) {\n const groups: GroupMap = {};\n const levels = groupby.length;\n const lastLevel = levels - 1;\n for (let i = 0, len = leafRows.length; i < len; i++) {\n const leafRow = leafRows[i];\n let target: GroupMap | KeyList = groups;\n let targetNode;\n let key;\n for (let level = 0; level < levels; level++) {\n const colIdx = groupby[level];\n key = leafRow[colIdx].toString();\n targetNode = (target as GroupMap)[key];\n if (targetNode && level === lastLevel) {\n // we're at leaf level, targetNode can only be a KeyList\n (targetNode as KeyList).push(i);\n } else if (targetNode) {\n target = targetNode;\n } else if (!targetNode && level < lastLevel) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n target = target[key] = {};\n } else if (!targetNode) {\n (target as GroupMap)[key] = [i];\n }\n }\n }\n console.log(\"!! groups\", groups);\n return groups;\n}\n"],"names":["metadataKeys"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"group-utils.js","sources":["../../src/array-data-source/group-utils.ts"],"sourcesContent":["import type { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport type { VuuGroupBy } from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap, metadataKeys } from \"@vuu-ui/vuu-utils\";\n\nexport type KeyList = number[];\nexport type GroupMap = { [key: string]: GroupMap | KeyList };\n\nconst { DEPTH, IS_EXPANDED, KEY } = metadataKeys;\n\nexport const collapseGroup = (\n key: string,\n groupedRows: readonly DataSourceRow[],\n): DataSourceRow[] => {\n const rows: DataSourceRow[] = [];\n\n for (\n let i = 0, idx = 0, collapsed = false, len = groupedRows.length;\n i < len;\n i++\n ) {\n const row = groupedRows[i];\n const { [DEPTH]: depth, [KEY]: rowKey } = row;\n if (rowKey === key) {\n const collapsedRow = row.slice() as DataSourceRow;\n collapsedRow[IS_EXPANDED] = false;\n rows.push(collapsedRow);\n idx += 1;\n collapsed = true;\n while (i < len - 1 && groupedRows[i + 1][DEPTH] > depth) {\n i += 1;\n }\n } else if (collapsed) {\n const newRow = row.slice() as DataSourceRow;\n newRow[0] = idx;\n newRow[1] = idx;\n rows.push(newRow);\n idx += 1;\n } else {\n rows.push(row);\n idx += 1;\n }\n }\n\n return rows;\n};\n\nexport const expandGroup = (\n keys: string[],\n sourceRows: readonly DataSourceRow[],\n groupBy: VuuGroupBy,\n columnMap: ColumnMap,\n groupMap: GroupMap,\n processedData: readonly DataSourceRow[],\n): DataSourceRow[] => {\n const groupIndices = groupBy.map<number>((column) => columnMap[column]);\n return dataRowsFromGroups2(\n groupMap,\n groupIndices,\n keys,\n sourceRows,\n undefined,\n undefined,\n undefined,\n processedData,\n );\n};\n\nconst dataRowsFromGroups2 = (\n groupMap: GroupMap,\n groupIndices: number[],\n openKeys: string[],\n sourceRows: readonly DataSourceRow[] = [],\n root = \"$root\",\n depth = 1,\n rows: DataSourceRow[] = [],\n processedData: readonly DataSourceRow[],\n) => {\n console.log(`dataRowsFromGroups2 1)`);\n const keys = Object.keys(groupMap).sort();\n for (const key of keys) {\n const idx = rows.length;\n const groupKey = `${root}|${key}`;\n const row: DataSourceRow = [idx, idx, false, false, depth, 0, groupKey, 0];\n // TODO whats this\n row[groupIndices[depth - 1]] = key;\n rows.push(row);\n\n if (openKeys.includes(groupKey)) {\n row[IS_EXPANDED] = true;\n if (Array.isArray(groupMap[key])) {\n pushChildren(\n rows,\n groupMap[key] as KeyList,\n sourceRows,\n groupKey,\n depth + 1,\n );\n } else {\n dataRowsFromGroups2(\n groupMap[key] as GroupMap,\n groupIndices,\n openKeys,\n sourceRows,\n groupKey,\n depth + 1,\n rows,\n processedData,\n );\n }\n }\n }\n console.log(`dataRowsFromGroups2 2)`);\n\n for (const key in rows) {\n for (const index in rows) {\n if (rows[key][2] === false && processedData[index] != undefined) {\n if (\n rows[key][groupIndices[0]] === processedData[index][groupIndices[0]]\n ) {\n rows[key] = rows[key].splice(0, 8).concat(\n processedData[index].slice(\n 8, // groupIndices[0] + 1,\n processedData[index].length,\n ),\n ) as DataSourceRow;\n break;\n }\n }\n }\n }\n console.log(`dataRowsFromGroups2 3)`);\n\n return rows;\n};\n\nconst pushChildren = (\n rows: DataSourceRow[],\n tree: KeyList,\n sourceRows: readonly DataSourceRow[],\n parentKey: string,\n depth: number,\n) => {\n for (const rowIdx of tree) {\n const idx = rows.length;\n const sourceRow = sourceRows[rowIdx].slice() as DataSourceRow;\n sourceRow[0] = idx;\n sourceRow[1] = idx;\n sourceRow[DEPTH] = depth;\n sourceRow[KEY] = `${parentKey}|${sourceRow[KEY]}`;\n rows.push(sourceRow);\n }\n};\n\nexport const groupRows = (\n rows: readonly DataSourceRow[],\n groupBy: VuuGroupBy,\n columnMap: ColumnMap,\n): [DataSourceRow[], GroupMap] => {\n const groupIndices = groupBy.map<number>((column) => columnMap[column]);\n const groupTree = groupLeafRows(rows, groupIndices);\n const groupedDataRows = dataRowsFromGroups(groupTree, groupIndices);\n // 2) collapse int groups\n\n return [groupedDataRows, groupTree];\n};\n\nconst dataRowsFromGroups = (groupTree: GroupMap, groupIndices: number[]) => {\n const depth = 0;\n const rows: DataSourceRow[] = [];\n let idx = 0;\n const keys = Object.keys(groupTree).sort();\n for (const key of keys) {\n const row: DataSourceRow = [\n idx,\n idx,\n false,\n false,\n 1,\n 0,\n `$root|${key}`,\n 0,\n ];\n row[groupIndices[depth]] = key;\n rows.push(row);\n idx += 1;\n }\n return rows;\n};\n\nfunction groupLeafRows(leafRows: readonly DataSourceRow[], groupby: number[]) {\n const groups: GroupMap = {};\n const levels = groupby.length;\n const lastLevel = levels - 1;\n for (let i = 0, len = leafRows.length; i < len; i++) {\n const leafRow = leafRows[i];\n let target: GroupMap | KeyList = groups;\n let targetNode;\n let key;\n for (let level = 0; level < levels; level++) {\n const colIdx = groupby[level];\n key = leafRow[colIdx].toString();\n targetNode = (target as GroupMap)[key];\n if (targetNode && level === lastLevel) {\n // we're at leaf level, targetNode can only be a KeyList\n (targetNode as KeyList).push(i);\n } else if (targetNode) {\n target = targetNode;\n } else if (!targetNode && level < lastLevel) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n target = target[key] = {};\n } else if (!targetNode) {\n (target as GroupMap)[key] = [i];\n }\n }\n }\n console.log(\"!! groups\", groups);\n return groups;\n}\n"],"names":["metadataKeys"],"mappings":"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"}
|