@vuu-ui/vuu-data-local 0.9.1 → 0.9.3
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 +1 -1
- package/cjs/array-data-source/aggregate-utils.js.map +1 -1
- package/cjs/array-data-source/array-data-source.js +28 -19
- 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 +0 -3
- 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/JsonDataSource.js +2 -2
- package/cjs/json-data-source/JsonDataSource.js.map +1 -1
- package/cjs/tree-data-source/IconProvider.js +1 -1
- package/cjs/tree-data-source/IconProvider.js.map +1 -1
- package/cjs/tree-data-source/TreeDataSource.js +113 -25
- package/cjs/tree-data-source/TreeDataSource.js.map +1 -1
- package/esm/array-data-source/aggregate-utils.js +1 -1
- package/esm/array-data-source/aggregate-utils.js.map +1 -1
- package/esm/array-data-source/array-data-source.js +29 -20
- 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 +0 -3
- 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/JsonDataSource.js +2 -2
- package/esm/json-data-source/JsonDataSource.js.map +1 -1
- package/esm/tree-data-source/IconProvider.js +1 -1
- package/esm/tree-data-source/IconProvider.js.map +1 -1
- package/esm/tree-data-source/TreeDataSource.js +114 -26
- package/esm/tree-data-source/TreeDataSource.js.map +1 -1
- package/package.json +7 -7
- package/types/array-data-source/array-data-source.d.ts +4 -3
- package/types/tree-data-source/TreeDataSource.d.ts +12 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { parseFilter, filterPredicate } from '@vuu-ui/vuu-filter-parser';
|
|
2
|
-
import { logger, EventEmitter, KeySet, NULL_RANGE, uuid, buildColumnMap,
|
|
2
|
+
import { logger, EventEmitter, KeySet, NULL_RANGE, uuid, buildColumnMap, selectionCount, rangesAreSame, resetRange, withConfigDefaults, hasFilter, hasBaseFilter, combineFilters, hasSort, isGroupByChanged, hasGroupBy, isConfigChanged, rangeNewItems, getAddedItems, getMissingItems, isEditCellRequest, metadataKeys, vanillaConfig } from '@vuu-ui/vuu-utils';
|
|
3
3
|
import { aggregateData } from './aggregate-utils.js';
|
|
4
4
|
import { buildDataToClientMap, toClientRow } from './array-data-utils.js';
|
|
5
5
|
import { expandGroup, collapseGroup, groupRows } from './group-utils.js';
|
|
@@ -14,7 +14,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
14
14
|
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
15
15
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
16
16
|
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
17
|
-
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"),
|
|
17
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
18
18
|
var _columnMap, _data, _keys, _links, _range, _selectedRowsCount, _status, _title;
|
|
19
19
|
const { debug, info } = logger("ArrayDataSource");
|
|
20
20
|
const { KEY } = metadataKeys;
|
|
@@ -35,6 +35,7 @@ const buildTableSchema = (columns, keyColumn) => {
|
|
|
35
35
|
class ArrayDataSource extends EventEmitter {
|
|
36
36
|
constructor({
|
|
37
37
|
aggregations,
|
|
38
|
+
baseFilterSpec,
|
|
38
39
|
// different from RemoteDataSource
|
|
39
40
|
columnDescriptors,
|
|
40
41
|
data,
|
|
@@ -45,7 +46,8 @@ class ArrayDataSource extends EventEmitter {
|
|
|
45
46
|
rangeChangeRowset = "delta",
|
|
46
47
|
sort,
|
|
47
48
|
title,
|
|
48
|
-
viewport
|
|
49
|
+
viewport,
|
|
50
|
+
visualLink
|
|
49
51
|
}) {
|
|
50
52
|
super();
|
|
51
53
|
__publicField(this, "clientCallback");
|
|
@@ -90,7 +92,7 @@ class ArrayDataSource extends EventEmitter {
|
|
|
90
92
|
this.validateDataValue(columnName, value);
|
|
91
93
|
const colIndex = __privateGet(this, _columnMap)[columnName];
|
|
92
94
|
const dataColIndex = this.dataMap?.[columnName];
|
|
93
|
-
const dataIndex =
|
|
95
|
+
const dataIndex = this.indexOfRowWithKey(keyValue);
|
|
94
96
|
if (dataIndex !== -1 && dataColIndex !== void 0) {
|
|
95
97
|
const dataSourceRow = __privateGet(this, _data)[dataIndex];
|
|
96
98
|
dataSourceRow[colIndex] = value;
|
|
@@ -101,6 +103,7 @@ class ArrayDataSource extends EventEmitter {
|
|
|
101
103
|
}
|
|
102
104
|
}
|
|
103
105
|
});
|
|
106
|
+
__publicField(this, "indexOfRowWithKey", (key) => __privateGet(this, _data).findIndex((row) => row[KEY] === key));
|
|
104
107
|
__publicField(this, "update", (row, columnName) => {
|
|
105
108
|
const keyValue = row[this.key];
|
|
106
109
|
const dataColIndex = this.dataMap?.[columnName];
|
|
@@ -123,6 +126,7 @@ class ArrayDataSource extends EventEmitter {
|
|
|
123
126
|
"ArrayDataSource constructor called without data or without columnDescriptors"
|
|
124
127
|
);
|
|
125
128
|
}
|
|
129
|
+
console.log({ visualLink });
|
|
126
130
|
this.columnDescriptors = columnDescriptors;
|
|
127
131
|
this.dataMap = dataMap;
|
|
128
132
|
this.key = keyColumn ? this.columnDescriptors.findIndex((col) => col.name === keyColumn) : 0;
|
|
@@ -137,6 +141,7 @@ class ArrayDataSource extends EventEmitter {
|
|
|
137
141
|
this.config = {
|
|
138
142
|
...this._config,
|
|
139
143
|
aggregations: aggregations || this._config.aggregations,
|
|
144
|
+
baseFilterSpec,
|
|
140
145
|
columns,
|
|
141
146
|
filterSpec: filterSpec || this._config.filterSpec,
|
|
142
147
|
groupBy: groupBy || this._config.groupBy,
|
|
@@ -148,7 +153,10 @@ class ArrayDataSource extends EventEmitter {
|
|
|
148
153
|
viewport = this.viewport ?? (this.viewport = uuid()),
|
|
149
154
|
columns,
|
|
150
155
|
aggregations,
|
|
156
|
+
baseFilterSpec,
|
|
151
157
|
range,
|
|
158
|
+
selectedIndexValues,
|
|
159
|
+
selectedKeyValues,
|
|
152
160
|
sort,
|
|
153
161
|
groupBy,
|
|
154
162
|
filterSpec
|
|
@@ -156,6 +164,8 @@ class ArrayDataSource extends EventEmitter {
|
|
|
156
164
|
this.clientCallback = callback;
|
|
157
165
|
this.viewport = viewport;
|
|
158
166
|
__privateSet(this, _status, "subscribed");
|
|
167
|
+
this.selectedRows = selectedIndexValues ?? this.convertKeysToIndexValues(selectedKeyValues) ?? [];
|
|
168
|
+
__privateSet(this, _selectedRowsCount, selectionCount(this.selectedRows));
|
|
159
169
|
this.lastRangeServed = { from: 0, to: 0 };
|
|
160
170
|
let config = this._config;
|
|
161
171
|
const hasConfigProps = aggregations || columns || filterSpec || groupBy || sort;
|
|
@@ -166,6 +176,7 @@ class ArrayDataSource extends EventEmitter {
|
|
|
166
176
|
config = {
|
|
167
177
|
...config,
|
|
168
178
|
aggregations: aggregations || this._config.aggregations,
|
|
179
|
+
baseFilterSpec: baseFilterSpec || this._config.baseFilterSpec,
|
|
169
180
|
columns: columns || this._config.columns,
|
|
170
181
|
filterSpec: filterSpec || this._config.filterSpec,
|
|
171
182
|
groupBy: groupBy || this._config.groupBy,
|
|
@@ -333,11 +344,6 @@ class ArrayDataSource extends EventEmitter {
|
|
|
333
344
|
if (this.openTreeNodes.length > 0 && isGroupByChanged(originalConfig, config)) {
|
|
334
345
|
if (this._config.groupBy.length === 0) {
|
|
335
346
|
this.openTreeNodes.length = 0;
|
|
336
|
-
} else {
|
|
337
|
-
console.log("adjust the openTReeNodes groupBy changed ", {
|
|
338
|
-
originalGroupBy: originalConfig.groupBy,
|
|
339
|
-
newGroupBy: newConfig.groupBy
|
|
340
|
-
});
|
|
341
347
|
}
|
|
342
348
|
}
|
|
343
349
|
if (hasGroupBy(config)) {
|
|
@@ -346,7 +352,6 @@ class ArrayDataSource extends EventEmitter {
|
|
|
346
352
|
config.groupBy,
|
|
347
353
|
__privateGet(this, _columnMap)
|
|
348
354
|
);
|
|
349
|
-
console.log({ groupedData });
|
|
350
355
|
this.groupMap = groupMap;
|
|
351
356
|
processedData = groupedData;
|
|
352
357
|
if (this.openTreeNodes.length > 0) {
|
|
@@ -368,7 +373,7 @@ class ArrayDataSource extends EventEmitter {
|
|
|
368
373
|
});
|
|
369
374
|
}
|
|
370
375
|
this.setRange(resetRange(__privateGet(this, _range)), true);
|
|
371
|
-
this.emit("config", this._config, void 0, configChanges);
|
|
376
|
+
this.emit("config", this._config, this.range, void 0, configChanges);
|
|
372
377
|
}
|
|
373
378
|
}
|
|
374
379
|
applyConfig(config, preserveExistingConfigAttributes = false) {
|
|
@@ -526,7 +531,7 @@ class ArrayDataSource extends EventEmitter {
|
|
|
526
531
|
this.groupMap
|
|
527
532
|
);
|
|
528
533
|
this.setRange(resetRange(__privateGet(this, _range)), true);
|
|
529
|
-
this.emit("config", this._config);
|
|
534
|
+
this.emit("config", this._config, this.range);
|
|
530
535
|
}
|
|
531
536
|
get sort() {
|
|
532
537
|
return this._config.sort;
|
|
@@ -590,14 +595,6 @@ class ArrayDataSource extends EventEmitter {
|
|
|
590
595
|
removeLink() {
|
|
591
596
|
console.log("remove link");
|
|
592
597
|
}
|
|
593
|
-
findRow(rowKey) {
|
|
594
|
-
const row = __privateGet(this, _data)[rowKey];
|
|
595
|
-
if (row) {
|
|
596
|
-
return row;
|
|
597
|
-
} else {
|
|
598
|
-
throw `no row found for key ${rowKey}`;
|
|
599
|
-
}
|
|
600
|
-
}
|
|
601
598
|
applyEdit(rowKey, columnName, value) {
|
|
602
599
|
console.log(`ArrayDataSource applyEdit ${rowKey} ${columnName} ${value}`);
|
|
603
600
|
return Promise.resolve(true);
|
|
@@ -632,6 +629,18 @@ class ArrayDataSource extends EventEmitter {
|
|
|
632
629
|
}
|
|
633
630
|
});
|
|
634
631
|
}
|
|
632
|
+
convertKeysToIndexValues(keys) {
|
|
633
|
+
if (Array.isArray(keys)) {
|
|
634
|
+
const indexValues = [];
|
|
635
|
+
keys.forEach((key) => {
|
|
636
|
+
const rowIdx = this.indexOfRowWithKey(key);
|
|
637
|
+
if (rowIdx !== -1) {
|
|
638
|
+
indexValues.push(rowIdx);
|
|
639
|
+
}
|
|
640
|
+
});
|
|
641
|
+
return indexValues;
|
|
642
|
+
}
|
|
643
|
+
}
|
|
635
644
|
}
|
|
636
645
|
_columnMap = new WeakMap();
|
|
637
646
|
_data = 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 WithBaseFilter,\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 VuuRpcRequest,\n VuuRpcResponse,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport type { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n ColumnMap,\n DataSourceConfigChanges,\n EventEmitter,\n KeySet,\n NULL_RANGE,\n buildColumnMap,\n combineFilters,\n getAddedItems,\n getMissingItems,\n hasBaseFilter,\n hasFilter,\n hasGroupBy,\n hasSort,\n isConfigChanged,\n isEditCellRequest,\n isGroupByChanged,\n logger,\n metadataKeys,\n rangeNewItems,\n rangesAreSame,\n resetRange,\n selectionCount,\n uuid,\n vanillaConfig,\n withConfigDefaults,\n} from \"@vuu-ui/vuu-utils\";\nimport { aggregateData } from \"./aggregate-utils\";\nimport { buildDataToClientMap, toClientRow } from \"./array-data-utils\";\nimport { GroupMap, collapseGroup, expandGroup, 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: WithBaseFilter<WithFullConfig> & {\n 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 #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 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.#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 && !rangesAreSame(this.#range, range)) {\n this.range = range;\n } else if (this.#range !== NULL_RANGE) {\n this.sendRowsToClient();\n }\n\n if (this.range.to !== 0) {\n const pageCount = Math.ceil(\n this.size / (this.range.to - this.range.from),\n );\n this.emit(\"page-count\", pageCount);\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 this.emit(\"suspended\", this.viewport);\n }\n }\n\n resume(callback?: SubscribeCallback) {\n const isSuspended = this.#status === \"suspended\";\n info?.(`resume #${this.viewport}, current status ${this.#status}`);\n if (callback) {\n this.clientCallback = callback;\n }\n\n if (isSuspended) {\n this.#status = \"subscribed\";\n }\n this.emit(\"resumed\", this.viewport);\n\n this.sendRowsToClient(true);\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(this.#range, true);\n this.emit(\"row-selection\", selected, this.#selectedRowsCount);\n }\n\n private getRowKey(keyOrIndex: string | number) {\n if (typeof keyOrIndex === \"string\") {\n return keyOrIndex;\n }\n const row = this.getRowAtIndex(keyOrIndex);\n if (row === undefined) {\n throw Error(`row not found at index ${keyOrIndex}`);\n }\n return row?.[KEY];\n }\n\n openTreeNode(keyOrIndex: string | number) {\n const key = this.getRowKey(keyOrIndex);\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(keyOrIndex: string | number) {\n const key = this.getRowKey(keyOrIndex);\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 pageSize() {\n return this.#range.to - this.#range.from;\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: WithBaseFilter<WithFullConfig>) {\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 if (hasFilter(config) || hasBaseFilter(config)) {\n const {\n filterSpec: { filterStruct },\n } = combineFilters(this._config);\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 console.log({ groupedData });\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(\n config: WithBaseFilter<DataSourceConfig>,\n preserveExistingConfigAttributes = false,\n ): 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 if (preserveExistingConfigAttributes) {\n this._config = {\n ...this._config,\n ...config,\n };\n } else {\n this._config = withConfigDefaults(newConfig);\n }\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.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 getRowAtIndex(rowIndex: number) {\n return this.processedData?.[rowIndex];\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 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 range: this.#range,\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 baseFilter() {\n return this._config.baseFilterSpec;\n }\n\n set baseFilter(baseFilter: DataSourceFilter | undefined) {\n debug?.(`baseFilter ${JSON.stringify(baseFilter)}`);\n // TODO check that baseFilter has changed\n this.config = {\n ...this._config,\n baseFilterSpec: baseFilter,\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":["row"],"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 WithBaseFilter,\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 VuuRpcRequest,\n VuuRpcResponse,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport type { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport {\n ColumnMap,\n DataSourceConfigChanges,\n EventEmitter,\n KeySet,\n NULL_RANGE,\n buildColumnMap,\n combineFilters,\n getAddedItems,\n getMissingItems,\n hasBaseFilter,\n hasFilter,\n hasGroupBy,\n hasSort,\n isConfigChanged,\n isEditCellRequest,\n isGroupByChanged,\n logger,\n metadataKeys,\n rangeNewItems,\n rangesAreSame,\n resetRange,\n selectionCount,\n uuid,\n vanillaConfig,\n withConfigDefaults,\n} from \"@vuu-ui/vuu-utils\";\nimport { aggregateData } from \"./aggregate-utils\";\nimport { buildDataToClientMap, toClientRow } from \"./array-data-utils\";\nimport { GroupMap, collapseGroup, expandGroup, 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: WithBaseFilter<WithFullConfig> & {\n 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 #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 baseFilterSpec,\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 visualLink,\n }: ArrayDataSourceConstructorProps) {\n super();\n if (!data || !columnDescriptors) {\n throw Error(\n \"ArrayDataSource constructor called without data or without columnDescriptors\",\n );\n }\n\n console.log({ visualLink });\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.#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 baseFilterSpec,\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 baseFilterSpec,\n range,\n selectedIndexValues,\n selectedKeyValues,\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.selectedRows =\n selectedIndexValues ??\n this.convertKeysToIndexValues(selectedKeyValues) ??\n [];\n this.#selectedRowsCount = selectionCount(this.selectedRows);\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 baseFilterSpec: baseFilterSpec || this._config.baseFilterSpec,\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 && !rangesAreSame(this.#range, range)) {\n this.range = range;\n } else if (this.#range !== NULL_RANGE) {\n this.sendRowsToClient();\n }\n\n if (this.range.to !== 0) {\n const pageCount = Math.ceil(\n this.size / (this.range.to - this.range.from),\n );\n this.emit(\"page-count\", pageCount);\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 this.emit(\"suspended\", this.viewport);\n }\n }\n\n resume(callback?: SubscribeCallback) {\n const isSuspended = this.#status === \"suspended\";\n info?.(`resume #${this.viewport}, current status ${this.#status}`);\n if (callback) {\n this.clientCallback = callback;\n }\n\n if (isSuspended) {\n this.#status = \"subscribed\";\n }\n this.emit(\"resumed\", this.viewport);\n\n this.sendRowsToClient(true);\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(this.#range, true);\n this.emit(\"row-selection\", selected, this.#selectedRowsCount);\n }\n\n private getRowKey(keyOrIndex: string | number) {\n if (typeof keyOrIndex === \"string\") {\n return keyOrIndex;\n }\n const row = this.getRowAtIndex(keyOrIndex);\n if (row === undefined) {\n throw Error(`row not found at index ${keyOrIndex}`);\n }\n return row?.[KEY];\n }\n\n openTreeNode(keyOrIndex: string | number) {\n const key = this.getRowKey(keyOrIndex);\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(keyOrIndex: string | number) {\n const key = this.getRowKey(keyOrIndex);\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 pageSize() {\n return this.#range.to - this.#range.from;\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: WithBaseFilter<WithFullConfig>) {\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 if (hasFilter(config) || hasBaseFilter(config)) {\n const {\n filterSpec: { filterStruct },\n } = combineFilters(this._config);\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 }\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, this.range, undefined, configChanges);\n }\n }\n\n applyConfig(\n config: WithBaseFilter<DataSourceConfig>,\n preserveExistingConfigAttributes = false,\n ): 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 if (preserveExistingConfigAttributes) {\n this._config = {\n ...this._config,\n ...config,\n };\n } else {\n this._config = withConfigDefaults(newConfig);\n }\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.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 getRowAtIndex(rowIndex: number) {\n return this.processedData?.[rowIndex];\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 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.indexOfRowWithKey(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 private indexOfRowWithKey = (key: string) =>\n this.#data.findIndex((row) => row[KEY] === key);\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 range: this.#range,\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, this.range);\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 baseFilter() {\n return this._config.baseFilterSpec;\n }\n\n set baseFilter(baseFilter: DataSourceFilter | undefined) {\n debug?.(`baseFilter ${JSON.stringify(baseFilter)}`);\n // TODO check that baseFilter has changed\n this.config = {\n ...this._config,\n baseFilterSpec: baseFilter,\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 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 private convertKeysToIndexValues(keys?: string[]) {\n if (Array.isArray(keys)) {\n const indexValues: number[] = [];\n keys.forEach((key) => {\n const rowIdx = this.indexOfRowWithKey(key);\n if (rowIdx !== -1) {\n indexValues.push(rowIdx);\n }\n });\n return indexValues;\n }\n }\n}\n"],"names":["row"],"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,\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":[],"mappings":";;AAQA,MAAM,EAAE,UAAY,EAAA,QAAA,EAAa,GAAA,YAAA
|
|
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":[],"mappings":";;AAQA,MAAM,EAAE,UAAY,EAAA,QAAA,EAAa,GAAA,YAAA;AAE1B,MAAM,WAAc,GAAA,CACzB,GACA,EAAA,IAAA,EACA,WACA,WACG,KAAA;AACH,EAAM,MAAA,CAAC,QAAQ,CAAI,GAAA,GAAA;AACnB,EAAI,IAAA,SAAA;AACJ,EAAA,IAAI,WAAa,EAAA;AAGf,IAAM,MAAA,EAAE,OAAU,GAAA,YAAA;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;AAAA,GACvC,MAAA;AACL,IAAA,SAAA,GAAY,IAAI,KAAM,EAAA;AAAA;AAExB,EAAA,SAAA,CAAU,UAAU,CAAA,GAAI,IAAK,CAAA,MAAA,CAAO,QAAQ,CAAA;AAC5C,EAAA,SAAA,CAAU,QAAQ,CAAA,GAAI,kBAAmB,CAAA,SAAA,EAAW,QAAQ,CAAA;AAC5D,EAAO,OAAA,SAAA;AACT;AAEA,MAAM,aAAA,GAAgB,CAAC,SAAA,EAAsB,OAAwB,KAAA;AACnE,EAAA,IAAI,OAAS,EAAA;AACX,IAAM,MAAA,EAAE,KAAO,EAAA,SAAA,EAAc,GAAA,YAAA;AAC7B,IAAA,KAAA,MAAW,CAAC,UAAY,EAAA,KAAK,KAAK,MAAO,CAAA,OAAA,CAAQ,SAAS,CAAG,EAAA;AAC3D,MAAM,MAAA,OAAA,GAAU,QAAQ,UAAU,CAAA;AAClC,MAAA,IAAI,YAAY,KAAW,CAAA,EAAA;AACzB,QAAM,MAAA,KAAA;AAAA,UACJ,0BAA0B,UAAU,CAAA,8BAAA;AAAA,SACtC;AAAA,OACF,MAAA,IAAW,OAAY,KAAA,KAAA,GAAQ,SAAW,EAAA;AACxC,QAAO,OAAA,IAAA;AAAA;AACT;AACF;AAEF,EAAO,OAAA,KAAA;AACT,CAAA;AAEA,MAAM,cAAA,GAAiB,CAAC,SAAA,EAAsB,OAAuB,KAAA;AACnE,EAAM,MAAA,EAAE,KAAO,EAAA,SAAA,EAAc,GAAA,YAAA;AAC7B,EAAA,MAAM,SAAmB,EAAC;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;AAAA,GAC5C,CAAA;AACD,EAAO,OAAA,MAAA;AACT,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;AAAA;AAE1C,EAAO,OAAA,KAAA,CAAA;AACT;;;;"}
|
|
@@ -42,7 +42,6 @@ const expandGroup = (keys, sourceRows, groupBy, columnMap, groupMap, processedDa
|
|
|
42
42
|
);
|
|
43
43
|
};
|
|
44
44
|
const dataRowsFromGroups2 = (groupMap, groupIndices, openKeys, sourceRows = [], root = "$root", depth = 1, rows = [], processedData) => {
|
|
45
|
-
console.log(`dataRowsFromGroups2 1)`);
|
|
46
45
|
const keys = Object.keys(groupMap).sort();
|
|
47
46
|
for (const key of keys) {
|
|
48
47
|
const idx = rows.length;
|
|
@@ -83,7 +82,6 @@ const dataRowsFromGroups2 = (groupMap, groupIndices, openKeys, sourceRows = [],
|
|
|
83
82
|
}
|
|
84
83
|
}
|
|
85
84
|
}
|
|
86
|
-
console.log(`dataRowsFromGroups2 2)`);
|
|
87
85
|
for (const key in rows) {
|
|
88
86
|
for (const index in rows) {
|
|
89
87
|
if (rows[key][2] === false && processedData[index] != void 0) {
|
|
@@ -100,7 +98,6 @@ const dataRowsFromGroups2 = (groupMap, groupIndices, openKeys, sourceRows = [],
|
|
|
100
98
|
}
|
|
101
99
|
}
|
|
102
100
|
}
|
|
103
|
-
console.log(`dataRowsFromGroups2 3)`);
|
|
104
101
|
return rows;
|
|
105
102
|
};
|
|
106
103
|
const pushChildren = (rows, tree, sourceRows, parentKey, depth) => {
|
|
@@ -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 = [\n idx,\n idx,\n false,\n false,\n depth,\n childCount(groupMap[key]),\n groupKey,\n 0,\n ];\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 childCount(groupTree[key]),\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 childCount(list: GroupMap | KeyList) {\n if (Array.isArray(list)) {\n return list.length;\n } else {\n return Object.keys(list).length;\n }\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 return groups;\n}\n"],"names":[],"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 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 = [\n idx,\n idx,\n false,\n false,\n depth,\n childCount(groupMap[key]),\n groupKey,\n 0,\n ];\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\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\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 childCount(groupTree[key]),\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 childCount(list: GroupMap | KeyList) {\n if (Array.isArray(list)) {\n return list.length;\n } else {\n return Object.keys(list).length;\n }\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 return groups;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sort-utils.js","sources":["../../src/array-data-source/sort-utils.ts"],"sourcesContent":["import type { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport type { VuuSort, VuuSortType } from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap } from \"@vuu-ui/vuu-utils\";\n\ntype SortDef = [number, VuuSortType];\ntype SortPredicate = (\n r1: DataSourceRow,\n r2: DataSourceRow,\n sortDefDef: SortDef,\n) => SortCompareResult;\ntype SortCompareResult = 0 | 1 | -1;\ntype RowSortComparatorFactory = (\n sortDefs: SortDef[],\n test?: SortPredicate,\n) => RowSortComparator;\ntype RowSortComparator = (\n item1: DataSourceRow,\n item2: DataSourceRow,\n) => SortCompareResult;\n\nconst defaultSortPredicate: SortPredicate = (r1, r2, [i, direction]) => {\n const val1 = direction === \"D\" ? r2[i] : r1[i];\n const val2 = direction === \"D\" ? r1[i] : r2[i];\n if (val1 === val2) {\n return 0;\n } else if (val2 === null || val1 > val2) {\n return 1;\n } else {\n return -1;\n }\n};\n\nconst sortComparator = (sortDefs: SortDef[]): RowSortComparator => {\n if (sortDefs.length === 1) {\n return singleColComparator(sortDefs);\n } else if (sortDefs.length === 2) {\n return twoColComparator(sortDefs);\n } else {\n return multiColComparator(sortDefs);\n }\n};\n\nconst singleColComparator: RowSortComparatorFactory =\n ([[i, direction]]) =>\n (r1, r2) => {\n const v1 = direction === \"D\" ? r2[i] : r1[i];\n const v2 = direction === \"D\" ? r1[i] : r2[i];\n return v1 > v2 ? 1 : v2 > v1 ? -1 : 0;\n };\n\nconst twoColComparator: RowSortComparatorFactory =\n ([[idx1, direction1], [idx2, direction2]]) =>\n (r1, r2) => {\n const v1 = direction1 === \"D\" ? r2[idx1] : r1[idx1];\n const v2 = direction1 === \"D\" ? r1[idx1] : r2[idx1];\n const v3 = direction2 === \"D\" ? r2[idx2] : r1[idx2];\n const v4 = direction2 === \"D\" ? r1[idx2] : r2[idx2];\n return v1 > v2 ? 1 : v2 > v1 ? -1 : v3 > v4 ? 1 : v4 > v3 ? -1 : 0;\n };\n\nconst multiColComparator: RowSortComparatorFactory =\n (sortDefs, test = defaultSortPredicate) =>\n (r1, r2) => {\n for (const sortDef of sortDefs) {\n const result = test(r1, r2, sortDef);\n if (result !== 0) {\n return result;\n }\n }\n return 0;\n };\n\nexport const sortRows = (\n rows: readonly DataSourceRow[],\n { sortDefs }: VuuSort,\n columnMap: ColumnMap,\n) => {\n const indexedSortDefs = sortDefs.map<SortDef>(({ column, sortType }) => [\n columnMap[column],\n sortType,\n ]);\n const comparator = sortComparator(indexedSortDefs);\n return rows.slice().sort(comparator);\n};\n"],"names":[],"mappings":"AAoBA,MAAM,uBAAsC,CAAC,EAAA,EAAI,IAAI,CAAC,CAAA,EAAG,SAAS,CAAM,KAAA;AACtE,EAAA,MAAM,OAAO,SAAc,KAAA,GAAA,GAAM,GAAG,CAAC,CAAA,GAAI,GAAG,CAAC,CAAA
|
|
1
|
+
{"version":3,"file":"sort-utils.js","sources":["../../src/array-data-source/sort-utils.ts"],"sourcesContent":["import type { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport type { VuuSort, VuuSortType } from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap } from \"@vuu-ui/vuu-utils\";\n\ntype SortDef = [number, VuuSortType];\ntype SortPredicate = (\n r1: DataSourceRow,\n r2: DataSourceRow,\n sortDefDef: SortDef,\n) => SortCompareResult;\ntype SortCompareResult = 0 | 1 | -1;\ntype RowSortComparatorFactory = (\n sortDefs: SortDef[],\n test?: SortPredicate,\n) => RowSortComparator;\ntype RowSortComparator = (\n item1: DataSourceRow,\n item2: DataSourceRow,\n) => SortCompareResult;\n\nconst defaultSortPredicate: SortPredicate = (r1, r2, [i, direction]) => {\n const val1 = direction === \"D\" ? r2[i] : r1[i];\n const val2 = direction === \"D\" ? r1[i] : r2[i];\n if (val1 === val2) {\n return 0;\n } else if (val2 === null || val1 > val2) {\n return 1;\n } else {\n return -1;\n }\n};\n\nconst sortComparator = (sortDefs: SortDef[]): RowSortComparator => {\n if (sortDefs.length === 1) {\n return singleColComparator(sortDefs);\n } else if (sortDefs.length === 2) {\n return twoColComparator(sortDefs);\n } else {\n return multiColComparator(sortDefs);\n }\n};\n\nconst singleColComparator: RowSortComparatorFactory =\n ([[i, direction]]) =>\n (r1, r2) => {\n const v1 = direction === \"D\" ? r2[i] : r1[i];\n const v2 = direction === \"D\" ? r1[i] : r2[i];\n return v1 > v2 ? 1 : v2 > v1 ? -1 : 0;\n };\n\nconst twoColComparator: RowSortComparatorFactory =\n ([[idx1, direction1], [idx2, direction2]]) =>\n (r1, r2) => {\n const v1 = direction1 === \"D\" ? r2[idx1] : r1[idx1];\n const v2 = direction1 === \"D\" ? r1[idx1] : r2[idx1];\n const v3 = direction2 === \"D\" ? r2[idx2] : r1[idx2];\n const v4 = direction2 === \"D\" ? r1[idx2] : r2[idx2];\n return v1 > v2 ? 1 : v2 > v1 ? -1 : v3 > v4 ? 1 : v4 > v3 ? -1 : 0;\n };\n\nconst multiColComparator: RowSortComparatorFactory =\n (sortDefs, test = defaultSortPredicate) =>\n (r1, r2) => {\n for (const sortDef of sortDefs) {\n const result = test(r1, r2, sortDef);\n if (result !== 0) {\n return result;\n }\n }\n return 0;\n };\n\nexport const sortRows = (\n rows: readonly DataSourceRow[],\n { sortDefs }: VuuSort,\n columnMap: ColumnMap,\n) => {\n const indexedSortDefs = sortDefs.map<SortDef>(({ column, sortType }) => [\n columnMap[column],\n sortType,\n ]);\n const comparator = sortComparator(indexedSortDefs);\n return rows.slice().sort(comparator);\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -9,10 +9,10 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
9
9
|
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
10
10
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
11
11
|
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);
|
|
12
|
-
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"),
|
|
12
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
13
13
|
var __privateWrapper = (obj, member, setter, getter) => ({
|
|
14
14
|
set _(value) {
|
|
15
|
-
__privateSet(obj, member, value
|
|
15
|
+
__privateSet(obj, member, value);
|
|
16
16
|
},
|
|
17
17
|
get _() {
|
|
18
18
|
return __privateGet(obj, member, getter);
|