@vuu-ui/vuu-data-local 4.0.0-alpha.3 → 4.0.0-alpha.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.0.0-alpha.3",
2
+ "version": "4.0.0-alpha.31",
3
3
  "main": "./src/index.js",
4
4
  "author": "heswell",
5
5
  "type": "module",
@@ -11,14 +11,14 @@
11
11
  "type-defs": "node ../../scripts/build-type-defs.mjs"
12
12
  },
13
13
  "devDependencies": {
14
- "@vuu-ui/vuu-data-types": "4.0.0-alpha.3",
15
- "@vuu-ui/vuu-table-types": "4.0.0-alpha.3",
16
- "@vuu-ui/vuu-filter-types": "4.0.0-alpha.3",
17
- "@vuu-ui/vuu-protocol-types": "4.0.0-alpha.3"
14
+ "@vuu-ui/vuu-data-types": "4.0.0-alpha.31",
15
+ "@vuu-ui/vuu-table-types": "4.0.0-alpha.31",
16
+ "@vuu-ui/vuu-filter-types": "4.0.0-alpha.31",
17
+ "@vuu-ui/vuu-protocol-types": "4.0.0-alpha.31"
18
18
  },
19
19
  "dependencies": {
20
- "@vuu-ui/vuu-filter-parser": "4.0.0-alpha.3",
21
- "@vuu-ui/vuu-utils": "4.0.0-alpha.3"
20
+ "@vuu-ui/vuu-filter-parser": "4.0.0-alpha.31",
21
+ "@vuu-ui/vuu-utils": "4.0.0-alpha.31"
22
22
  },
23
23
  "sideEffects": false,
24
24
  "files": [
@@ -28,8 +28,9 @@
28
28
  ],
29
29
  "exports": {
30
30
  ".": {
31
+ "types": "./types/index.d.ts",
31
32
  "import": "./src/index.js",
32
- "types": "./types/index.d.ts"
33
+ "default": "./src/index.js"
33
34
  }
34
35
  },
35
36
  "module": "./src/index.js",
@@ -1,5 +1,5 @@
1
1
  import { filterPredicate, parseFilter } from "@vuu-ui/vuu-filter-parser";
2
- import { EventEmitter, KeySet, NULL_RANGE, Range, buildColumnMap, combineFilters, filterAsQuery, getAddedItems, hasBaseFilter, hasFilter, hasGroupBy, hasSort, isConfigChanged, isGroupByChanged, logger, metadataKeys, rangeNewItems, toSchemaColumn, uuid, vanillaConfig, withConfigDefaults } from "@vuu-ui/vuu-utils";
2
+ import { EventEmitter, KeySet, NULL_RANGE, Range, buildColumnMap, combineFilters, filterAsQuery, filterRequiresResolution, getAddedItems, getColumnsByName, getColumnsByNameForFilter, hasBaseFilter, hasFilter, hasGroupBy, hasSort, isConfigChanged, isGroupByChanged, logger, metadataKeys, rangeNewItems, toSchemaColumn, uuid, vanillaConfig, withConfigDefaults } 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 { collapseGroup, expandGroup, groupRows } from "./group-utils.js";
@@ -49,6 +49,7 @@ class ArrayDataSource extends EventEmitter {
49
49
  openTreeNodes = [];
50
50
  preserveScrollPositionAcrossConfigChange = false;
51
51
  #columnMap;
52
+ #filterColumnsByName;
52
53
  _config = vanillaConfig;
53
54
  #data;
54
55
  #freezeTimestamp = void 0;
@@ -68,8 +69,9 @@ class ArrayDataSource extends EventEmitter {
68
69
  super();
69
70
  if (!data || !columnDescriptors) throw Error("ArrayDataSource constructor called without data or without columnDescriptors");
70
71
  this.columnDescriptors = columnDescriptors;
72
+ this.#filterColumnsByName = getColumnsByName(columnDescriptors);
71
73
  this.dataMap = dataMap;
72
- this.key = keyColumn ? this.columnDescriptors.findIndex((col)=>col.name === keyColumn) : 0;
74
+ this.key = keyColumn ? dataMap?.[keyColumn] ?? this.columnDescriptors.findIndex((col)=>col.name === keyColumn) : 0;
73
75
  this.rangeChangeRowset = rangeChangeRowset;
74
76
  this.tableSchema = buildTableSchema(columnDescriptors, keyColumn);
75
77
  this.viewport = viewport || uuid();
@@ -118,8 +120,15 @@ class ArrayDataSource extends EventEmitter {
118
120
  };
119
121
  this.clientCallback?.(subscribedMessage);
120
122
  this.emit("subscribed", subscribedMessage);
121
- if (hasConfigProps) this.config = config;
122
- else {
123
+ if (hasConfigProps) {
124
+ if (range) {
125
+ this.constrainRangeToMaxRangeEnd(range);
126
+ this.#range = range;
127
+ this.#keys.reset(this.rangeWithBufferWithinMaxRangeEnd);
128
+ }
129
+ this.config = config;
130
+ this.sendRowsToClient(true);
131
+ } else {
123
132
  this.sendSizeUpdateToClient();
124
133
  this.emit("resize", this.processedData ? this.processedData.length : this.#data.length, this.#maxRangeEnd);
125
134
  if (range && !this.#range.equals(range)) this.range = range;
@@ -316,7 +325,8 @@ class ArrayDataSource extends EventEmitter {
316
325
  });
317
326
  }
318
327
  getFilterPredicate() {
319
- const { filterSpec: { filterStruct } } = combineFilters(this._config);
328
+ const { filterSpec: { filter, filterStruct: rawFilterStruct } } = combineFilters(this._config);
329
+ const filterStruct = rawFilterStruct && filter && filterRequiresResolution(rawFilterStruct, getColumnsByNameForFilter(this.tableSchema, this.#filterColumnsByName)) ? parseFilter(filter) : rawFilterStruct;
320
330
  if (filterStruct) {
321
331
  if (this.dataMap) {
322
332
  const { count: offset } = metadataKeys;
@@ -458,7 +468,7 @@ class ArrayDataSource extends EventEmitter {
458
468
  if (-1 !== dataIndex) {
459
469
  const dataSourceRow = toDataSourceRow(this.key)(row, dataIndex);
460
470
  this.#data[dataIndex] = dataSourceRow;
461
- const { from, to } = this.#range;
471
+ const { from, to } = this.rangeWithBufferWithinMaxRangeEnd;
462
472
  const isFiltered = hasFilter(this.config) || hasBaseFilter(this.config);
463
473
  const isSorted = hasSort(this.config);
464
474
  if (isFiltered) {
@@ -617,9 +627,15 @@ class ArrayDataSource extends EventEmitter {
617
627
  filterSpec: filter
618
628
  };
619
629
  }
620
- setFilter(filter) {
630
+ setFilter(filter, options) {
631
+ this.#filterColumnsByName = {
632
+ ...getColumnsByName(this.columnDescriptors),
633
+ ...options?.columnsByName
634
+ };
621
635
  const dataSourceFilter = {
622
- filter: filterAsQuery(filter),
636
+ filter: filterAsQuery(filter, {
637
+ columnsByName: getColumnsByNameForFilter(this.tableSchema, this.#filterColumnsByName)
638
+ }),
623
639
  filterStruct: filter
624
640
  };
625
641
  this.filter = dataSourceFilter;
@@ -1,39 +1,17 @@
1
1
  import { BaseDataSource, KeySet, NULL_RANGE, getParentRow, isSingleValueFilter, lastPathSegment, metadataKeys, missingAncestor, treeToDataSourceRows, uuid } from "@vuu-ui/vuu-utils";
2
2
  import { IconProvider } from "./IconProvider.js";
3
3
  import { parseFilter } from "@vuu-ui/vuu-filter-parser";
4
- const TREE_SCHEMA = {
5
- columns: [
6
- {
7
- name: "nodeData",
8
- serverDataType: "string"
9
- },
10
- {
11
- name: "Level 1",
12
- serverDataType: "string"
13
- },
14
- {
15
- name: "Level 2",
16
- serverDataType: "string"
17
- },
18
- {
19
- name: "Level 3",
20
- serverDataType: "string"
21
- },
22
- {
23
- name: "Level 4",
24
- serverDataType: "string"
25
- },
26
- {
27
- name: "Level 5",
28
- serverDataType: "string"
4
+ const treeSchema = (columns)=>({
5
+ columns: columns.map(({ name })=>({
6
+ name,
7
+ serverDataType: "string"
8
+ })),
9
+ key: "",
10
+ table: {
11
+ module: "",
12
+ table: ""
29
13
  }
30
- ],
31
- key: "",
32
- table: {
33
- module: "",
34
- table: ""
35
- }
36
- };
14
+ });
37
15
  const { COUNT: COUNT, DEPTH: DEPTH, IDX: IDX, IS_EXPANDED: IS_EXPANDED, IS_LEAF: IS_LEAF, KEY: KEY, SELECTED: SELECTED } = metadataKeys;
38
16
  const toClientRow = (row, keys)=>{
39
17
  const [rowIndex] = row;
@@ -61,6 +39,8 @@ class TreeDataSource extends BaseDataSource {
61
39
  if (!data) throw Error("TreeDataSource constructor called without data");
62
40
  this.#iconProvider = new IconProvider();
63
41
  [this.columnDescriptors, this.#data] = treeToDataSourceRows(data, this.#iconProvider);
42
+ this.expandedRows = getInitiallyExpandedKeys(data);
43
+ console.table(this.#data);
64
44
  if (this.columnDescriptors) {
65
45
  const columns = this.columnDescriptors.map((c)=>c.name);
66
46
  this._configWithVisualLink = {
@@ -92,7 +72,7 @@ class TreeDataSource extends BaseDataSource {
92
72
  groupBy: this._configWithVisualLink.groupBy,
93
73
  range: this.range,
94
74
  sort: this.sort,
95
- tableSchema: TREE_SCHEMA
75
+ tableSchema: treeSchema(this.columnDescriptors)
96
76
  });
97
77
  this.clientCallback({
98
78
  clientViewportId: this.viewport,
@@ -163,6 +143,7 @@ class TreeDataSource extends BaseDataSource {
163
143
  applySelectedKeyValues(keys, revealSelected = false) {
164
144
  keys.forEach((key)=>{
165
145
  const rowIdx = this.indexOfRowWithKey(key);
146
+ if (-1 === rowIdx) return;
166
147
  const row = this.#data[rowIdx];
167
148
  row[SELECTED] = 1;
168
149
  if (revealSelected && 1 !== row[DEPTH]) {
@@ -305,6 +286,14 @@ class TreeDataSource extends BaseDataSource {
305
286
  return this.visibleRows[rowIdx];
306
287
  }
307
288
  }
289
+ const getInitiallyExpandedKeys = (treeSourceNodes, keyBase = "$root", expandedKeys = new Set())=>{
290
+ for (const { childNodes, expanded, label } of treeSourceNodes){
291
+ const key = `${keyBase}|${label}`;
292
+ if (expanded) expandedKeys.add(key);
293
+ if (childNodes) getInitiallyExpandedKeys(childNodes, key, expandedKeys);
294
+ }
295
+ return expandedKeys;
296
+ };
308
297
  function getVisibleRows(rows, expandedKeys, filterset) {
309
298
  const visibleRows = [];
310
299
  const visibleRowIndex = {};
@@ -1,4 +1,4 @@
1
- import type { DataSourceBase, DataSourceConstructorProps, DataSourceEvents, DataSourceFilter, DataSourceRow, DataSourceRowWithBigint, DataSourceStatus, DataSourceSubscribeCallback, DataSourceSubscribeProps, TableSchema, WithBaseFilter, WithFullConfig } from "@vuu-ui/vuu-data-types";
1
+ import type { DataSourceBase, DataSourceConstructorProps, DataSourceEvents, DataSourceFilter, DataSourceRow, DataSourceRowWithBigint, DataSourceStatus, DataSourceSubscribeCallback, DataSourceSubscribeProps, SetFilterOptions, TableSchema, WithBaseFilter, WithFullConfig } from "@vuu-ui/vuu-data-types";
2
2
  import type { Filter } from "@vuu-ui/vuu-filter-types";
3
3
  import type { LinkDescriptorWithLabel, SelectRequest, VuuAggregation, VuuGroupBy, VuuMenu, VuuRowDataItemType, VuuRpcRequest, VuuRpcResponse, VuuSort } from "@vuu-ui/vuu-protocol-types";
4
4
  import type { ColumnDescriptor } from "@vuu-ui/vuu-table-types";
@@ -93,7 +93,7 @@ export declare class ArrayDataSource extends EventEmitter<DataSourceEvents> impl
93
93
  set baseFilter(baseFilter: DataSourceFilter | undefined);
94
94
  get filter(): DataSourceFilter;
95
95
  set filter(filter: DataSourceFilter);
96
- setFilter(filter: Filter): void;
96
+ setFilter(filter: Filter, options?: SetFilterOptions): void;
97
97
  clearFilter(): void;
98
98
  get groupBy(): VuuGroupBy;
99
99
  set groupBy(groupBy: VuuGroupBy);