@vuu-ui/vuu-data-local 4.0.0-alpha.2 → 4.0.0-alpha.21

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.2",
2
+ "version": "4.0.0-alpha.21",
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.2",
15
- "@vuu-ui/vuu-table-types": "4.0.0-alpha.2",
16
- "@vuu-ui/vuu-filter-types": "4.0.0-alpha.2",
17
- "@vuu-ui/vuu-protocol-types": "4.0.0-alpha.2"
14
+ "@vuu-ui/vuu-data-types": "4.0.0-alpha.21",
15
+ "@vuu-ui/vuu-table-types": "4.0.0-alpha.21",
16
+ "@vuu-ui/vuu-filter-types": "4.0.0-alpha.21",
17
+ "@vuu-ui/vuu-protocol-types": "4.0.0-alpha.21"
18
18
  },
19
19
  "dependencies": {
20
- "@vuu-ui/vuu-filter-parser": "4.0.0-alpha.2",
21
- "@vuu-ui/vuu-utils": "4.0.0-alpha.2"
20
+ "@vuu-ui/vuu-filter-parser": "4.0.0-alpha.21",
21
+ "@vuu-ui/vuu-utils": "4.0.0-alpha.21"
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,6 +69,7 @@ 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
74
  this.key = keyColumn ? this.columnDescriptors.findIndex((col)=>col.name === keyColumn) : 0;
73
75
  this.rangeChangeRowset = rangeChangeRowset;
@@ -316,7 +318,8 @@ class ArrayDataSource extends EventEmitter {
316
318
  });
317
319
  }
318
320
  getFilterPredicate() {
319
- const { filterSpec: { filterStruct } } = combineFilters(this._config);
321
+ const { filterSpec: { filter, filterStruct: rawFilterStruct } } = combineFilters(this._config);
322
+ const filterStruct = rawFilterStruct && filter && filterRequiresResolution(rawFilterStruct, getColumnsByNameForFilter(this.tableSchema, this.#filterColumnsByName)) ? parseFilter(filter) : rawFilterStruct;
320
323
  if (filterStruct) {
321
324
  if (this.dataMap) {
322
325
  const { count: offset } = metadataKeys;
@@ -448,12 +451,12 @@ class ArrayDataSource extends EventEmitter {
448
451
  }
449
452
  indexOfRowWithKey = (key)=>this.#data.findIndex((row)=>row[KEY] === key);
450
453
  update = (row, columnName)=>{
451
- const keyValue = row[this.key];
454
+ const keyValue = String(row[this.key]);
452
455
  const dataColIndex = this.dataMap?.[columnName];
453
456
  return this.updateDataItem(keyValue, columnName, row[dataColIndex]);
454
457
  };
455
458
  updateRow = (row, _columnName)=>{
456
- const keyValue = row[this.key];
459
+ const keyValue = String(row[this.key]);
457
460
  const dataIndex = this.#data.findIndex((row)=>row[KEY] === keyValue);
458
461
  if (-1 !== dataIndex) {
459
462
  const dataSourceRow = toDataSourceRow(this.key)(row, dataIndex);
@@ -617,9 +620,15 @@ class ArrayDataSource extends EventEmitter {
617
620
  filterSpec: filter
618
621
  };
619
622
  }
620
- setFilter(filter) {
623
+ setFilter(filter, options) {
624
+ this.#filterColumnsByName = {
625
+ ...getColumnsByName(this.columnDescriptors),
626
+ ...options?.columnsByName
627
+ };
621
628
  const dataSourceFilter = {
622
- filter: filterAsQuery(filter),
629
+ filter: filterAsQuery(filter, {
630
+ columnsByName: getColumnsByNameForFilter(this.tableSchema, this.#filterColumnsByName)
631
+ }),
623
632
  filterStruct: filter
624
633
  };
625
634
  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);