@vuu-ui/vuu-table 0.6.16-debug → 0.6.17-debug

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/esm/index.js CHANGED
@@ -18646,6 +18646,56 @@ var FilterExpression = class {
18646
18646
  }
18647
18647
  };
18648
18648
  _filter = new WeakMap();
18649
+ var walkTree = (tree, source) => {
18650
+ const filterExpression = new FilterExpression();
18651
+ const cursor = tree.cursor();
18652
+ do {
18653
+ const { name: name2, from, to } = cursor;
18654
+ switch (name2) {
18655
+ case "ColumnValueExpression":
18656
+ filterExpression.add({});
18657
+ break;
18658
+ case "ColumnSetExpression":
18659
+ filterExpression.add({ op: "in" });
18660
+ break;
18661
+ case "Or":
18662
+ case "And":
18663
+ filterExpression.setFilterCombinatorOp(source.substring(from, to));
18664
+ break;
18665
+ case "Column":
18666
+ filterExpression.setColumn(source.substring(from, to));
18667
+ break;
18668
+ case "Operator":
18669
+ filterExpression.setOp(source.substring(from, to));
18670
+ break;
18671
+ case "String":
18672
+ filterExpression.setValue(source.substring(from + 1, to - 1));
18673
+ break;
18674
+ case "Number":
18675
+ filterExpression.setValue(parseFloat(source.substring(from, to)));
18676
+ break;
18677
+ case "True":
18678
+ filterExpression.setValue(true);
18679
+ break;
18680
+ case "False":
18681
+ filterExpression.setValue(false);
18682
+ break;
18683
+ case "FilterName":
18684
+ filterExpression.name = source.substring(from, to);
18685
+ break;
18686
+ default:
18687
+ }
18688
+ } while (cursor.next());
18689
+ return filterExpression.toJSON();
18690
+ };
18691
+
18692
+ // ../vuu-filters/src/filter-input/filter-language-parser/FilterParser.ts
18693
+ var strictParser = parser.configure({ strict: true });
18694
+ var parseFilter = (filterQuery) => {
18695
+ const parseTree = strictParser.parse(filterQuery);
18696
+ const filter = walkTree(parseTree, filterQuery);
18697
+ return filter;
18698
+ };
18649
18699
 
18650
18700
  // ../vuu-filters/src/filter-input/highlighting.ts
18651
18701
  var myHighlightStyle = HighlightStyle.define([
@@ -18738,7 +18788,77 @@ import { EventEmitter, getLoggingConfig, uuid } from "@vuu-ui/vuu-utils";
18738
18788
 
18739
18789
  // ../vuu-data/src/data-source.ts
18740
18790
  var isSizeOnly = (message) => message.type === "viewport-update" && message.mode === "size-only";
18791
+ var exactlyTheSame = (a, b) => {
18792
+ if (a === b) {
18793
+ return true;
18794
+ } else if (a === void 0 && b === void 0) {
18795
+ return true;
18796
+ } else {
18797
+ return false;
18798
+ }
18799
+ };
18800
+ var filterChanged = (c1, c2) => {
18801
+ var _a2, _b;
18802
+ return ((_a2 = c1.filter) == null ? void 0 : _a2.filter) !== ((_b = c2.filter) == null ? void 0 : _b.filter);
18803
+ };
18804
+ var sortChanged = ({ sort: s1 }, { sort: s2 }) => {
18805
+ if (exactlyTheSame(s1, s2)) {
18806
+ return false;
18807
+ } else if (s1 === void 0 || s2 === void 0) {
18808
+ return true;
18809
+ } else if ((s1 == null ? void 0 : s1.sortDefs.length) !== (s2 == null ? void 0 : s2.sortDefs.length)) {
18810
+ return true;
18811
+ }
18812
+ return s1.sortDefs.some(
18813
+ ({ column, sortType }, i) => column !== s2.sortDefs[i].column || sortType !== s2.sortDefs[i].sortType
18814
+ );
18815
+ };
18816
+ var groupByChanged = ({ groupBy: g1 }, { groupBy: g2 }) => {
18817
+ if (exactlyTheSame(g1, g2)) {
18818
+ return false;
18819
+ } else if (g1 === void 0 || g2 === void 0) {
18820
+ return true;
18821
+ } else if ((g1 == null ? void 0 : g1.length) !== (g2 == null ? void 0 : g2.length)) {
18822
+ return true;
18823
+ }
18824
+ return g1.some((column, i) => column !== (g2 == null ? void 0 : g2[i]));
18825
+ };
18826
+ var columnsChanged = ({ columns: cols1 }, { columns: cols2 }) => {
18827
+ if (exactlyTheSame(cols1, cols2)) {
18828
+ return false;
18829
+ } else if (cols1 === void 0 || cols2 === void 0) {
18830
+ return true;
18831
+ } else if ((cols1 == null ? void 0 : cols1.length) !== (cols2 == null ? void 0 : cols2.length)) {
18832
+ return true;
18833
+ }
18834
+ return cols1.some((column, i) => column !== (cols2 == null ? void 0 : cols2[i]));
18835
+ };
18836
+ var aggregationsChanged = ({ aggregations: agg1 }, { aggregations: agg2 }) => {
18837
+ if (exactlyTheSame(agg1, agg2)) {
18838
+ return false;
18839
+ } else if (agg1 === void 0 || agg2 === void 0) {
18840
+ return true;
18841
+ } else if (agg1.length !== agg2.length) {
18842
+ return true;
18843
+ }
18844
+ return agg1.some(
18845
+ ({ column, aggType }, i) => column !== agg2[i].column || aggType !== agg2[i].aggType
18846
+ );
18847
+ };
18848
+ var visualLinkChanged = () => {
18849
+ return false;
18850
+ };
18851
+ var configChanged2 = (config, newConfig) => {
18852
+ if (exactlyTheSame(config, newConfig)) {
18853
+ return false;
18854
+ }
18855
+ if (config === void 0 || newConfig === void 0) {
18856
+ return true;
18857
+ }
18858
+ return columnsChanged(config, newConfig) || filterChanged(config, newConfig) || sortChanged(config, newConfig) || groupByChanged(config, newConfig) || aggregationsChanged(config, newConfig) || visualLinkChanged(config, newConfig);
18859
+ };
18741
18860
  var datasourceMessages = [
18861
+ "config",
18742
18862
  "aggregate",
18743
18863
  "viewport-update",
18744
18864
  "columns",
@@ -18758,7 +18878,9 @@ var shouldMessageBeRoutedToDataSource = (message) => {
18758
18878
  const type = message.type;
18759
18879
  return datasourceMessages.includes(type);
18760
18880
  };
18761
- var isDataSourceConfigMessage = (message) => ["aggregate", "columns", "filter", "groupBy", "sort"].includes(message.type);
18881
+ var isDataSourceConfigMessage = (message) => ["config", "aggregate", "columns", "filter", "groupBy", "sort"].includes(
18882
+ message.type
18883
+ );
18762
18884
 
18763
18885
  // ../vuu-data/src/server-proxy/messages.ts
18764
18886
  var GET_TABLE_LIST = "GET_TABLE_LIST";
@@ -19529,6 +19651,9 @@ var ArrayBackedMovingWindow = class {
19529
19651
  };
19530
19652
  _range = new WeakMap();
19531
19653
 
19654
+ // src/data-source.ts
19655
+ var hasGroupBy = (config) => config !== void 0 && config.groupBy !== void 0 && config.groupBy.length > 0;
19656
+
19532
19657
  // src/server-proxy/viewport.ts
19533
19658
  var EMPTY_GROUPBY = [];
19534
19659
  var { debug: debug3, debugEnabled: debugEnabled3, error: error2, info: info2, infoEnabled, warn: warn2 } = logger("viewport");
@@ -19682,9 +19807,24 @@ var Viewport = class {
19682
19807
  warn2 == null ? void 0 : warn2("range requests sent faster than they are being ACKed");
19683
19808
  }
19684
19809
  }
19810
+ } else if (type === "config") {
19811
+ if (hasGroupBy(pendingOperation.data)) {
19812
+ this.isTree = true;
19813
+ this.groupBy = pendingOperation.data.groupBy;
19814
+ } else if (this.isTree) {
19815
+ this.isTree = false;
19816
+ this.groupBy = [];
19817
+ }
19818
+ debug3 == null ? void 0 : debug3(\`config change confirmed, isTree : \${this.isTree}\`);
19819
+ return {
19820
+ clientViewportId,
19821
+ type,
19822
+ config: pendingOperation.data
19823
+ };
19685
19824
  } else if (type === "groupBy") {
19686
19825
  this.isTree = pendingOperation.data.length > 0;
19687
19826
  this.groupBy = pendingOperation.data;
19827
+ debug3 == null ? void 0 : debug3(\`groupBy change confirmed, isTree : \${this.isTree}\`);
19688
19828
  return {
19689
19829
  clientViewportId,
19690
19830
  type,
@@ -19942,6 +20082,22 @@ var Viewport = class {
19942
20082
  info2 == null ? void 0 : info2(\`filterRequest: \${filter}\`);
19943
20083
  return this.createRequest({ filterSpec: { filter } });
19944
20084
  }
20085
+ setConfig(requestId, config) {
20086
+ this.awaitOperation(requestId, { type: "config", data: config });
20087
+ const { filter, ...remainingConfig } = config;
20088
+ debugEnabled3 ? debug3 == null ? void 0 : debug3(\`setConfig \${JSON.stringify(config)}\`) : info2 == null ? void 0 : info2(\`setConfig\`);
20089
+ return this.createRequest(
20090
+ {
20091
+ ...remainingConfig,
20092
+ filterSpec: typeof (filter == null ? void 0 : filter.filter) === "string" ? {
20093
+ filter: filter.filter
20094
+ } : {
20095
+ filter: ""
20096
+ }
20097
+ },
20098
+ true
20099
+ );
20100
+ }
19945
20101
  aggregateRequest(requestId, aggregations) {
19946
20102
  this.awaitOperation(requestId, { type: "aggregate", data: aggregations });
19947
20103
  info2 == null ? void 0 : info2(\`aggregateRequest: \${aggregations}\`);
@@ -20043,19 +20199,27 @@ var Viewport = class {
20043
20199
  }
20044
20200
  return [out, mode];
20045
20201
  }
20046
- createRequest(params) {
20047
- return {
20048
- type: "CHANGE_VP",
20049
- viewPortId: this.serverViewportId,
20050
- aggregations: this.aggregations,
20051
- columns: this.columns,
20052
- sort: this.sort,
20053
- groupBy: this.groupBy,
20054
- filterSpec: {
20055
- filter: this.filter.filter
20056
- },
20057
- ...params
20058
- };
20202
+ createRequest(params, overWrite = false) {
20203
+ if (overWrite) {
20204
+ return {
20205
+ type: "CHANGE_VP",
20206
+ viewPortId: this.serverViewportId,
20207
+ ...params
20208
+ };
20209
+ } else {
20210
+ return {
20211
+ type: "CHANGE_VP",
20212
+ viewPortId: this.serverViewportId,
20213
+ aggregations: this.aggregations,
20214
+ columns: this.columns,
20215
+ sort: this.sort,
20216
+ groupBy: this.groupBy,
20217
+ filterSpec: {
20218
+ filter: this.filter.filter
20219
+ },
20220
+ ...params
20221
+ };
20222
+ }
20059
20223
  }
20060
20224
  };
20061
20225
  var toClientRow = ({ rowIndex, rowKey, sel: isSelected, data }, keys) => {
@@ -20261,6 +20425,11 @@ var ServerProxy = class {
20261
20425
  this.postMessageToClient(debounceRequest);
20262
20426
  }
20263
20427
  }
20428
+ setConfig(viewport, message) {
20429
+ const requestId = nextRequestId();
20430
+ const request = viewport.setConfig(requestId, message.config);
20431
+ this.sendIfReady(request, requestId, viewport.status === "subscribed");
20432
+ }
20264
20433
  aggregate(viewport, message) {
20265
20434
  const requestId = nextRequestId();
20266
20435
  const request = viewport.aggregateRequest(requestId, message.aggregations);
@@ -20418,6 +20587,8 @@ var ServerProxy = class {
20418
20587
  switch (message.type) {
20419
20588
  case "setViewRange":
20420
20589
  return this.setViewRange(viewport, message);
20590
+ case "config":
20591
+ return this.setConfig(viewport, message);
20421
20592
  case "aggregate":
20422
20593
  return this.aggregate(viewport, message);
20423
20594
  case "sort":
@@ -21996,6 +22167,32 @@ var RemoteDataSource = class extends EventEmitter4 {
21996
22167
  get config() {
21997
22168
  return __privateGet(this, _config);
21998
22169
  }
22170
+ set config(config) {
22171
+ var _a2;
22172
+ if (configChanged2(__privateGet(this, _config), config)) {
22173
+ if ((config == null ? void 0 : config.filter) && (config == null ? void 0 : config.filter.filterStruct) === void 0) {
22174
+ __privateSet(this, _config, {
22175
+ ...config,
22176
+ filter: {
22177
+ filter: config.filter.filter,
22178
+ filterStruct: parseFilter(config.filter.filter)
22179
+ }
22180
+ });
22181
+ } else {
22182
+ __privateSet(this, _config, config);
22183
+ }
22184
+ if (__privateGet(this, _config) && this.viewport && this.server) {
22185
+ if (config) {
22186
+ (_a2 = this.server) == null ? void 0 : _a2.send({
22187
+ viewport: this.viewport,
22188
+ type: "config",
22189
+ config: __privateGet(this, _config)
22190
+ });
22191
+ }
22192
+ }
22193
+ this.emit("config", __privateGet(this, _config));
22194
+ }
22195
+ }
21999
22196
  get optimize() {
22000
22197
  return __privateGet(this, _optimize);
22001
22198
  }
@@ -22228,9 +22425,6 @@ import { jsx as jsx18 } from "react/jsx-runtime";
22228
22425
  // ../vuu-filters/src/filter-toolbar/FilterToolbar.tsx
22229
22426
  import { jsx as jsx19 } from "react/jsx-runtime";
22230
22427
 
22231
- // ../vuu-filters/src/filter-input/filter-language-parser/FilterParser.ts
22232
- var strictParser = parser.configure({ strict: true });
22233
-
22234
22428
  // ../vuu-filters/src/filter-utils.ts
22235
22429
  import { extractFilterForColumn, partition } from "@vuu-ui/vuu-utils";
22236
22430