@easyquery/enterprise 7.1.3-beta02 → 7.2.0-rc04

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.
@@ -180,8 +180,17 @@ var browserUtils;
180
180
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
181
181
 
182
182
  "use strict";
183
+ // ESM COMPAT FLAG
183
184
  __webpack_require__.r(__webpack_exports__);
184
185
 
186
+ // EXPORTS
187
+ __webpack_require__.d(__webpack_exports__, "EqServerAggregatesCalculator", function() { return /* reexport */ eqs_aggr_calculator_EqServerAggregatesCalculator; });
188
+ __webpack_require__.d(__webpack_exports__, "QueryEx", function() { return /* reexport */ query_ex_QueryEx; });
189
+ __webpack_require__.d(__webpack_exports__, "QueryColumnEx", function() { return /* reexport */ query_column_ex_QueryColumnEx; });
190
+ __webpack_require__.d(__webpack_exports__, "ConditionEx", function() { return /* reexport */ condition_ex_ConditionEx; });
191
+ __webpack_require__.d(__webpack_exports__, "DataModelEx", function() { return /* reexport */ model_ex_DataModelEx; });
192
+ __webpack_require__.d(__webpack_exports__, "EqServerQueryStorage", function() { return /* reexport */ EqServerQueryStorage; });
193
+
185
194
  // EXTERNAL MODULE: external "easyqueryCore"
186
195
  var external_easyqueryCore_ = __webpack_require__(0);
187
196
 
@@ -835,7 +844,7 @@ var i18n_i18n;
835
844
  var utils_utils;
836
845
  (function (utils) {
837
846
  function getAllDataTypes() {
838
- return Object.values(DataType);
847
+ return Object.values(DataType).filter(function (item) { return typeof item === "number"; });
839
848
  }
840
849
  utils.getAllDataTypes = getAllDataTypes;
841
850
  function getDateDataTypes() {
@@ -843,12 +852,16 @@ var utils_utils;
843
852
  }
844
853
  utils.getDateDataTypes = getDateDataTypes;
845
854
  function getStringDataTypes() {
846
- return [DataType.String, DataType.Memo];
855
+ return [DataType.String, DataType.Memo, DataType.FixedChar];
847
856
  }
848
857
  utils.getStringDataTypes = getStringDataTypes;
849
858
  var _numericTypes = [DataType.Byte, DataType.Word, DataType.Int32,
850
- DataType.Int64, DataType.Float, DataType.Currency];
851
- var _intTypes = [DataType.Byte, DataType.Word, DataType.Int32, DataType.Int64];
859
+ DataType.Int64, DataType.Float, DataType.Currency, DataType.Autoinc];
860
+ function getNumericDataTypes() {
861
+ return _numericTypes;
862
+ }
863
+ utils.getNumericDataTypes = getNumericDataTypes;
864
+ var _intTypes = [DataType.Byte, DataType.Word, DataType.Int32, DataType.Int64, DataType.Autoinc];
852
865
  //-------------- object functions -------------------
853
866
  /**
854
867
  * Copy the content of all objests passed in `args` parameters into `target`
@@ -913,7 +926,7 @@ var utils_utils;
913
926
  hashSet.set(sourceVal, target[key]);
914
927
  }
915
928
  else {
916
- if (typeof target[key] == 'undefined') {
929
+ if (typeof target[key] == 'undefined' || target[key] == null) {
917
930
  target[key] = Object.create(Object.getPrototypeOf(sourceVal));
918
931
  }
919
932
  hashSet.set(sourceVal, target[key]);
@@ -1442,7 +1455,7 @@ var http_client_HttpClient = /** @class */ (function () {
1442
1455
  var desc = {
1443
1456
  method: method,
1444
1457
  url: url,
1445
- headers: __assign({}, this.defaultHeaders, options.headers || {}),
1458
+ headers: __assign(__assign({}, this.defaultHeaders), options.headers || {}),
1446
1459
  queryParams: options.queryParams || {},
1447
1460
  data: data
1448
1461
  };
@@ -1588,6 +1601,12 @@ var MetaEntity = /** @class */ (function () {
1588
1601
  };
1589
1602
  internalProcessEntity(this);
1590
1603
  };
1604
+ MetaEntity.prototype.getFirstPrimaryAttr = function () {
1605
+ return this.getPrimaryAttrs()[0];
1606
+ };
1607
+ MetaEntity.prototype.getPrimaryAttrs = function () {
1608
+ return this.attributes.filter(function (attr) { return attr.isPrimaryKey; });
1609
+ };
1591
1610
  return MetaEntity;
1592
1611
  }());
1593
1612
 
@@ -2206,9 +2225,9 @@ var meta_data_MetaData = /** @class */ (function () {
2206
2225
  }());
2207
2226
 
2208
2227
  //# sourceMappingURL=meta_data.js.map
2209
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/data/aggr_calculator.js
2210
- var aggr_calculator_assign = (undefined && undefined.__assign) || function () {
2211
- aggr_calculator_assign = Object.assign || function(t) {
2228
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/data/aggr_settings.js
2229
+ var aggr_settings_assign = (undefined && undefined.__assign) || function () {
2230
+ aggr_settings_assign = Object.assign || function(t) {
2212
2231
  for (var s, i = 1, n = arguments.length; i < n; i++) {
2213
2232
  s = arguments[i];
2214
2233
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
@@ -2216,7 +2235,7 @@ var aggr_calculator_assign = (undefined && undefined.__assign) || function () {
2216
2235
  }
2217
2236
  return t;
2218
2237
  };
2219
- return aggr_calculator_assign.apply(this, arguments);
2238
+ return aggr_settings_assign.apply(this, arguments);
2220
2239
  };
2221
2240
  /**
2222
2241
  * Defines aggregations settings for the current context.
@@ -2229,16 +2248,32 @@ var AggregationSettings = /** @class */ (function () {
2229
2248
  this.groups = [];
2230
2249
  this.useGrandTotals = false;
2231
2250
  this.useRecordCount = false;
2232
- this.caseSensitiveGroups = false;
2251
+ this._caseSensitiveGroups = false;
2233
2252
  this.COUNT_FIELD_NAME = 'GRPRECCNT';
2234
2253
  }
2254
+ Object.defineProperty(AggregationSettings.prototype, "caseSensitiveGroups", {
2255
+ get: function () {
2256
+ return this._caseSensitiveGroups;
2257
+ },
2258
+ set: function (value) {
2259
+ this._caseSensitiveGroups = value;
2260
+ this.updateCompareProc();
2261
+ },
2262
+ enumerable: true,
2263
+ configurable: true
2264
+ });
2265
+ AggregationSettings.prototype.updateCompareProc = function () {
2266
+ this.compareValues = this._caseSensitiveGroups
2267
+ ? this.strictCompare
2268
+ : this.caseInsensitiveCompare;
2269
+ };
2235
2270
  AggregationSettings.prototype.addGroup = function (settings) {
2236
2271
  var cols = settings.columns || this.colStore.getColumnIds(settings.from, settings.to);
2237
2272
  if (!this.colStore.validateColumns(cols))
2238
2273
  throw "Invalid columns: " + cols;
2239
2274
  if (this.hasColumnsInUse(cols))
2240
2275
  throw "Can't add same columns to different groups/aggregates";
2241
- this.groups.push(aggr_calculator_assign({ columns: cols, aggregates: null }, settings));
2276
+ this.groups.push(aggr_settings_assign({ columns: cols }, settings));
2242
2277
  return this;
2243
2278
  };
2244
2279
  AggregationSettings.prototype.addAggregateColumn = function (colIndexOrId, funcId) {
@@ -2263,7 +2298,7 @@ var AggregationSettings = /** @class */ (function () {
2263
2298
  var cols = [];
2264
2299
  var mappedGrops = this.groups.map(function (grp) {
2265
2300
  cols = cols.concat(grp.columns);
2266
- return aggr_calculator_assign({}, grp, { columns: Array.from(cols), aggregates: Array.from(_this.aggregates) });
2301
+ return aggr_settings_assign(aggr_settings_assign({}, grp), { columns: Array.from(cols), aggregates: Array.from(_this.aggregates) });
2267
2302
  });
2268
2303
  return mappedGrops;
2269
2304
  };
@@ -2355,10 +2390,35 @@ var AggregationSettings = /** @class */ (function () {
2355
2390
  }
2356
2391
  }
2357
2392
  };
2393
+ AggregationSettings.prototype.buildGroupKey = function (group, row) {
2394
+ var caseInsensitive = !this.caseSensitiveGroups;
2395
+ var result = {};
2396
+ if (group) {
2397
+ for (var _i = 0, _a = group.columns; _i < _a.length; _i++) {
2398
+ var colId = _a[_i];
2399
+ var keyVal = row.getValue(colId);
2400
+ if (caseInsensitive && typeof (keyVal) === 'string') {
2401
+ keyVal = keyVal.toLowerCase();
2402
+ }
2403
+ result[colId] = keyVal;
2404
+ }
2405
+ }
2406
+ return result;
2407
+ };
2408
+ //returns true if value1 == value2
2409
+ AggregationSettings.prototype.strictCompare = function (value1, value2) {
2410
+ return value1 === value2;
2411
+ };
2412
+ //makes a case insensative comparision of two values and return true if there are equal
2413
+ AggregationSettings.prototype.caseInsensitiveCompare = function (value1, value2) {
2414
+ var val1 = (typeof value1 === 'string') ? value1.toLowerCase() : value1;
2415
+ var val2 = (typeof value2 === 'string') ? value2.toLowerCase() : value2;
2416
+ return val1 === val2;
2417
+ };
2358
2418
  return AggregationSettings;
2359
2419
  }());
2360
2420
 
2361
- //# sourceMappingURL=aggr_calculator.js.map
2421
+ //# sourceMappingURL=aggr_settings.js.map
2362
2422
  // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/data/data_column.js
2363
2423
 
2364
2424
 
@@ -2386,6 +2446,7 @@ var data_column_DataColumn = /** @class */ (function () {
2386
2446
  this.groupFooterColumnTemplate = desc.gfct;
2387
2447
  this.style = desc.style || {};
2388
2448
  this.description = desc.description;
2449
+ this.calculatedWidth = 0;
2389
2450
  }
2390
2451
  return DataColumn;
2391
2452
  }());
@@ -2425,9 +2486,10 @@ var data_column_DataColumnList = /** @class */ (function () {
2425
2486
  .map(function (col, index) { return index; });
2426
2487
  };
2427
2488
  DataColumnList.prototype.put = function (index, col) {
2428
- //!!!!!!!!!check on "out of index"
2429
- this.items[index] = col;
2430
- this.updateDateColumnIdx();
2489
+ if (index >= 0 && index < this.count) {
2490
+ this.items[index] = col;
2491
+ this.updateDateColumnIdx();
2492
+ }
2431
2493
  };
2432
2494
  DataColumnList.prototype.move = function (col, newIndex) {
2433
2495
  var oldIndex = this.items.indexOf(col);
@@ -2437,8 +2499,12 @@ var data_column_DataColumnList = /** @class */ (function () {
2437
2499
  }
2438
2500
  };
2439
2501
  DataColumnList.prototype.get = function (index) {
2440
- //!!!!!!!!!check on "out of index"
2441
- return this.items[index];
2502
+ if (index >= 0 && index < this.count) {
2503
+ return this.items[index];
2504
+ }
2505
+ else {
2506
+ return null;
2507
+ }
2442
2508
  };
2443
2509
  DataColumnList.prototype.getIndex = function (id) {
2444
2510
  return this.mapper[id];
@@ -2522,16 +2588,23 @@ var easy_data_table_EasyDataTable = /** @class */ (function () {
2522
2588
  function EasyDataTable(options) {
2523
2589
  this._chunkSize = 1000;
2524
2590
  this._elasticChunks = false;
2525
- // object keeps number keys sorted
2526
- this.chunkMap = {};
2591
+ this.cachedRows = [];
2527
2592
  this.total = 0;
2528
2593
  this.loader = null;
2529
2594
  this.needTotal = true;
2595
+ this.isInMemory = false;
2530
2596
  options = options || {};
2531
2597
  this._chunkSize = options.chunkSize || this._chunkSize;
2532
2598
  this._elasticChunks = options.elasticChunks || this._elasticChunks;
2533
2599
  this.loader = options.loader;
2600
+ if (typeof options.inMemory !== 'undefined') {
2601
+ this.isInMemory = options.inMemory;
2602
+ }
2603
+ if (this.isInMemory) {
2604
+ this.needTotal = false;
2605
+ }
2534
2606
  this._columns = new data_column_DataColumnList();
2607
+ this.onUpdate = options.onUpdate;
2535
2608
  if (options.columns) {
2536
2609
  for (var _i = 0, _a = options.columns; _i < _a.length; _i++) {
2537
2610
  var colDesc = _a[_i];
@@ -2562,7 +2635,7 @@ var easy_data_table_EasyDataTable = /** @class */ (function () {
2562
2635
  this._chunkSize = value;
2563
2636
  this.total = 0;
2564
2637
  this.needTotal = !this.elasticChunks;
2565
- this.chunkMap = {};
2638
+ this.cachedRows = [];
2566
2639
  },
2567
2640
  enumerable: true,
2568
2641
  configurable: true
@@ -2575,7 +2648,7 @@ var easy_data_table_EasyDataTable = /** @class */ (function () {
2575
2648
  this._elasticChunks = value;
2576
2649
  this.total = 0;
2577
2650
  this.needTotal = !this.elasticChunks;
2578
- this.chunkMap = {};
2651
+ this.cachedRows = [];
2579
2652
  },
2580
2653
  enumerable: true,
2581
2654
  configurable: true
@@ -2603,22 +2676,12 @@ var easy_data_table_EasyDataTable = /** @class */ (function () {
2603
2676
  endIndex = this.total;
2604
2677
  }
2605
2678
  }
2606
- var lbChunk = Math.trunc(fromIndex / this._chunkSize);
2607
- var ubChunk = Math.trunc((endIndex - 1) / this._chunkSize);
2608
- var allChunksCached = true;
2609
- for (var i = lbChunk; i <= ubChunk; i++) {
2610
- if (!this.chunkMap[i]) {
2611
- allChunksCached = false;
2612
- break;
2613
- }
2679
+ if (this.isInMemory && endIndex > this.cachedRows.length) {
2680
+ endIndex = this.cachedRows.length;
2614
2681
  }
2682
+ var allChunksCached = endIndex <= this.cachedRows.length;
2615
2683
  if (allChunksCached) {
2616
- var resultArr = [];
2617
- for (var i = lbChunk; i <= ubChunk; i++) {
2618
- resultArr = resultArr.concat(this.chunkMap[i].rows);
2619
- }
2620
- var firstChunkOffset = this.chunkMap[lbChunk].offset;
2621
- return Promise.resolve(resultArr.slice(fromIndex - firstChunkOffset, endIndex - firstChunkOffset));
2684
+ return Promise.resolve(this.cachedRows.slice(fromIndex, endIndex));
2622
2685
  }
2623
2686
  //if loader is not defined
2624
2687
  if (!this.loader) {
@@ -2629,53 +2692,34 @@ var easy_data_table_EasyDataTable = /** @class */ (function () {
2629
2692
  if (this.needTotal) {
2630
2693
  this.needTotal = false;
2631
2694
  }
2632
- var limit = this._chunkSize * (ubChunk - lbChunk + 1);
2633
- if (this.elasticChunks)
2634
- limit++;
2635
- return this.loader.loadChunk({
2636
- offset: lbChunk * this._chunkSize,
2695
+ var offset = this.cachedRows.length;
2696
+ var limit = endIndex - offset;
2697
+ if (limit < this._chunkSize) {
2698
+ limit = this._chunkSize;
2699
+ }
2700
+ var resultPromise = this.loader.loadChunk({
2701
+ offset: offset,
2637
2702
  limit: limit,
2638
2703
  needTotal: needTotal
2639
2704
  })
2640
2705
  .then(function (result) {
2641
- var chunks = result.table.getCachedChunks();
2642
2706
  if (needTotal) {
2643
2707
  _this.total = result.total;
2644
- if (endIndex > _this.total) {
2645
- endIndex = _this.total;
2646
- }
2647
2708
  }
2648
- var index = lbChunk;
2649
- for (var _i = 0, chunks_1 = chunks; _i < chunks_1.length; _i++) {
2650
- var chunk = chunks_1[_i];
2651
- _this.chunkMap[index] = {
2652
- offset: index * _this._chunkSize,
2653
- rows: chunk.rows
2654
- };
2655
- index++;
2709
+ Array.prototype.push.apply(_this.cachedRows, result.table.getCachedRows());
2710
+ if (endIndex > _this.cachedRows.length) {
2711
+ endIndex = _this.cachedRows.length;
2656
2712
  }
2657
2713
  if (_this.elasticChunks) {
2658
2714
  var count_1 = result.table.getCachedCount();
2659
- if (count_1 > 0) {
2660
- var chunk = _this.chunkMap[index - 1];
2661
- if (count_1 === limit) {
2662
- chunk.rows.splice(chunk.rows.length - 1, 1);
2663
- if (chunk.rows.length == 0) {
2664
- delete _this.chunkMap[index - 1];
2665
- }
2666
- }
2667
- if (count_1 < limit) {
2668
- _this.total = _this.getCachedCount();
2669
- }
2715
+ if (count_1 < limit) {
2716
+ _this.total = _this.cachedRows.length;
2670
2717
  }
2671
2718
  }
2672
- var resultArr = [];
2673
- for (var i = lbChunk; i <= ubChunk; i++) {
2674
- resultArr = resultArr.concat(_this.chunkMap[i].rows);
2675
- }
2676
- var firstChunkOffset = _this.chunkMap[lbChunk].offset;
2677
- return resultArr.slice(fromIndex - firstChunkOffset, endIndex - firstChunkOffset);
2719
+ _this.fireUpdated();
2720
+ return _this.cachedRows.slice(fromIndex, endIndex);
2678
2721
  });
2722
+ return resultPromise;
2679
2723
  };
2680
2724
  EasyDataTable.prototype.getRow = function (index) {
2681
2725
  return this.getRows({ offset: index, limit: 1 })
@@ -2687,16 +2731,16 @@ var easy_data_table_EasyDataTable = /** @class */ (function () {
2687
2731
  EasyDataTable.prototype.setTotal = function (total) {
2688
2732
  this.total = total;
2689
2733
  this.needTotal = false;
2690
- this.chunkMap = {};
2691
2734
  };
2692
2735
  EasyDataTable.prototype.getCachedCount = function () {
2693
- return this.getCachedRows().length;
2736
+ return this.cachedRows.length;
2694
2737
  };
2695
2738
  EasyDataTable.prototype.clear = function () {
2696
2739
  this.columns.clear();
2697
- this.chunkMap = {};
2740
+ this.cachedRows = [];
2698
2741
  this.total = 0;
2699
2742
  this.needTotal = !this._elasticChunks;
2743
+ this.fireUpdated();
2700
2744
  };
2701
2745
  EasyDataTable.prototype.createRow = function (dataOrRow) {
2702
2746
  var _this = this;
@@ -2727,60 +2771,33 @@ var easy_data_table_EasyDataTable = /** @class */ (function () {
2727
2771
  }
2728
2772
  return null;
2729
2773
  };
2730
- EasyDataTable.prototype.addRow = function (rowOrValue) {
2774
+ EasyDataTable.prototype.addRow = function (rowOrValues) {
2731
2775
  var newRow;
2732
- if (Array.isArray(rowOrValue)) {
2776
+ if (Array.isArray(rowOrValues)) {
2777
+ var values = rowOrValues;
2733
2778
  var dateIdx = this._columns.getDateColumnIndexes();
2734
2779
  if (dateIdx.length > 0) {
2735
2780
  for (var _i = 0, dateIdx_1 = dateIdx; _i < dateIdx_1.length; _i++) {
2736
2781
  var idx = dateIdx_1[_i];
2737
- if (rowOrValue[idx]) {
2738
- rowOrValue[idx] = this.mapDate(rowOrValue[idx], this._columns.get(idx).type);
2782
+ if (values[idx]) {
2783
+ values[idx] = this.mapDate(values[idx], this._columns.get(idx).type);
2739
2784
  }
2740
2785
  }
2741
2786
  }
2742
- newRow = new DataRow(this._columns, rowOrValue);
2787
+ newRow = new DataRow(this._columns, values);
2743
2788
  }
2744
2789
  else {
2745
- newRow = this.createRow(rowOrValue);
2746
- }
2747
- var lastChunk = this.getLastChunk();
2748
- if (!lastChunk || lastChunk.rows.length >= this._chunkSize) {
2749
- lastChunk = this.createChunk();
2790
+ newRow = this.createRow(rowOrValues);
2750
2791
  }
2751
- lastChunk.rows.push(newRow);
2792
+ this.cachedRows.push(newRow);
2752
2793
  var cachedTotal = this.getCachedCount();
2753
2794
  if (cachedTotal > this.total) {
2754
2795
  this.total = cachedTotal;
2755
2796
  }
2756
2797
  return newRow;
2757
2798
  };
2758
- EasyDataTable.prototype.createChunk = function (index) {
2759
- if (typeof index == 'undefined') {
2760
- index = this.getLastChunkIndex() + 1;
2761
- }
2762
- var chunk = { offset: index * this._chunkSize, rows: [] };
2763
- this.chunkMap[index] = chunk;
2764
- return chunk;
2765
- };
2766
- EasyDataTable.prototype.getLastChunkIndex = function () {
2767
- var keys = Object.keys(this.chunkMap);
2768
- return keys.length > 0
2769
- ? parseInt(keys[keys.length - 1])
2770
- : -1;
2771
- };
2772
- EasyDataTable.prototype.getLastChunk = function () {
2773
- var index = this.getLastChunkIndex();
2774
- return index > -1
2775
- ? this.chunkMap[index]
2776
- : null;
2777
- };
2778
2799
  EasyDataTable.prototype.getCachedRows = function () {
2779
- return this.getCachedChunks()
2780
- .reduce(function (acc, v) { return acc.concat(v.rows); }, []);
2781
- };
2782
- EasyDataTable.prototype.getCachedChunks = function () {
2783
- return Object.values(this.chunkMap);
2800
+ return this.cachedRows;
2784
2801
  };
2785
2802
  EasyDataTable.prototype.totalIsKnown = function () {
2786
2803
  if (this.elasticChunks) {
@@ -2789,6 +2806,11 @@ var easy_data_table_EasyDataTable = /** @class */ (function () {
2789
2806
  }
2790
2807
  return !this.needTotal;
2791
2808
  };
2809
+ EasyDataTable.prototype.fireUpdated = function () {
2810
+ if (this.onUpdate) {
2811
+ this.onUpdate(this);
2812
+ }
2813
+ };
2792
2814
  return EasyDataTable;
2793
2815
  }());
2794
2816
 
@@ -2973,7 +2995,6 @@ i18n_i18n.resetLocales();
2973
2995
 
2974
2996
 
2975
2997
 
2976
- //data
2977
2998
 
2978
2999
 
2979
3000
 
@@ -3347,6 +3368,13 @@ var dom_elem_builder_extends = (undefined && undefined.__extends) || (function (
3347
3368
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
3348
3369
  };
3349
3370
  })();
3371
+ var __spreadArrays = (undefined && undefined.__spreadArrays) || function () {
3372
+ for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
3373
+ for (var r = Array(s), k = 0, i = 0; i < il; i++)
3374
+ for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
3375
+ r[k] = a[j];
3376
+ return r;
3377
+ };
3350
3378
 
3351
3379
  var DomElementBuilder = /** @class */ (function () {
3352
3380
  function DomElementBuilder(tag, parent) {
@@ -3417,7 +3445,7 @@ var DomElementBuilder = /** @class */ (function () {
3417
3445
  classNames[_i - 1] = arguments[_i];
3418
3446
  }
3419
3447
  if (className) {
3420
- var fullList = className.trim().split(" ").concat(classNames);
3448
+ var fullList = __spreadArrays(className.trim().split(" "), classNames);
3421
3449
  for (var i = 0; i < fullList.length; i++)
3422
3450
  this.element.classList.add(fullList[i]);
3423
3451
  }
@@ -3429,7 +3457,7 @@ var DomElementBuilder = /** @class */ (function () {
3429
3457
  classNames[_i - 1] = arguments[_i];
3430
3458
  }
3431
3459
  if (className) {
3432
- var fullList = className.trim().split(" ").concat(classNames);
3460
+ var fullList = __spreadArrays(className.trim().split(" "), classNames);
3433
3461
  for (var i = 0; i < fullList.length; i++)
3434
3462
  this.element.classList.remove(fullList[i]);
3435
3463
  }
@@ -3996,6 +4024,14 @@ var drag_manager_DragManager = /** @class */ (function () {
3996
4024
  //global variable
3997
4025
  var eqDragManager = new drag_manager_DragManager();
3998
4026
  //# sourceMappingURL=drag_manager.js.map
4027
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_options.js
4028
+ var AutoResizeColumns;
4029
+ (function (AutoResizeColumns) {
4030
+ AutoResizeColumns[AutoResizeColumns["Always"] = 0] = "Always";
4031
+ AutoResizeColumns[AutoResizeColumns["Once"] = 1] = "Once";
4032
+ AutoResizeColumns[AutoResizeColumns["Never"] = 2] = "Never";
4033
+ })(AutoResizeColumns || (AutoResizeColumns = {}));
4034
+ //# sourceMappingURL=easy_grid_options.js.map
3999
4035
  // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_cell_renderer.js
4000
4036
 
4001
4037
 
@@ -4147,13 +4183,7 @@ var easy_grid_cell_renderer_GridCellRendererStore = /** @class */ (function () {
4147
4183
  // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_columns.js
4148
4184
 
4149
4185
 
4150
- var DEFAULT_WIDTH = 150;
4151
- var DEFAULT_WIDTH_NUMBER = 120;
4152
- var DEFAULT_WIDTH_DATE = 200;
4153
- var DEFAULT_WIDTH_BOOL = 80;
4154
4186
  var DEFAULT_WIDTH_STRING = 250;
4155
- var MIN_WIDTH_STRING = 100;
4156
- var MAX_WIDTH_STRING = 500;
4157
4187
  var ROW_NUM_WIDTH = 60;
4158
4188
  var GridColumnAlign;
4159
4189
  (function (GridColumnAlign) {
@@ -4185,31 +4215,18 @@ var easy_grid_columns_GridColumn = /** @class */ (function () {
4185
4215
  this.isRowNum = false;
4186
4216
  this.dataColumn = column;
4187
4217
  this.grid = grid;
4218
+ var widthOptions = grid.options.columnWidths || {};
4188
4219
  if (column) {
4189
4220
  if (column.style.alignment) {
4190
4221
  this.align = MapAlignment(column.style.alignment);
4191
4222
  }
4192
- var coltype = column.type;
4193
- var cellType = this.grid.cellRendererStore.getCellType(coltype);
4194
- switch (cellType) {
4195
- case CellRendererType.NUMBER:
4196
- this.width = DEFAULT_WIDTH_NUMBER;
4197
- break;
4198
- case CellRendererType.DATETIME:
4199
- this.width = DEFAULT_WIDTH_DATE;
4200
- break;
4201
- case CellRendererType.BOOL:
4202
- this.width = DEFAULT_WIDTH_BOOL;
4203
- break;
4204
- default:
4205
- this.width = DEFAULT_WIDTH_STRING;
4206
- }
4223
+ this.width = (widthOptions && widthOptions[this.type]) ? widthOptions[this.type].default : DEFAULT_WIDTH_STRING;
4207
4224
  this.cellRenderer = this.grid.cellRendererStore.getDefaultRenderer(column.type);
4208
4225
  this._description = column.description;
4209
4226
  }
4210
4227
  else if (isRowNum) {
4211
4228
  this.isRowNum = true;
4212
- this.width = ROW_NUM_WIDTH;
4229
+ this.width = (widthOptions && widthOptions.rowNumColumn) ? widthOptions.rowNumColumn.default : ROW_NUM_WIDTH;
4213
4230
  this._label = '';
4214
4231
  this.cellRenderer = this.grid.cellRendererStore.getDefaultRendererByType(CellRendererType.NUMBER);
4215
4232
  }
@@ -4255,9 +4272,10 @@ var easy_grid_columns_GridColumnList = /** @class */ (function () {
4255
4272
  GridColumnList.prototype.sync = function (columnList, hasRowNumCol) {
4256
4273
  if (hasRowNumCol === void 0) { hasRowNumCol = true; }
4257
4274
  this.clear();
4258
- if (hasRowNumCol) {
4259
- var rowNumCol = new easy_grid_columns_GridColumn(null, this.grid, true);
4260
- this.add(rowNumCol);
4275
+ var rowNumCol = new easy_grid_columns_GridColumn(null, this.grid, true);
4276
+ this.add(rowNumCol);
4277
+ if (!hasRowNumCol) {
4278
+ rowNumCol.isVisible = false;
4261
4279
  }
4262
4280
  if (columnList) {
4263
4281
  for (var _i = 0, _a = columnList.getItems(); _i < _a.length; _i++) {
@@ -4331,6 +4349,14 @@ var easy_grid_assign = (undefined && undefined.__assign) || function () {
4331
4349
  };
4332
4350
  return easy_grid_assign.apply(this, arguments);
4333
4351
  };
4352
+ var easy_grid_spreadArrays = (undefined && undefined.__spreadArrays) || function () {
4353
+ for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
4354
+ for (var r = Array(s), k = 0, i = 0; i < il; i++)
4355
+ for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
4356
+ r[k] = a[j];
4357
+ return r;
4358
+ };
4359
+
4334
4360
 
4335
4361
 
4336
4362
 
@@ -4363,14 +4389,42 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4363
4389
  pageSize: 30,
4364
4390
  pageSizeItems: [20, 30, 50, 100, 200]
4365
4391
  },
4366
- addColumns: false,
4392
+ columnWidths: {
4393
+ autoResize: AutoResizeColumns.Always,
4394
+ stringColumns: {
4395
+ min: 100,
4396
+ max: 500,
4397
+ default: 250
4398
+ },
4399
+ numberColumns: {
4400
+ min: 60,
4401
+ default: 120
4402
+ },
4403
+ boolColumns: {
4404
+ min: 50,
4405
+ default: 80
4406
+ },
4407
+ dateColumns: {
4408
+ min: 80,
4409
+ default: 200
4410
+ },
4411
+ otherColumns: {
4412
+ min: 100,
4413
+ max: 500,
4414
+ default: 250
4415
+ },
4416
+ rowNumColumn: {
4417
+ min: 40,
4418
+ default: 60
4419
+ }
4420
+ },
4421
+ showPlusButton: false,
4367
4422
  viewportRowsCount: null,
4368
4423
  showActiveRow: true
4369
4424
  };
4370
4425
  this.rowsOnPagePromise = null;
4371
4426
  this.containerInitialHeight = 0;
4372
4427
  this.firstRender = true;
4373
- this.compareValues = this.strictCompare;
4374
4428
  this.prevRowTotals = null;
4375
4429
  this.landingIndex = -1;
4376
4430
  this.landingSlot = domel('div')
@@ -4382,7 +4436,8 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4382
4436
  if (options && options.paging) {
4383
4437
  options.paging = utils_utils.assign(this.defaultDataGridOptions.paging, options.paging);
4384
4438
  }
4385
- this.options = easy_grid_assign({}, this.defaultDataGridOptions, options);
4439
+ this.options = this.mergeOptions(options);
4440
+ this.processColumnWidthsOptions();
4386
4441
  if (!this.options.slot)
4387
4442
  throw Error('"slot" parameter is required to initialize EasyDataGrid');
4388
4443
  if (!this.options.dataTable)
@@ -4394,6 +4449,42 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4394
4449
  this.setSlot(this.options.slot);
4395
4450
  this.init(this.options);
4396
4451
  }
4452
+ EasyGrid.prototype.mergeOptions = function (options) {
4453
+ var colWidthOptions = utils_utils.assignDeep({}, this.defaultDataGridOptions.columnWidths, options.columnWidths);
4454
+ var pagingOptions = utils_utils.assignDeep({}, this.defaultDataGridOptions.paging, options.paging);
4455
+ var result = utils_utils.assign({}, this.defaultDataGridOptions, options);
4456
+ result.columnWidths = colWidthOptions;
4457
+ result.paging = pagingOptions;
4458
+ return result;
4459
+ };
4460
+ EasyGrid.prototype.processColumnWidthsOptions = function () {
4461
+ var widthOptions = this.options.columnWidths;
4462
+ if (!widthOptions)
4463
+ return;
4464
+ //string columns
4465
+ utils_utils.getStringDataTypes().forEach(function (dataType) {
4466
+ widthOptions[dataType] = easy_grid_assign(easy_grid_assign({}, widthOptions.stringColumns), widthOptions[dataType]);
4467
+ });
4468
+ //numeric columns
4469
+ utils_utils.getNumericDataTypes().forEach(function (dataType) {
4470
+ widthOptions[dataType] = easy_grid_assign(easy_grid_assign({}, widthOptions.numberColumns), widthOptions[dataType]);
4471
+ });
4472
+ //bool columns
4473
+ widthOptions[DataType.Bool] = easy_grid_assign(easy_grid_assign({}, widthOptions.boolColumns), widthOptions[DataType.Bool]);
4474
+ //date columns
4475
+ utils_utils.getDateDataTypes().forEach(function (dataType) {
4476
+ widthOptions[dataType] = easy_grid_assign(easy_grid_assign({}, widthOptions.dateColumns), widthOptions[dataType]);
4477
+ });
4478
+ //other columns
4479
+ var knownTypes = easy_grid_spreadArrays(utils_utils.getStringDataTypes(), utils_utils.getNumericDataTypes(), utils_utils.getDateDataTypes(), [
4480
+ DataType.Bool
4481
+ ]);
4482
+ utils_utils.getAllDataTypes().forEach(function (dataType) {
4483
+ if (!(dataType in knownTypes)) {
4484
+ widthOptions[dataType] = easy_grid_assign(easy_grid_assign({}, widthOptions.otherColumns), widthOptions[dataType]);
4485
+ }
4486
+ });
4487
+ };
4397
4488
  EasyGrid.prototype.setSlot = function (slot) {
4398
4489
  if (typeof slot === 'string') {
4399
4490
  if (slot.length) {
@@ -4426,8 +4517,8 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4426
4517
  if (options.onRowDbClick) {
4427
4518
  this.addEventListener('rowDbClick', options.onRowDbClick);
4428
4519
  }
4429
- if (options.onAddColumnClick) {
4430
- this.addEventListener('addColumnClick', options.onAddColumnClick);
4520
+ if (options.onPlusButtonClick) {
4521
+ this.addEventListener('plusButtonClick', options.onPlusButtonClick);
4431
4522
  }
4432
4523
  if (options.onColumnChanged) {
4433
4524
  this.addEventListener('columnChanged', options.onColumnChanged);
@@ -4513,7 +4604,7 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4513
4604
  };
4514
4605
  EasyGrid.prototype.render = function () {
4515
4606
  var _this = this;
4516
- if (!this.hasData() && !this.options.addColumns)
4607
+ if (!this.hasData() && !this.options.showPlusButton)
4517
4608
  return;
4518
4609
  this.containerInitialHeight = this.slot.clientHeight;
4519
4610
  this.rootDiv = document.createElement('div');
@@ -4530,6 +4621,7 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4530
4621
  gridContainer.classList.add(this.cssPrefix + "-container");
4531
4622
  gridContainer.appendChild(this.rootDiv);
4532
4623
  this.slot.appendChild(gridContainer);
4624
+ var needAutoResize = this.options.columnWidths.autoResize !== AutoResizeColumns.Never;
4533
4625
  if (this.rowsOnPagePromise) {
4534
4626
  this.rowsOnPagePromise
4535
4627
  .then(function () { return _this.updateHeight(); })
@@ -4540,8 +4632,13 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4540
4632
  }
4541
4633
  else {
4542
4634
  setTimeout(function () {
4543
- _this.updateHeight();
4544
- _this.firstRender = false;
4635
+ _this.updateHeight()
4636
+ .then(function () {
4637
+ _this.firstRender = false;
4638
+ if (needAutoResize) {
4639
+ _this.resizeColumns();
4640
+ }
4641
+ });
4545
4642
  }, 100);
4546
4643
  }
4547
4644
  };
@@ -4552,14 +4649,14 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4552
4649
  var firstRow = _this.bodyCellContainerDiv.firstElementChild;
4553
4650
  var rowHeight = firstRow ? firstRow.offsetHeight : DEFAULT_ROW_HEIGHT;
4554
4651
  var rowCount = _this.options.viewportRowsCount; // || DEFAULT_ROW_COUNT;
4555
- var bodyHeight_1 = rowHeight * rowCount;
4556
- domel(_this.bodyDiv)
4557
- .setStyle('height', bodyHeight_1 + "px");
4652
+ var viewportHeight_1 = rowHeight * rowCount;
4653
+ domel(_this.bodyViewportDiv)
4654
+ .setStyle('height', viewportHeight_1 + "px");
4558
4655
  setTimeout(function () {
4559
4656
  var sbHeight = _this.bodyViewportDiv.offsetHeight - _this.bodyViewportDiv.clientHeight;
4560
- bodyHeight_1 = bodyHeight_1 + sbHeight;
4561
- domel(_this.bodyDiv)
4562
- .setStyle('height', bodyHeight_1 + "px");
4657
+ viewportHeight_1 = viewportHeight_1 + sbHeight;
4658
+ domel(_this.bodyViewportDiv)
4659
+ .setStyle('height', viewportHeight_1 + "px");
4563
4660
  resolve();
4564
4661
  }, 100);
4565
4662
  return;
@@ -4606,7 +4703,7 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4606
4703
  _this.headerRowDiv.appendChild(hd);
4607
4704
  if (column.isRowNum) {
4608
4705
  domel(hd)
4609
- .addChildElement(_this.renderAddColumnButton());
4706
+ .addChildElement(_this.renderHeaderButtons());
4610
4707
  }
4611
4708
  });
4612
4709
  var containerWidth = this.getContainerWidth();
@@ -4620,7 +4717,7 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4620
4717
  var _this = this;
4621
4718
  var colBuilder = domel('div')
4622
4719
  .addClass(this.cssPrefix + "-header-cell")
4623
- .data('col-idx', "" + (index + 1))
4720
+ .data('col-idx', "" + index)
4624
4721
  .setStyle('width', column.width + "px");
4625
4722
  if (column.dataColumn) {
4626
4723
  colBuilder
@@ -4658,14 +4755,6 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4658
4755
  }
4659
4756
  return colDiv;
4660
4757
  };
4661
- EasyGrid.prototype.strictCompare = function (value1, value2) {
4662
- return value1 !== value2;
4663
- };
4664
- EasyGrid.prototype.caseInsensitiveCompare = function (value1, value2) {
4665
- var val1 = (typeof value1 === 'string') ? value1.toLowerCase() : value1;
4666
- var val2 = (typeof value2 === 'string') ? value2.toLowerCase() : value2;
4667
- return val1 !== val2;
4668
- };
4669
4758
  EasyGrid.prototype.renderBody = function () {
4670
4759
  var _this = this;
4671
4760
  this.bodyDiv = domel('div')
@@ -4679,10 +4768,6 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4679
4768
  .addClass(this.cssPrefix + "-cell-container")
4680
4769
  .toDOM();
4681
4770
  var showAggrs = this.canShowAggregates();
4682
- this.compareValues = this.caseInsensitiveCompare;
4683
- if (showAggrs && this.options.aggregates.settings.caseSensitiveGroups) {
4684
- this.compareValues = this.strictCompare;
4685
- }
4686
4771
  if (this.dataTable) {
4687
4772
  this.showProgress();
4688
4773
  this.rowsOnPagePromise = this.getRowsToRender()
@@ -4692,15 +4777,22 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4692
4777
  //prevent double rendering (bad solution, we have to figure out how to avoid this behavior properly)
4693
4778
  _this.bodyCellContainerDiv.innerHTML = '';
4694
4779
  _this.prevRowTotals = null;
4780
+ var rowsToRender = 0;
4695
4781
  if (rows.length) {
4696
4782
  var groups_1 = showAggrs
4697
4783
  ? _this.options.aggregates.settings.getGroups()
4698
4784
  : [];
4785
+ rowsToRender = (rows.length < _this.pagination.pageSize)
4786
+ ? rows.length
4787
+ : _this.pagination.pageSize;
4699
4788
  rows.forEach(function (row, index) {
4700
4789
  if (showAggrs)
4701
4790
  _this.updateTotalsState(groups_1, row);
4702
- var tr = _this.renderRow(row, index);
4703
- _this.bodyCellContainerDiv.appendChild(tr);
4791
+ //we don't actually render the last row
4792
+ if (index < rowsToRender) {
4793
+ var tr = _this.renderRow(row, index);
4794
+ _this.bodyCellContainerDiv.appendChild(tr);
4795
+ }
4704
4796
  });
4705
4797
  var showGrandTotalsOnEachPage = _this.options.aggregates && _this.options.aggregates.showGrandTotalsOnEachPage;
4706
4798
  if (showAggrs && (_this.isLastPage() || showGrandTotalsOnEachPage)) {
@@ -4708,10 +4800,16 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4708
4800
  _this.updateTotalsState(groups_1, row, true);
4709
4801
  }
4710
4802
  }
4711
- var containerWidth = _this.getContainerWidth();
4712
- domel(_this.bodyCellContainerDiv)
4713
- .setStyle('width', containerWidth + "px");
4714
- return rows.length;
4803
+ var needAutoResize = _this.options.columnWidths.autoResize !== AutoResizeColumns.Never;
4804
+ if (needAutoResize) {
4805
+ _this.resizeColumns();
4806
+ }
4807
+ else {
4808
+ var containerWidth = _this.getContainerWidth();
4809
+ domel(_this.bodyCellContainerDiv)
4810
+ .setStyle('width', containerWidth + "px");
4811
+ }
4812
+ return rowsToRender;
4715
4813
  })
4716
4814
  .catch(function (error) { console.error(error); return 0; });
4717
4815
  }
@@ -4719,7 +4817,7 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4719
4817
  domel(_this.headerViewportDiv)
4720
4818
  .setStyle('margin-left', "-" + _this.bodyViewportDiv.scrollLeft + "px");
4721
4819
  });
4722
- this.bodyViewportDiv.addEventListener('keydown', this.onVieportKeydown.bind(this));
4820
+ this.bodyViewportDiv.addEventListener('keydown', this.onViewportKeydown.bind(this));
4723
4821
  };
4724
4822
  EasyGrid.prototype.isLastPage = function () {
4725
4823
  if (this.dataTable.elasticChunks) {
@@ -4745,7 +4843,7 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4745
4843
  var group = groups[level - 1];
4746
4844
  for (var _i = 0, _a = group.columns; _i < _a.length; _i++) {
4747
4845
  var col = _a[_i];
4748
- if (this.compareValues(this.prevRowTotals.getValue(col), newRow.getValue(col))) {
4846
+ if (!aggrSettings.compareValues(this.prevRowTotals.getValue(col), newRow.getValue(col))) {
4749
4847
  changeLevel = level;
4750
4848
  break;
4751
4849
  }
@@ -4806,8 +4904,8 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4806
4904
  });
4807
4905
  var aggrContainer = this.options.aggregates.calculator.getAggrContainer();
4808
4906
  var aggrCols = aggrSettings.getAggregates().map(function (c) { return c.colId; });
4809
- var key = this.buildGroupKey(group, row);
4810
- aggrContainer.getAggregates(level, key)
4907
+ var key = aggrSettings.buildGroupKey(group, row);
4908
+ aggrContainer.getAggregateData(level, key)
4811
4909
  .then(function (values) {
4812
4910
  for (var _i = 0, aggrCols_1 = aggrCols; _i < aggrCols_1.length; _i++) {
4813
4911
  var aggrColId = aggrCols_1[_i];
@@ -4848,34 +4946,20 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4848
4946
  }
4849
4947
  }
4850
4948
  if (groupFooterTemplate) {
4851
- var cellDiv_1 = _this.renderCell(column, colIndex, val, rowElement);
4949
+ var cellDiv_1 = _this.renderCell(column, index, val, rowElement);
4852
4950
  var innerCell = cellDiv_1.firstChild;
4853
4951
  val = innerCell.innerHTML;
4854
4952
  val = _this.applyGroupColumnTemplate(groupFooterTemplate, val, values[aggrSettings.COUNT_FIELD_NAME]);
4855
4953
  }
4856
4954
  }
4857
- var cellDiv = _this.renderCell(column, colIndex, val, rowElement);
4955
+ var cellDiv = _this.renderCell(column, index, val, rowElement);
4858
4956
  rowElement.appendChild(cellDiv);
4859
4957
  });
4860
4958
  })
4861
4959
  .catch(function (error) { return console.error(error); });
4862
4960
  return rowElement;
4863
4961
  };
4864
- EasyGrid.prototype.buildGroupKey = function (group, row) {
4865
- var aggrSettings = this.options.aggregates.settings;
4866
- var caseInsensitive = aggrSettings && !aggrSettings.caseSensitiveGroups;
4867
- var result = {};
4868
- for (var _i = 0, _a = group.columns; _i < _a.length; _i++) {
4869
- var colId = _a[_i];
4870
- var keyVal = row.getValue(colId);
4871
- if (caseInsensitive && typeof (keyVal) === 'string') {
4872
- keyVal = keyVal.toLowerCase();
4873
- }
4874
- result[colId] = keyVal;
4875
- }
4876
- return result;
4877
- };
4878
- EasyGrid.prototype.onVieportKeydown = function (ev) {
4962
+ EasyGrid.prototype.onViewportKeydown = function (ev) {
4879
4963
  if (this.options.showActiveRow) {
4880
4964
  var rowCount = this.bodyCellContainerDiv.querySelectorAll("." + this.cssPrefix + "-row").length;
4881
4965
  var newValue = void 0;
@@ -4929,13 +5013,17 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4929
5013
  }
4930
5014
  }
4931
5015
  };
5016
+ /** Returns a promise with the list of the rows to render on one page.
5017
+ * The list contains pageSize+1 row to make it possible
5018
+ * to render the totals row (if it appears to be on the edge between pages)
5019
+ */
4932
5020
  EasyGrid.prototype.getRowsToRender = function () {
4933
5021
  if (this.options.paging.enabled === false) {
4934
5022
  return Promise.resolve(this.dataTable.getCachedRows());
4935
5023
  }
4936
5024
  return this.dataTable.getRows({
4937
- page: this.pagination.page,
4938
- pageSize: this.pagination.pageSize
5025
+ offset: (this.pagination.page - 1) * this.pagination.pageSize,
5026
+ limit: this.pagination.pageSize + 1
4939
5027
  })
4940
5028
  .catch(function (error) {
4941
5029
  console.error(error);
@@ -4960,23 +5048,26 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4960
5048
  var pageInfoDiv = domel('div')
4961
5049
  .addClass(this.cssPrefix + "-page-info")
4962
5050
  .toDOM();
4963
- var fistPageRecordNum = count
4964
- ? (this.pagination.page - 1) * this.pagination.pageSize + 1
4965
- : 0;
4966
- var lastPageRecordNum = count
4967
- ? fistPageRecordNum + count - 1
4968
- : 0;
4969
- var totalStr = this.dataTable.getTotal().toString();
4970
- if (this.dataTable.elasticChunks) {
4971
- var count_1 = this.dataTable.getCachedCount();
4972
- var total = this.dataTable.getTotal();
4973
- if (count_1 !== total)
4974
- totalStr = '?';
4975
- }
4976
- pageInfoDiv.innerHTML = i18n_i18n.getText('GridPageInfo')
4977
- .replace('{FirstPageRecordNum}', "<span>" + fistPageRecordNum.toString() + "</span>")
4978
- .replace('{LastPageRecordNum}', "<span>" + lastPageRecordNum.toString() + "</span>")
4979
- .replace('{Total}', "<span>" + totalStr + "</span>");
5051
+ var rowCount = this.dataTable.getTotal();
5052
+ if (rowCount > 0) {
5053
+ var fistPageRecordNum = count
5054
+ ? (this.pagination.page - 1) * this.pagination.pageSize + 1
5055
+ : 0;
5056
+ var lastPageRecordNum = count
5057
+ ? fistPageRecordNum + count - 1
5058
+ : 0;
5059
+ var totalStr = this.dataTable.getTotal().toString();
5060
+ if (this.dataTable.elasticChunks) {
5061
+ var count_1 = this.dataTable.getCachedCount();
5062
+ var total = this.dataTable.getTotal();
5063
+ if (count_1 !== total)
5064
+ totalStr = '?';
5065
+ }
5066
+ pageInfoDiv.innerHTML = i18n_i18n.getText('GridPageInfo')
5067
+ .replace('{FirstPageRecordNum}', "<span>" + fistPageRecordNum.toString() + "</span>")
5068
+ .replace('{LastPageRecordNum}', "<span>" + lastPageRecordNum.toString() + "</span>")
5069
+ .replace('{Total}', "<span>" + totalStr + "</span>");
5070
+ }
4980
5071
  return pageInfoDiv;
4981
5072
  };
4982
5073
  EasyGrid.prototype.showProgress = function () {
@@ -5031,13 +5122,13 @@ var easy_grid_EasyGrid = /** @class */ (function () {
5031
5122
  if (this.options.showActiveRow && index == this.activeRowIndex) {
5032
5123
  rowBuilder.addClass(this.cssPrefix + "-row-active");
5033
5124
  }
5034
- this.columns.getItems().forEach(function (column) {
5125
+ this.columns.getItems().forEach(function (column, index) {
5035
5126
  if (!column.isVisible) {
5036
5127
  return;
5037
5128
  }
5038
5129
  var colindex = column.isRowNum ? -1 : _this.dataTable.columns.getIndex(column.dataColumn.id);
5039
5130
  var val = column.isRowNum ? indexGlobal + 1 : row.getValue(colindex);
5040
- rowElement.appendChild(_this.renderCell(column, colindex, val, rowElement));
5131
+ rowElement.appendChild(_this.renderCell(column, index, val, rowElement));
5041
5132
  });
5042
5133
  return rowElement;
5043
5134
  };
@@ -5071,7 +5162,8 @@ var easy_grid_EasyGrid = /** @class */ (function () {
5071
5162
  var _this = this;
5072
5163
  var paginateDiv = document.createElement('div');
5073
5164
  paginateDiv.className = this.cssPrefix + "-pagination-wrapper";
5074
- if (this.options.paging && this.options.paging.enabled) {
5165
+ var rowCount = this.dataTable.getTotal();
5166
+ if (this.options.paging && this.options.paging.enabled && rowCount > 0) {
5075
5167
  var prefix_1 = this.paginationOptions.useBootstrap ? '' : this.cssPrefix + "-";
5076
5168
  var buttonClickHandler_1 = function (ev) {
5077
5169
  var element = ev.target;
@@ -5197,18 +5289,18 @@ var easy_grid_EasyGrid = /** @class */ (function () {
5197
5289
  EasyGrid.prototype.removeEventListener = function (eventType, handlerId) {
5198
5290
  this.eventEmitter.unsubscribe(eventType, handlerId);
5199
5291
  };
5200
- EasyGrid.prototype.renderAddColumnButton = function () {
5292
+ EasyGrid.prototype.renderHeaderButtons = function () {
5201
5293
  var _this = this;
5202
- if (this.options.addColumns) {
5294
+ if (this.options.showPlusButton) {
5203
5295
  return domel('div')
5204
- .addClass(this.cssPrefix + "-addrow")
5205
- .title(this.options.addColumnsTitle || 'Add column')
5296
+ .addClass(this.cssPrefix + "-header-btn-plus")
5297
+ .title(this.options.plusButtonTitle || 'Add')
5206
5298
  .addChild('a', function (builder) { return builder
5207
5299
  .attr('href', 'javascript:void(0)')
5208
5300
  .on('click', function (e) {
5209
5301
  e.preventDefault();
5210
5302
  _this.fireEvent({
5211
- type: 'addColumnClick',
5303
+ type: 'plusButtonClick',
5212
5304
  sourceEvent: e
5213
5305
  });
5214
5306
  }); })
@@ -5309,6 +5401,97 @@ var easy_grid_EasyGrid = /** @class */ (function () {
5309
5401
  EasyGrid.prototype.focus = function () {
5310
5402
  this.bodyViewportDiv.focus();
5311
5403
  };
5404
+ EasyGrid.prototype.resizeColumns = function () {
5405
+ if (this.options.columnWidths.autoResize === AutoResizeColumns.Never)
5406
+ return;
5407
+ var containerWidth = this.bodyCellContainerDiv.style.width;
5408
+ this.bodyCellContainerDiv.style.visibility = 'hidden';
5409
+ this.bodyCellContainerDiv.style.width = '1px';
5410
+ //this.headerRowDiv.style.visibility = 'hidden';
5411
+ this.headerRowDiv.style.width = '1px';
5412
+ var sumWidth = 0;
5413
+ var columns = this.columns.getItems();
5414
+ var headerCells = this.headerCellContainerDiv.querySelectorAll("." + this.cssPrefix + "-header-cell");
5415
+ var headerIdx = 0;
5416
+ var _loop_1 = function (idx) {
5417
+ var column = columns[idx];
5418
+ if (!column.isVisible)
5419
+ return "continue";
5420
+ var calculatedWidth = this_1.options.columnWidths.autoResize !== AutoResizeColumns.Always && column.dataColumn
5421
+ ? column.dataColumn.calculatedWidth
5422
+ : 0;
5423
+ var cellValues = this_1.bodyCellContainerDiv.querySelectorAll("." + this_1.cssPrefix + "-cell[data-col-idx=\"" + idx + "\"] > ." + this_1.cssPrefix + "-cell-value");
5424
+ var maxWidth = 0;
5425
+ if (calculatedWidth > 0) {
5426
+ sumWidth += calculatedWidth;
5427
+ column.width = calculatedWidth;
5428
+ cellValues.forEach(function (value) {
5429
+ value.parentElement.style.width = calculatedWidth + "px";
5430
+ });
5431
+ headerCells[headerIdx].style.width = calculatedWidth + "px";
5432
+ }
5433
+ else {
5434
+ if (cellValues.length == 0) {
5435
+ headerCells[headerIdx].style.width = null;
5436
+ headerCells[headerIdx].style.whiteSpace = 'nowrap';
5437
+ }
5438
+ maxWidth = headerCells[headerIdx].offsetWidth;
5439
+ if (cellValues.length > 0) {
5440
+ cellValues.forEach(function (value) {
5441
+ value.parentElement.style.width = null;
5442
+ var width = value.parentElement.offsetWidth;
5443
+ if (width > maxWidth) {
5444
+ maxWidth = width;
5445
+ }
5446
+ });
5447
+ maxWidth += 3;
5448
+ var maxOption = column.isRowNum
5449
+ ? this_1.options.columnWidths.rowNumColumn.max || 500
5450
+ : this_1.options.columnWidths[column.dataColumn.type].max || 2000;
5451
+ var minOption = column.isRowNum
5452
+ ? this_1.options.columnWidths.rowNumColumn.min || 0
5453
+ : this_1.options.columnWidths[column.dataColumn.type].min || 20;
5454
+ if (maxWidth > maxOption) {
5455
+ maxWidth = maxOption;
5456
+ }
5457
+ if (maxWidth < minOption) {
5458
+ maxWidth = minOption;
5459
+ }
5460
+ if (utils_utils.isNumericType(column.type)) {
5461
+ //increase the calculated width in 1.3 times for numeric columns
5462
+ maxWidth = Math.round(maxWidth * 1.3);
5463
+ }
5464
+ sumWidth += maxWidth;
5465
+ column.width = maxWidth;
5466
+ cellValues.forEach(function (value) {
5467
+ value.parentElement.style.width = maxWidth + "px";
5468
+ });
5469
+ headerCells[headerIdx].style.width = maxWidth + "px";
5470
+ if (column.dataColumn) {
5471
+ column.dataColumn.calculatedWidth = maxWidth;
5472
+ }
5473
+ }
5474
+ else {
5475
+ sumWidth += maxWidth;
5476
+ }
5477
+ }
5478
+ headerIdx++;
5479
+ };
5480
+ var this_1 = this;
5481
+ for (var idx = 0; idx < this.columns.count; idx++) {
5482
+ _loop_1(idx);
5483
+ }
5484
+ if (sumWidth > 0) {
5485
+ this.bodyCellContainerDiv.style.width = sumWidth + "px";
5486
+ this.headerCellContainerDiv.style.width = sumWidth + "px";
5487
+ }
5488
+ else {
5489
+ this.bodyCellContainerDiv.style.width = containerWidth;
5490
+ this.headerCellContainerDiv.style.width = containerWidth;
5491
+ }
5492
+ this.bodyCellContainerDiv.style.visibility = null;
5493
+ this.headerRowDiv.removeAttribute('style');
5494
+ };
5312
5495
  return EasyGrid;
5313
5496
  }());
5314
5497
 
@@ -6495,6 +6678,7 @@ addEasyDataUITexts();
6495
6678
 
6496
6679
 
6497
6680
 
6681
+
6498
6682
  //datetimepicker
6499
6683
 
6500
6684
 
@@ -6519,7 +6703,7 @@ var dialogs = new DefaultDialogService();
6519
6703
  //# sourceMappingURL=public_api.js.map
6520
6704
  // CONCATENATED MODULE: ./src/utils/lcv.ts
6521
6705
  var majVer = 7;
6522
- var minVer = 1;
6706
+ var minVer = 2;
6523
6707
  var magics = [45, 128, 231];
6524
6708
  Math.trunc = Math.trunc || function (x) {
6525
6709
  if (isNaN(x)) {
@@ -7107,167 +7291,170 @@ var model_ex_DataModelEx = /** @class */ (function (_super) {
7107
7291
  }(external_easyqueryCore_["DataModel"]));
7108
7292
 
7109
7293
 
7110
- // CONCATENATED MODULE: ./src/data/eqs_aggr_calculator.ts
7111
- var eqs_aggr_calculator_assign = (undefined && undefined.__assign) || function () {
7112
- eqs_aggr_calculator_assign = Object.assign || function(t) {
7113
- for (var s, i = 1, n = arguments.length; i < n; i++) {
7114
- s = arguments[i];
7115
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7116
- t[p] = s[p];
7117
- }
7118
- return t;
7119
- };
7120
- return eqs_aggr_calculator_assign.apply(this, arguments);
7121
- };
7122
-
7294
+ // CONCATENATED MODULE: ./src/data/data_table_aggr_calculator.ts
7123
7295
 
7124
- var eqs_aggr_calculator_EqAggregatesCalculator = /** @class */ (function () {
7125
- function EqAggregatesCalculator(context) {
7296
+ var data_table_aggr_calculator_DataTableAggregatesCalculator = /** @class */ (function () {
7297
+ function DataTableAggregatesCalculator(context) {
7126
7298
  this.context = context;
7299
+ //stores current totals by level (group) number
7300
+ this.levelsTotals = [];
7301
+ this.prevRow = null;
7127
7302
  this.aggrContainer = new external_easyqueryCore_["EqAggregatesContainer"](context);
7128
7303
  }
7129
- EqAggregatesCalculator.prototype.getAggrContainer = function () {
7304
+ DataTableAggregatesCalculator.prototype.getAggrContainer = function () {
7130
7305
  return this.aggrContainer;
7131
7306
  };
7132
- EqAggregatesCalculator.prototype.calculate = function (options) {
7307
+ DataTableAggregatesCalculator.prototype.initObjects = function () {
7308
+ var _this = this;
7309
+ this.aggrSettings = this.context.getQuery().getAggregationSettings();
7310
+ this.groups = this.aggrSettings.getGroups();
7311
+ this.aggregates = this.aggrSettings.getAggregates();
7312
+ this.aggrColIds = this.aggrSettings.getAggregates().map(function (a) { return a.colId; });
7313
+ this.aggrCols = this.context.resultTable.columns.getItems()
7314
+ .filter(function (col) { return _this.aggrColIds.indexOf(col.id) >= 0; });
7315
+ this.levelsTotals = [];
7316
+ this.prevRow = null;
7317
+ };
7318
+ DataTableAggregatesCalculator.prototype.createColumnAggregatesObject = function () {
7319
+ return {
7320
+ sum: 0,
7321
+ min: Number.MAX_VALUE,
7322
+ max: Number.MIN_VALUE
7323
+ };
7324
+ };
7325
+ DataTableAggregatesCalculator.prototype.calculate = function (options) {
7326
+ this.initObjects();
7133
7327
  this.aggrContainer.clear();
7134
7328
  options = options || {};
7135
7329
  options.maxLevel = options.maxLevel >= 0
7136
7330
  ? options.maxLevel : 0;
7137
- var levelPromises = [];
7138
- var query = this.context.createQuery();
7139
- query.loadFromData(this.context.getQuery().toJSONData());
7140
- var settings = this.context.getQuery().getAggregationSettings();
7141
- var aggregates = settings.getAggregates();
7142
- var aggrColIds = settings.getAggregates().map(function (a) { return a.colId; });
7143
- var aggrCols = query.getColumns()
7144
- .filter(function (col) { return aggrColIds.indexOf(col.id) >= 0; });
7145
- var _loop_1 = function (col) {
7146
- query.changeColumnType(col, external_easyqueryCore_["ExprTag"].AggregateFunction, { funcId: aggregates.filter(function (a) { return a.colId == col.id; })[0].funcId });
7147
- };
7148
- for (var _i = 0, aggrCols_1 = aggrCols; _i < aggrCols_1.length; _i++) {
7149
- var col = aggrCols_1[_i];
7150
- _loop_1(col);
7151
- }
7152
- //get all non-aggregate columns
7153
- var queryCols = query.getColumns()
7154
- .filter(function (c) { return c.expr.tag !== external_easyqueryCore_["ExprTag"].AggregateFunction; });
7155
- for (var _a = 0, queryCols_1 = queryCols; _a < queryCols_1.length; _a++) {
7156
- var col = queryCols_1[_a];
7157
- col.setHidden(true);
7331
+ var levelNumber = this.groups.length + 1; //number of groups plus grand totals
7332
+ for (var levelIndex = 0; levelIndex < levelNumber; levelIndex++) {
7333
+ var levelTotals = { count: 0, columns: {} };
7334
+ this.resetLevelTotals(levelTotals);
7335
+ this.levelsTotals.push(levelTotals);
7158
7336
  }
7159
- if (settings.hasRecordCount()) {
7160
- var col = query.createColumn();
7161
- col.caption = settings.COUNT_FIELD_NAME;
7162
- col['_id'] = settings.COUNT_FIELD_NAME;
7163
- var sqlText = 'COUNT(*)';
7164
- var customSqlExpr = new external_easyqueryCore_["Expression"](col);
7165
- customSqlExpr.tag = external_easyqueryCore_["ExprTag"].CustomSql;
7166
- customSqlExpr.sql = sqlText;
7167
- customSqlExpr.baseAttrId = null;
7168
- col.expr = customSqlExpr;
7169
- query.getColumns().push(col);
7170
- }
7171
- if (settings.hasGrandTotals()) {
7172
- levelPromises.push(this.processLevel({
7173
- query: query,
7174
- level: 0,
7175
- groupName: 'Grand Totals',
7176
- resultObtainedCallback: options.resultObtained,
7177
- errorOccurredCallback: options.errorOccurred
7178
- }));
7179
- }
7180
- var groups = settings.getGroups();
7181
- for (var level = 1; level <= groups.length; level++) {
7182
- var group = groups[level - 1];
7183
- for (var _b = 0, queryCols_2 = queryCols; _b < queryCols_2.length; _b++) {
7184
- var col = queryCols_2[_b];
7185
- col.setHidden(group.columns.indexOf(col.id) < 0);
7337
+ var allRows = this.context.resultTable.getCachedRows();
7338
+ if (allRows.length > 0) {
7339
+ for (var _i = 0, allRows_1 = allRows; _i < allRows_1.length; _i++) {
7340
+ var row = allRows_1[_i];
7341
+ this.processDataRow(row);
7342
+ }
7343
+ //flusing the totals for all group levels
7344
+ for (var levelIndex = 1; levelIndex < levelNumber; levelIndex++) {
7345
+ this.flushLevelTotals(levelIndex);
7346
+ }
7347
+ //flusing the grand totals (if they are turned on)
7348
+ if (this.aggrSettings.hasGrandTotals()) {
7349
+ this.flushLevelTotals(0);
7186
7350
  }
7187
- levelPromises.push(this.processLevel({
7188
- query: query,
7189
- level: level,
7190
- groupName: group.name,
7191
- resultObtainedCallback: options.resultObtained,
7192
- errorOccurredCallback: options.errorOccurred
7193
- }));
7194
7351
  }
7195
- return Promise.all(levelPromises)
7196
- .then(function () { return; })
7197
- .catch(function (error) { return console.error(error); });
7352
+ return Promise.resolve();
7198
7353
  };
7199
- EqAggregatesCalculator.prototype.processLevel = function (options) {
7200
- var _this = this;
7201
- var fetcher = this.context.getServices()
7202
- .getDataFetcher();
7203
- var fetchOptions = {
7204
- aux: true,
7205
- query: options.query
7206
- };
7207
- if (this.context.debugMode) {
7208
- fetchOptions.debug = "Fetching group data. Group: '" + options.groupName + "', level: " + options.level;
7354
+ DataTableAggregatesCalculator.prototype.resetLevelTotals = function (rowTotals) {
7355
+ for (var _i = 0, _a = this.aggrCols; _i < _a.length; _i++) {
7356
+ var aggrCol = _a[_i];
7357
+ rowTotals.columns[aggrCol.id] = this.createColumnAggregatesObject();
7209
7358
  }
7210
- var resultPromise = fetcher.fetchData(fetchOptions)
7211
- .then(function (result) {
7212
- var dataTable = new easy_data_table_EasyDataTable({
7213
- elasticChunks: true
7214
- });
7215
- var resultSet = result.resultSet;
7216
- for (var _i = 0, _a = resultSet.cols; _i < _a.length; _i++) {
7217
- var col = _a[_i];
7218
- dataTable.columns.add(col);
7219
- }
7220
- for (var _b = 0, _c = resultSet.rows; _b < _c.length; _b++) {
7221
- var row = _c[_b];
7222
- dataTable.addRow(row);
7223
- }
7224
- var levelData = _this.buildLevelData(options.level, dataTable);
7225
- _this.aggrContainer.setAggregates(options.level, levelData);
7226
- if (options.resultObtainedCallback) {
7227
- options.resultObtainedCallback(result, options.level);
7359
+ rowTotals.count = 0;
7360
+ };
7361
+ DataTableAggregatesCalculator.prototype.processDataRow = function (row) {
7362
+ var levelIndexChanged = this.checkLevelChange(row);
7363
+ if (levelIndexChanged >= 0) {
7364
+ for (var levelIndex_1 = levelIndexChanged; levelIndex_1 < this.levelsTotals.length; levelIndex_1++) {
7365
+ this.flushLevelTotals(levelIndex_1);
7228
7366
  }
7229
- })
7230
- .catch(function (error) {
7231
- if (options.errorOccurredCallback) {
7232
- options.errorOccurredCallback(eqs_aggr_calculator_assign({}, error, { level: options.level }));
7367
+ }
7368
+ if (this.aggrSettings.hasGrandTotals()) {
7369
+ this.updateLevelTotals(0, row);
7370
+ }
7371
+ var levelIndex = 1;
7372
+ for (var _i = 0, _a = this.groups; _i < _a.length; _i++) {
7373
+ var group = _a[_i];
7374
+ this.updateLevelTotals(levelIndex, row);
7375
+ levelIndex++;
7376
+ }
7377
+ this.prevRow = row;
7378
+ };
7379
+ /** Checks if the values in group columns were changed
7380
+ and return the level number they were */
7381
+ DataTableAggregatesCalculator.prototype.checkLevelChange = function (row) {
7382
+ if (this.prevRow == null)
7383
+ return -1;
7384
+ for (var groupIndex = 0; groupIndex < this.groups.length; groupIndex++) {
7385
+ var group = this.groups[groupIndex];
7386
+ for (var _i = 0, _a = group.columns; _i < _a.length; _i++) {
7387
+ var colId = _a[_i];
7388
+ var value = row.getValue(colId);
7389
+ var prevValue = this.prevRow.getValue(colId);
7390
+ if (!this.aggrSettings.compareValues(prevValue, value)) {
7391
+ return groupIndex + 1;
7392
+ }
7233
7393
  }
7234
- });
7235
- return resultPromise;
7394
+ }
7395
+ return -1;
7236
7396
  };
7237
- EqAggregatesCalculator.prototype.buildLevelData = function (level, dataTable) {
7238
- var aggrSettings = this.context.getQuery().getAggregationSettings();
7239
- var keyColumns = level > 0
7240
- ? aggrSettings.getGroups()[level - 1].columns
7241
- : [];
7242
- var valueColumns = aggrSettings.getAggregates().map(function (a) { return a.colId; });
7243
- if (aggrSettings.hasRecordCount()) {
7244
- valueColumns.push(aggrSettings.COUNT_FIELD_NAME);
7397
+ /** Saves the current values in levelData for the specified level to AggregateContainer
7398
+ and then reset the data row for that level
7399
+ */
7400
+ DataTableAggregatesCalculator.prototype.flushLevelTotals = function (levelIndex) {
7401
+ var levelTotals = this.levelsTotals[levelIndex];
7402
+ var group = levelIndex > 0 ? this.groups[levelIndex - 1] : null;
7403
+ var groupKey = this.aggrSettings.buildGroupKey(group, this.prevRow);
7404
+ var groupTotals = {};
7405
+ for (var _i = 0, _a = this.aggregates; _i < _a.length; _i++) {
7406
+ var aggr = _a[_i];
7407
+ var columnTotals = levelTotals.columns[aggr.colId];
7408
+ switch (aggr.funcId) {
7409
+ case "SUM":
7410
+ groupTotals[aggr.colId] = columnTotals.sum;
7411
+ break;
7412
+ case "AVG":
7413
+ groupTotals[aggr.colId] = columnTotals.sum / levelTotals.count;
7414
+ break;
7415
+ case "COUNT":
7416
+ case "CNTDST":
7417
+ groupTotals[aggr.colId] = levelTotals.count;
7418
+ break;
7419
+ case "MIN":
7420
+ groupTotals[aggr.colId] = columnTotals.min;
7421
+ break;
7422
+ case "MAX":
7423
+ groupTotals[aggr.colId] = columnTotals.max;
7424
+ break;
7425
+ }
7245
7426
  }
7246
- var data = new Map();
7247
- for (var _i = 0, _a = dataTable.getCachedRows(); _i < _a.length; _i++) {
7248
- var row = _a[_i];
7249
- var key = {};
7250
- var value = {};
7251
- for (var _b = 0, keyColumns_1 = keyColumns; _b < keyColumns_1.length; _b++) {
7252
- var keyCol = keyColumns_1[_b];
7253
- var colIdx = dataTable.columns.getIndex(keyCol);
7254
- if (colIdx >= 0) {
7255
- var keyVal = row.getValue(keyCol);
7256
- if (!aggrSettings.caseSensitiveGroups && typeof (keyVal) === 'string') {
7257
- keyVal = keyVal.toLowerCase();
7258
- }
7259
- key[keyCol] = keyVal;
7260
- }
7427
+ if (this.aggrSettings.hasRecordCount()) {
7428
+ groupTotals[this.aggrSettings.COUNT_FIELD_NAME] = levelTotals.count;
7429
+ }
7430
+ this.aggrContainer.updateAggregateData(levelIndex, groupKey, groupTotals);
7431
+ this.resetLevelTotals(levelTotals);
7432
+ };
7433
+ /** Updates the totals by values in the current DataRow
7434
+ * and according to the specified aggregate
7435
+ */
7436
+ DataTableAggregatesCalculator.prototype.updateLevelTotals = function (levelIndex, row) {
7437
+ var levelTotals = this.levelsTotals[levelIndex];
7438
+ levelTotals.count += 1;
7439
+ for (var _i = 0, _a = this.aggregates; _i < _a.length; _i++) {
7440
+ var aggr = _a[_i];
7441
+ var value = row.getValue(aggr.colId);
7442
+ var columnTotals = levelTotals.columns[aggr.colId];
7443
+ columnTotals.sum += value;
7444
+ if (value < columnTotals.min) {
7445
+ columnTotals.min = value;
7261
7446
  }
7262
- for (var _c = 0, valueColumns_1 = valueColumns; _c < valueColumns_1.length; _c++) {
7263
- var valueCol = valueColumns_1[_c];
7264
- value[valueCol] = row.getValue(valueCol);
7447
+ if (value > columnTotals.max) {
7448
+ columnTotals.max = value;
7265
7449
  }
7266
- data.set(JSON.stringify(key), value);
7267
7450
  }
7268
- return data;
7269
7451
  };
7270
- return EqAggregatesCalculator;
7452
+ DataTableAggregatesCalculator.prototype.needRecalculation = function () {
7453
+ return true;
7454
+ };
7455
+ DataTableAggregatesCalculator.prototype.reset = function () {
7456
+ };
7457
+ return DataTableAggregatesCalculator;
7271
7458
  }());
7272
7459
 
7273
7460
 
@@ -7293,7 +7480,7 @@ external_easyqueryCore_["EqContext"].prototype.useEnterprise = function (keyOrIn
7293
7480
  services.registerDataModelResolver(function (context) { return new model_ex_DataModelEx(); });
7294
7481
  services.registerQueryResolver(function (context) { return new query_ex_QueryEx(context.getModel()); });
7295
7482
  services.registerQueryStorageResolver(function (context) { return new EqServerQueryStorage(context); });
7296
- services.registerAggregatesCalculator(function (context) { return new eqs_aggr_calculator_EqAggregatesCalculator(context); });
7483
+ services.registerAggregatesCalculator(function (context) { return new data_table_aggr_calculator_DataTableAggregatesCalculator(context); });
7297
7484
  if (lcv.__kt === 2) {
7298
7485
  console.warn('EasyQuery.JS is working in the TRIAL MODE!\n'
7299
7486
  + 'Please order a license (https://korzh.com/eq) to get a proper product key.');
@@ -7343,7 +7530,7 @@ function showLCDialog() {
7343
7530
  break;
7344
7531
  default:
7345
7532
  title = "Invalid key for EasyQuery!";
7346
- body = "The EasyQuery product key is either invalid or was issued for a different version of the library.\n The version you are using now is 7.1,\n\tso please <a href=\"https://korzh.com/account\">login to your account</a> to get a proper key for version 7.1.";
7533
+ body = "The EasyQuery product key is either invalid or was issued for a different version of the library.\n The version you are using now is 7.2,\n\tso please <a href=\"https://korzh.com/account\">login to your account</a> to get a proper key for version 7.2.";
7347
7534
  buttonTitle = 'Get key';
7348
7535
  buttonUrl = 'https://korzh.com/account';
7349
7536
  break;
@@ -7422,13 +7609,181 @@ function hideTrialWM() {
7422
7609
  }
7423
7610
  }
7424
7611
 
7612
+ // CONCATENATED MODULE: ./src/data/eqs_aggr_calculator.ts
7613
+ var eqs_aggr_calculator_assign = (undefined && undefined.__assign) || function () {
7614
+ eqs_aggr_calculator_assign = Object.assign || function(t) {
7615
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
7616
+ s = arguments[i];
7617
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7618
+ t[p] = s[p];
7619
+ }
7620
+ return t;
7621
+ };
7622
+ return eqs_aggr_calculator_assign.apply(this, arguments);
7623
+ };
7624
+
7625
+
7626
+ var eqs_aggr_calculator_EqServerAggregatesCalculator = /** @class */ (function () {
7627
+ function EqServerAggregatesCalculator(context) {
7628
+ this.context = context;
7629
+ this._needRecalculation = true;
7630
+ this.aggrContainer = new external_easyqueryCore_["EqAggregatesContainer"](context);
7631
+ }
7632
+ EqServerAggregatesCalculator.prototype.getAggrContainer = function () {
7633
+ return this.aggrContainer;
7634
+ };
7635
+ EqServerAggregatesCalculator.prototype.calculate = function (options) {
7636
+ this._needRecalculation = false;
7637
+ this.aggrContainer.clear();
7638
+ options = options || {};
7639
+ options.maxLevel = options.maxLevel >= 0
7640
+ ? options.maxLevel : 0;
7641
+ var levelPromises = [];
7642
+ var query = this.context.createQuery();
7643
+ query.loadFromData(this.context.getQuery().toJSONData());
7644
+ var settings = this.context.getQuery().getAggregationSettings();
7645
+ var aggregates = settings.getAggregates();
7646
+ var aggrColIds = settings.getAggregates().map(function (a) { return a.colId; });
7647
+ var aggrCols = query.getColumns()
7648
+ .filter(function (col) { return aggrColIds.indexOf(col.id) >= 0; });
7649
+ var _loop_1 = function (col) {
7650
+ query.changeColumnType(col, external_easyqueryCore_["ExprTag"].AggregateFunction, { funcId: aggregates.filter(function (a) { return a.colId == col.id; })[0].funcId });
7651
+ };
7652
+ for (var _i = 0, aggrCols_1 = aggrCols; _i < aggrCols_1.length; _i++) {
7653
+ var col = aggrCols_1[_i];
7654
+ _loop_1(col);
7655
+ }
7656
+ //get all non-aggregate columns
7657
+ var queryCols = query.getColumns()
7658
+ .filter(function (c) { return c.expr.tag !== external_easyqueryCore_["ExprTag"].AggregateFunction; });
7659
+ for (var _a = 0, queryCols_1 = queryCols; _a < queryCols_1.length; _a++) {
7660
+ var col = queryCols_1[_a];
7661
+ col.setHidden(true);
7662
+ }
7663
+ if (settings.hasRecordCount()) {
7664
+ var col = query.createColumn();
7665
+ col.caption = settings.COUNT_FIELD_NAME;
7666
+ col['_id'] = settings.COUNT_FIELD_NAME;
7667
+ var sqlText = 'COUNT(*)';
7668
+ var customSqlExpr = new external_easyqueryCore_["Expression"](col);
7669
+ customSqlExpr.tag = external_easyqueryCore_["ExprTag"].CustomSql;
7670
+ customSqlExpr.sql = sqlText;
7671
+ customSqlExpr.baseAttrId = null;
7672
+ col.expr = customSqlExpr;
7673
+ query.getColumns().push(col);
7674
+ }
7675
+ if (settings.hasGrandTotals()) {
7676
+ levelPromises.push(this.processLevel({
7677
+ query: query,
7678
+ level: 0,
7679
+ groupName: 'Grand Totals',
7680
+ resultObtainedCallback: options.resultObtained,
7681
+ errorOccurredCallback: options.errorOccurred
7682
+ }));
7683
+ }
7684
+ var groups = settings.getGroups();
7685
+ for (var level = 1; level <= groups.length; level++) {
7686
+ var group = groups[level - 1];
7687
+ for (var _b = 0, queryCols_2 = queryCols; _b < queryCols_2.length; _b++) {
7688
+ var col = queryCols_2[_b];
7689
+ col.setHidden(group.columns.indexOf(col.id) < 0);
7690
+ }
7691
+ levelPromises.push(this.processLevel({
7692
+ query: query,
7693
+ level: level,
7694
+ groupName: group.name,
7695
+ resultObtainedCallback: options.resultObtained,
7696
+ errorOccurredCallback: options.errorOccurred
7697
+ }));
7698
+ }
7699
+ return Promise.all(levelPromises)
7700
+ .then(function () {
7701
+ return;
7702
+ })
7703
+ .catch(function (error) { return console.error(error); });
7704
+ };
7705
+ EqServerAggregatesCalculator.prototype.processLevel = function (options) {
7706
+ var _this = this;
7707
+ var fetcher = this.context.getServices()
7708
+ .getDataFetcher();
7709
+ var fetchOptions = {
7710
+ aux: true,
7711
+ query: options.query
7712
+ };
7713
+ if (this.context.debugMode) {
7714
+ fetchOptions.debug = "Fetching group data. Group: '" + options.groupName + "', level: " + options.level;
7715
+ }
7716
+ var resultPromise = fetcher.fetchData(fetchOptions)
7717
+ .then(function (result) {
7718
+ var dataTable = new easy_data_table_EasyDataTable({
7719
+ elasticChunks: true
7720
+ });
7721
+ var resultSet = result.resultSet;
7722
+ for (var _i = 0, _a = resultSet.cols; _i < _a.length; _i++) {
7723
+ var col = _a[_i];
7724
+ dataTable.columns.add(col);
7725
+ }
7726
+ for (var _b = 0, _c = resultSet.rows; _b < _c.length; _b++) {
7727
+ var row = _c[_b];
7728
+ dataTable.addRow(row);
7729
+ }
7730
+ var levelData = _this.buildLevelData(options.level, dataTable);
7731
+ _this.aggrContainer.setAggregateData(options.level, levelData);
7732
+ if (options.resultObtainedCallback) {
7733
+ options.resultObtainedCallback(result, options.level);
7734
+ }
7735
+ })
7736
+ .catch(function (error) {
7737
+ if (options.errorOccurredCallback) {
7738
+ options.errorOccurredCallback(eqs_aggr_calculator_assign(eqs_aggr_calculator_assign({}, error), { level: options.level }));
7739
+ }
7740
+ });
7741
+ return resultPromise;
7742
+ };
7743
+ EqServerAggregatesCalculator.prototype.buildLevelData = function (level, dataTable) {
7744
+ var aggrSettings = this.context.getQuery().getAggregationSettings();
7745
+ var keyColumns = level > 0
7746
+ ? aggrSettings.getGroups()[level - 1].columns
7747
+ : [];
7748
+ var valueColumns = aggrSettings.getAggregates().map(function (a) { return a.colId; });
7749
+ if (aggrSettings.hasRecordCount()) {
7750
+ valueColumns.push(aggrSettings.COUNT_FIELD_NAME);
7751
+ }
7752
+ var data = new Map();
7753
+ for (var _i = 0, _a = dataTable.getCachedRows(); _i < _a.length; _i++) {
7754
+ var row = _a[_i];
7755
+ var key = {};
7756
+ var value = {};
7757
+ for (var _b = 0, keyColumns_1 = keyColumns; _b < keyColumns_1.length; _b++) {
7758
+ var keyCol = keyColumns_1[_b];
7759
+ var colIdx = dataTable.columns.getIndex(keyCol);
7760
+ if (colIdx >= 0) {
7761
+ var keyVal = row.getValue(keyCol);
7762
+ if (!aggrSettings.caseSensitiveGroups && typeof (keyVal) === 'string') {
7763
+ keyVal = keyVal.toLowerCase();
7764
+ }
7765
+ key[keyCol] = keyVal;
7766
+ }
7767
+ }
7768
+ for (var _c = 0, valueColumns_1 = valueColumns; _c < valueColumns_1.length; _c++) {
7769
+ var valueCol = valueColumns_1[_c];
7770
+ value[valueCol] = row.getValue(valueCol);
7771
+ }
7772
+ data.set(JSON.stringify(key), value);
7773
+ }
7774
+ return data;
7775
+ };
7776
+ EqServerAggregatesCalculator.prototype.needRecalculation = function () {
7777
+ return this._needRecalculation;
7778
+ };
7779
+ EqServerAggregatesCalculator.prototype.reset = function () {
7780
+ this._needRecalculation = true;
7781
+ };
7782
+ return EqServerAggregatesCalculator;
7783
+ }());
7784
+
7785
+
7425
7786
  // CONCATENATED MODULE: ./src/public_api.ts
7426
- /* concated harmony reexport EqAggregatesCalculator */__webpack_require__.d(__webpack_exports__, "EqAggregatesCalculator", function() { return eqs_aggr_calculator_EqAggregatesCalculator; });
7427
- /* concated harmony reexport QueryEx */__webpack_require__.d(__webpack_exports__, "QueryEx", function() { return query_ex_QueryEx; });
7428
- /* concated harmony reexport QueryColumnEx */__webpack_require__.d(__webpack_exports__, "QueryColumnEx", function() { return query_column_ex_QueryColumnEx; });
7429
- /* concated harmony reexport ConditionEx */__webpack_require__.d(__webpack_exports__, "ConditionEx", function() { return condition_ex_ConditionEx; });
7430
- /* concated harmony reexport DataModelEx */__webpack_require__.d(__webpack_exports__, "DataModelEx", function() { return model_ex_DataModelEx; });
7431
- /* concated harmony reexport EqServerQueryStorage */__webpack_require__.d(__webpack_exports__, "EqServerQueryStorage", function() { return EqServerQueryStorage; });
7432
7787
 
7433
7788
 
7434
7789