@easyquery/enterprise 7.1.3-beta01 → 7.2.0-rc03

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,12 +180,21 @@ 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
 
188
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/core/dist/lib/types/data_type.js
197
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/types/data_type.js
189
198
  /** Represents the common types of the data. */
190
199
  var DataType;
191
200
  (function (DataType) {
@@ -232,7 +241,7 @@ var DataType;
232
241
  DataType[DataType["Geography"] = 19] = "Geography";
233
242
  })(DataType || (DataType = {}));
234
243
  //# sourceMappingURL=data_type.js.map
235
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/core/dist/lib/types/entity_attr_kind.js
244
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/types/entity_attr_kind.js
236
245
  var EntityAttrKind;
237
246
  (function (EntityAttrKind) {
238
247
  EntityAttrKind[EntityAttrKind["Data"] = 0] = "Data";
@@ -240,7 +249,7 @@ var EntityAttrKind;
240
249
  EntityAttrKind[EntityAttrKind["Lookup"] = 2] = "Lookup";
241
250
  })(EntityAttrKind || (EntityAttrKind = {}));
242
251
  //# sourceMappingURL=entity_attr_kind.js.map
243
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/core/dist/lib/types/editor_tag.js
252
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/types/editor_tag.js
244
253
  var EditorTag = {
245
254
  /** Unknown tag value */
246
255
  Unknown: "Unknown",
@@ -256,7 +265,7 @@ var EditorTag = {
256
265
  File: "FILE"
257
266
  };
258
267
  //# sourceMappingURL=editor_tag.js.map
259
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/core/dist/lib/http/http_method.js
268
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/http/http_method.js
260
269
  var HttpMethod;
261
270
  (function (HttpMethod) {
262
271
  HttpMethod["Trace"] = "TRACE";
@@ -267,7 +276,7 @@ var HttpMethod;
267
276
  HttpMethod["Delete"] = "DELETE";
268
277
  })(HttpMethod || (HttpMethod = {}));
269
278
  //# sourceMappingURL=http_method.js.map
270
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/core/dist/lib/http/http_request.js
279
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/http/http_request.js
271
280
  var HttpRequest = /** @class */ (function () {
272
281
  function HttpRequest(xhr, descriptor) {
273
282
  this.xhr = xhr;
@@ -326,7 +335,7 @@ var HttpRequest = /** @class */ (function () {
326
335
  }());
327
336
 
328
337
  //# sourceMappingURL=http_request.js.map
329
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/core/dist/lib/utils/string_utils.js
338
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/utils/string_utils.js
330
339
  function repeatString(str, times) {
331
340
  var result = "";
332
341
  for (var i = 0; i < times; i++) {
@@ -359,7 +368,7 @@ function combinePath(path1, path2) {
359
368
  return result;
360
369
  }
361
370
  //# sourceMappingURL=string_utils.js.map
362
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/core/dist/lib/i18n/i18n.js
371
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/i18n/i18n.js
363
372
 
364
373
 
365
374
  /**
@@ -828,14 +837,14 @@ var i18n_i18n;
828
837
  }
829
838
  })(i18n_i18n || (i18n_i18n = {}));
830
839
  //# sourceMappingURL=i18n.js.map
831
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/core/dist/lib/utils/utils.js
840
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/utils/utils.js
832
841
 
833
842
 
834
843
 
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]);
@@ -1345,7 +1358,7 @@ var utils_utils;
1345
1358
  utils.numberToStr = numberToStr;
1346
1359
  })(utils_utils || (utils_utils = {}));
1347
1360
  //# sourceMappingURL=utils.js.map
1348
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/core/dist/lib/http/http_action_result.js
1361
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/http/http_action_result.js
1349
1362
  var HttpActionResult = /** @class */ (function () {
1350
1363
  function HttpActionResult(request, promise) {
1351
1364
  this.request = request;
@@ -1370,7 +1383,7 @@ var HttpActionResult = /** @class */ (function () {
1370
1383
  }());
1371
1384
 
1372
1385
  //# sourceMappingURL=http_action_result.js.map
1373
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/core/dist/lib/http/http_client.js
1386
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/http/http_client.js
1374
1387
  var __extends = (undefined && undefined.__extends) || (function () {
1375
1388
  var extendStatics = function (d, b) {
1376
1389
  extendStatics = Object.setPrototypeOf ||
@@ -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
  };
@@ -1470,7 +1483,7 @@ var http_client_HttpClient = /** @class */ (function () {
1470
1483
  }
1471
1484
  var responseContentType = xhr.getResponseHeader('Content-Type') || '';
1472
1485
  var status = xhr.status;
1473
- if (status >= 300 || status < 200) {
1486
+ if (status >= 400) {
1474
1487
  var rtPromise = (xhr.responseType === 'arraybuffer'
1475
1488
  || xhr.responseType === 'blob')
1476
1489
  ? HttpClient.decodeArrayBuffer(xhr.response)
@@ -1512,7 +1525,7 @@ var http_client_HttpClient = /** @class */ (function () {
1512
1525
  }());
1513
1526
 
1514
1527
  //# sourceMappingURL=http_client.js.map
1515
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/core/dist/lib/meta/meta_entity.js
1528
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/meta/meta_entity.js
1516
1529
 
1517
1530
 
1518
1531
 
@@ -1522,6 +1535,8 @@ var http_client_HttpClient = /** @class */ (function () {
1522
1535
  var MetaEntity = /** @class */ (function () {
1523
1536
  /** The default constructor. */
1524
1537
  function MetaEntity(parent) {
1538
+ /** Returns false if this entity is read-only */
1539
+ this.isEditable = true;
1525
1540
  this.name = "";
1526
1541
  this.caption = "";
1527
1542
  this.description = "";
@@ -1541,6 +1556,8 @@ var MetaEntity = /** @class */ (function () {
1541
1556
  this.captionPlural = dto.namePlur;
1542
1557
  this.caption = dto.name;
1543
1558
  this.description = dto.desc;
1559
+ if (typeof (dto.ied) !== 'undefined')
1560
+ this.isEditable = dto.ied;
1544
1561
  this.subEntities = new Array();
1545
1562
  if (dto.ents) {
1546
1563
  for (var i = 0; i < dto.ents.length; i++) {
@@ -1584,6 +1601,12 @@ var MetaEntity = /** @class */ (function () {
1584
1601
  };
1585
1602
  internalProcessEntity(this);
1586
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
+ };
1587
1610
  return MetaEntity;
1588
1611
  }());
1589
1612
 
@@ -1644,7 +1667,7 @@ var meta_entity_MetaEntityAttr = /** @class */ (function () {
1644
1667
  }());
1645
1668
 
1646
1669
  //# sourceMappingURL=meta_entity.js.map
1647
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/core/dist/lib/meta/value_editor.js
1670
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/meta/value_editor.js
1648
1671
 
1649
1672
 
1650
1673
  /**
@@ -1710,7 +1733,7 @@ var value_editor_ValueEditor = /** @class */ (function () {
1710
1733
  }());
1711
1734
 
1712
1735
  //# sourceMappingURL=value_editor.js.map
1713
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/core/dist/lib/meta/meta_data.js
1736
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/meta/meta_data.js
1714
1737
 
1715
1738
 
1716
1739
 
@@ -2202,9 +2225,9 @@ var meta_data_MetaData = /** @class */ (function () {
2202
2225
  }());
2203
2226
 
2204
2227
  //# sourceMappingURL=meta_data.js.map
2205
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/core/dist/lib/data/aggr_calculator.js
2206
- var aggr_calculator_assign = (undefined && undefined.__assign) || function () {
2207
- 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) {
2208
2231
  for (var s, i = 1, n = arguments.length; i < n; i++) {
2209
2232
  s = arguments[i];
2210
2233
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
@@ -2212,7 +2235,7 @@ var aggr_calculator_assign = (undefined && undefined.__assign) || function () {
2212
2235
  }
2213
2236
  return t;
2214
2237
  };
2215
- return aggr_calculator_assign.apply(this, arguments);
2238
+ return aggr_settings_assign.apply(this, arguments);
2216
2239
  };
2217
2240
  /**
2218
2241
  * Defines aggregations settings for the current context.
@@ -2225,16 +2248,32 @@ var AggregationSettings = /** @class */ (function () {
2225
2248
  this.groups = [];
2226
2249
  this.useGrandTotals = false;
2227
2250
  this.useRecordCount = false;
2228
- this.caseSensitiveGroups = false;
2251
+ this._caseSensitiveGroups = false;
2229
2252
  this.COUNT_FIELD_NAME = 'GRPRECCNT';
2230
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
+ };
2231
2270
  AggregationSettings.prototype.addGroup = function (settings) {
2232
2271
  var cols = settings.columns || this.colStore.getColumnIds(settings.from, settings.to);
2233
2272
  if (!this.colStore.validateColumns(cols))
2234
2273
  throw "Invalid columns: " + cols;
2235
2274
  if (this.hasColumnsInUse(cols))
2236
2275
  throw "Can't add same columns to different groups/aggregates";
2237
- this.groups.push(aggr_calculator_assign({ columns: cols, aggregates: null }, settings));
2276
+ this.groups.push(aggr_settings_assign({ columns: cols }, settings));
2238
2277
  return this;
2239
2278
  };
2240
2279
  AggregationSettings.prototype.addAggregateColumn = function (colIndexOrId, funcId) {
@@ -2259,7 +2298,7 @@ var AggregationSettings = /** @class */ (function () {
2259
2298
  var cols = [];
2260
2299
  var mappedGrops = this.groups.map(function (grp) {
2261
2300
  cols = cols.concat(grp.columns);
2262
- 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) });
2263
2302
  });
2264
2303
  return mappedGrops;
2265
2304
  };
@@ -2351,11 +2390,36 @@ var AggregationSettings = /** @class */ (function () {
2351
2390
  }
2352
2391
  }
2353
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
+ };
2354
2418
  return AggregationSettings;
2355
2419
  }());
2356
2420
 
2357
- //# sourceMappingURL=aggr_calculator.js.map
2358
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/core/dist/lib/data/data_column.js
2421
+ //# sourceMappingURL=aggr_settings.js.map
2422
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/data/data_column.js
2359
2423
 
2360
2424
 
2361
2425
  var ColumnAlignment;
@@ -2381,6 +2445,8 @@ var data_column_DataColumn = /** @class */ (function () {
2381
2445
  this.displayFormat = desc.dfmt;
2382
2446
  this.groupFooterColumnTemplate = desc.gfct;
2383
2447
  this.style = desc.style || {};
2448
+ this.description = desc.description;
2449
+ this.calculatedWidth = 0;
2384
2450
  }
2385
2451
  return DataColumn;
2386
2452
  }());
@@ -2420,9 +2486,10 @@ var data_column_DataColumnList = /** @class */ (function () {
2420
2486
  .map(function (col, index) { return index; });
2421
2487
  };
2422
2488
  DataColumnList.prototype.put = function (index, col) {
2423
- //!!!!!!!!!check on "out of index"
2424
- this.items[index] = col;
2425
- this.updateDateColumnIdx();
2489
+ if (index >= 0 && index < this.count) {
2490
+ this.items[index] = col;
2491
+ this.updateDateColumnIdx();
2492
+ }
2426
2493
  };
2427
2494
  DataColumnList.prototype.move = function (col, newIndex) {
2428
2495
  var oldIndex = this.items.indexOf(col);
@@ -2432,8 +2499,12 @@ var data_column_DataColumnList = /** @class */ (function () {
2432
2499
  }
2433
2500
  };
2434
2501
  DataColumnList.prototype.get = function (index) {
2435
- //!!!!!!!!!check on "out of index"
2436
- return this.items[index];
2502
+ if (index >= 0 && index < this.count) {
2503
+ return this.items[index];
2504
+ }
2505
+ else {
2506
+ return null;
2507
+ }
2437
2508
  };
2438
2509
  DataColumnList.prototype.getIndex = function (id) {
2439
2510
  return this.mapper[id];
@@ -2462,7 +2533,7 @@ var data_column_DataColumnList = /** @class */ (function () {
2462
2533
  }());
2463
2534
 
2464
2535
  //# sourceMappingURL=data_column.js.map
2465
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/core/dist/lib/data/data_row.js
2536
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/data/data_row.js
2466
2537
  var DataRow = /** @class */ (function () {
2467
2538
  function DataRow(columns, values) {
2468
2539
  this.columns = columns;
@@ -2508,7 +2579,7 @@ var DataRow = /** @class */ (function () {
2508
2579
  }());
2509
2580
 
2510
2581
  //# sourceMappingURL=data_row.js.map
2511
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/core/dist/lib/data/easy_data_table.js
2582
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/data/easy_data_table.js
2512
2583
 
2513
2584
 
2514
2585
 
@@ -2517,16 +2588,23 @@ var easy_data_table_EasyDataTable = /** @class */ (function () {
2517
2588
  function EasyDataTable(options) {
2518
2589
  this._chunkSize = 1000;
2519
2590
  this._elasticChunks = false;
2520
- // object keeps number keys sorted
2521
- this.chunkMap = {};
2591
+ this.cachedRows = [];
2522
2592
  this.total = 0;
2523
2593
  this.loader = null;
2524
2594
  this.needTotal = true;
2595
+ this.isInMemory = false;
2525
2596
  options = options || {};
2526
2597
  this._chunkSize = options.chunkSize || this._chunkSize;
2527
2598
  this._elasticChunks = options.elasticChunks || this._elasticChunks;
2528
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
+ }
2529
2606
  this._columns = new data_column_DataColumnList();
2607
+ this.onUpdate = options.onUpdate;
2530
2608
  if (options.columns) {
2531
2609
  for (var _i = 0, _a = options.columns; _i < _a.length; _i++) {
2532
2610
  var colDesc = _a[_i];
@@ -2557,7 +2635,7 @@ var easy_data_table_EasyDataTable = /** @class */ (function () {
2557
2635
  this._chunkSize = value;
2558
2636
  this.total = 0;
2559
2637
  this.needTotal = !this.elasticChunks;
2560
- this.chunkMap = {};
2638
+ this.cachedRows = [];
2561
2639
  },
2562
2640
  enumerable: true,
2563
2641
  configurable: true
@@ -2570,7 +2648,7 @@ var easy_data_table_EasyDataTable = /** @class */ (function () {
2570
2648
  this._elasticChunks = value;
2571
2649
  this.total = 0;
2572
2650
  this.needTotal = !this.elasticChunks;
2573
- this.chunkMap = {};
2651
+ this.cachedRows = [];
2574
2652
  },
2575
2653
  enumerable: true,
2576
2654
  configurable: true
@@ -2598,22 +2676,12 @@ var easy_data_table_EasyDataTable = /** @class */ (function () {
2598
2676
  endIndex = this.total;
2599
2677
  }
2600
2678
  }
2601
- var lbChunk = Math.trunc(fromIndex / this._chunkSize);
2602
- var ubChunk = Math.trunc((endIndex - 1) / this._chunkSize);
2603
- var allChunksCached = true;
2604
- for (var i = lbChunk; i <= ubChunk; i++) {
2605
- if (!this.chunkMap[i]) {
2606
- allChunksCached = false;
2607
- break;
2608
- }
2679
+ if (this.isInMemory && endIndex > this.cachedRows.length) {
2680
+ endIndex = this.cachedRows.length;
2609
2681
  }
2682
+ var allChunksCached = endIndex <= this.cachedRows.length;
2610
2683
  if (allChunksCached) {
2611
- var resultArr = [];
2612
- for (var i = lbChunk; i <= ubChunk; i++) {
2613
- resultArr = resultArr.concat(this.chunkMap[i].rows);
2614
- }
2615
- var firstChunkOffset = this.chunkMap[lbChunk].offset;
2616
- return Promise.resolve(resultArr.slice(fromIndex - firstChunkOffset, endIndex - firstChunkOffset));
2684
+ return Promise.resolve(this.cachedRows.slice(fromIndex, endIndex));
2617
2685
  }
2618
2686
  //if loader is not defined
2619
2687
  if (!this.loader) {
@@ -2624,53 +2692,34 @@ var easy_data_table_EasyDataTable = /** @class */ (function () {
2624
2692
  if (this.needTotal) {
2625
2693
  this.needTotal = false;
2626
2694
  }
2627
- var limit = this._chunkSize * (ubChunk - lbChunk + 1);
2628
- if (this.elasticChunks)
2629
- limit++;
2630
- return this.loader.loadChunk({
2631
- 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,
2632
2702
  limit: limit,
2633
2703
  needTotal: needTotal
2634
2704
  })
2635
2705
  .then(function (result) {
2636
- var chunks = result.table.getCachedChunks();
2637
2706
  if (needTotal) {
2638
2707
  _this.total = result.total;
2639
- if (endIndex > _this.total) {
2640
- endIndex = _this.total;
2641
- }
2642
2708
  }
2643
- var index = lbChunk;
2644
- for (var _i = 0, chunks_1 = chunks; _i < chunks_1.length; _i++) {
2645
- var chunk = chunks_1[_i];
2646
- _this.chunkMap[index] = {
2647
- offset: index * _this._chunkSize,
2648
- rows: chunk.rows
2649
- };
2650
- index++;
2709
+ Array.prototype.push.apply(_this.cachedRows, result.table.getCachedRows());
2710
+ if (endIndex > _this.cachedRows.length) {
2711
+ endIndex = _this.cachedRows.length;
2651
2712
  }
2652
2713
  if (_this.elasticChunks) {
2653
2714
  var count_1 = result.table.getCachedCount();
2654
- if (count_1 > 0) {
2655
- var chunk = _this.chunkMap[index - 1];
2656
- if (count_1 === limit) {
2657
- chunk.rows.splice(chunk.rows.length - 1, 1);
2658
- if (chunk.rows.length == 0) {
2659
- delete _this.chunkMap[index - 1];
2660
- }
2661
- }
2662
- if (count_1 < limit) {
2663
- _this.total = _this.getCachedCount();
2664
- }
2715
+ if (count_1 < limit) {
2716
+ _this.total = _this.cachedRows.length;
2665
2717
  }
2666
2718
  }
2667
- var resultArr = [];
2668
- for (var i = lbChunk; i <= ubChunk; i++) {
2669
- resultArr = resultArr.concat(_this.chunkMap[i].rows);
2670
- }
2671
- var firstChunkOffset = _this.chunkMap[lbChunk].offset;
2672
- return resultArr.slice(fromIndex - firstChunkOffset, endIndex - firstChunkOffset);
2719
+ _this.fireUpdated();
2720
+ return _this.cachedRows.slice(fromIndex, endIndex);
2673
2721
  });
2722
+ return resultPromise;
2674
2723
  };
2675
2724
  EasyDataTable.prototype.getRow = function (index) {
2676
2725
  return this.getRows({ offset: index, limit: 1 })
@@ -2682,16 +2731,16 @@ var easy_data_table_EasyDataTable = /** @class */ (function () {
2682
2731
  EasyDataTable.prototype.setTotal = function (total) {
2683
2732
  this.total = total;
2684
2733
  this.needTotal = false;
2685
- this.chunkMap = {};
2686
2734
  };
2687
2735
  EasyDataTable.prototype.getCachedCount = function () {
2688
- return this.getCachedRows().length;
2736
+ return this.cachedRows.length;
2689
2737
  };
2690
2738
  EasyDataTable.prototype.clear = function () {
2691
2739
  this.columns.clear();
2692
- this.chunkMap = {};
2740
+ this.cachedRows = [];
2693
2741
  this.total = 0;
2694
2742
  this.needTotal = !this._elasticChunks;
2743
+ this.fireUpdated();
2695
2744
  };
2696
2745
  EasyDataTable.prototype.createRow = function (dataOrRow) {
2697
2746
  var _this = this;
@@ -2722,60 +2771,33 @@ var easy_data_table_EasyDataTable = /** @class */ (function () {
2722
2771
  }
2723
2772
  return null;
2724
2773
  };
2725
- EasyDataTable.prototype.addRow = function (rowOrValue) {
2774
+ EasyDataTable.prototype.addRow = function (rowOrValues) {
2726
2775
  var newRow;
2727
- if (Array.isArray(rowOrValue)) {
2776
+ if (Array.isArray(rowOrValues)) {
2777
+ var values = rowOrValues;
2728
2778
  var dateIdx = this._columns.getDateColumnIndexes();
2729
2779
  if (dateIdx.length > 0) {
2730
2780
  for (var _i = 0, dateIdx_1 = dateIdx; _i < dateIdx_1.length; _i++) {
2731
2781
  var idx = dateIdx_1[_i];
2732
- if (rowOrValue[idx]) {
2733
- 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);
2734
2784
  }
2735
2785
  }
2736
2786
  }
2737
- newRow = new DataRow(this._columns, rowOrValue);
2787
+ newRow = new DataRow(this._columns, values);
2738
2788
  }
2739
2789
  else {
2740
- newRow = this.createRow(rowOrValue);
2790
+ newRow = this.createRow(rowOrValues);
2741
2791
  }
2742
- var lastChunk = this.getLastChunk();
2743
- if (!lastChunk || lastChunk.rows.length >= this._chunkSize) {
2744
- lastChunk = this.createChunk();
2745
- }
2746
- lastChunk.rows.push(newRow);
2792
+ this.cachedRows.push(newRow);
2747
2793
  var cachedTotal = this.getCachedCount();
2748
2794
  if (cachedTotal > this.total) {
2749
2795
  this.total = cachedTotal;
2750
2796
  }
2751
2797
  return newRow;
2752
2798
  };
2753
- EasyDataTable.prototype.createChunk = function (index) {
2754
- if (typeof index == 'undefined') {
2755
- index = this.getLastChunkIndex() + 1;
2756
- }
2757
- var chunk = { offset: index * this._chunkSize, rows: [] };
2758
- this.chunkMap[index] = chunk;
2759
- return chunk;
2760
- };
2761
- EasyDataTable.prototype.getLastChunkIndex = function () {
2762
- var keys = Object.keys(this.chunkMap);
2763
- return keys.length > 0
2764
- ? parseInt(keys[keys.length - 1])
2765
- : -1;
2766
- };
2767
- EasyDataTable.prototype.getLastChunk = function () {
2768
- var index = this.getLastChunkIndex();
2769
- return index > -1
2770
- ? this.chunkMap[index]
2771
- : null;
2772
- };
2773
2799
  EasyDataTable.prototype.getCachedRows = function () {
2774
- return this.getCachedChunks()
2775
- .reduce(function (acc, v) { return acc.concat(v.rows); }, []);
2776
- };
2777
- EasyDataTable.prototype.getCachedChunks = function () {
2778
- return Object.values(this.chunkMap);
2800
+ return this.cachedRows;
2779
2801
  };
2780
2802
  EasyDataTable.prototype.totalIsKnown = function () {
2781
2803
  if (this.elasticChunks) {
@@ -2784,11 +2806,16 @@ var easy_data_table_EasyDataTable = /** @class */ (function () {
2784
2806
  }
2785
2807
  return !this.needTotal;
2786
2808
  };
2809
+ EasyDataTable.prototype.fireUpdated = function () {
2810
+ if (this.onUpdate) {
2811
+ this.onUpdate(this);
2812
+ }
2813
+ };
2787
2814
  return EasyDataTable;
2788
2815
  }());
2789
2816
 
2790
2817
  //# sourceMappingURL=easy_data_table.js.map
2791
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/core/dist/lib/utils/easy_guid.js
2818
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/utils/easy_guid.js
2792
2819
  /**
2793
2820
  * EasyData representation of GUID.
2794
2821
  */
@@ -2809,7 +2836,7 @@ var EasyGuid = /** @class */ (function () {
2809
2836
  }());
2810
2837
 
2811
2838
  //# sourceMappingURL=easy_guid.js.map
2812
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/core/dist/lib/event/event_emitter.js
2839
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/event/event_emitter.js
2813
2840
 
2814
2841
  /**
2815
2842
  * The representation of event emitter.
@@ -2935,11 +2962,27 @@ var event_emitter_EventEmitter = /** @class */ (function () {
2935
2962
  }());
2936
2963
 
2937
2964
  //# sourceMappingURL=event_emitter.js.map
2938
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/core/dist/lib/i18n/load_default_locale_settings.js
2965
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/utils/liquid.js
2966
+ var liquid;
2967
+ (function (liquid) {
2968
+ function renderLiquidTemplate(template, vars) {
2969
+ var result = template;
2970
+ if (vars) {
2971
+ for (var v in vars) {
2972
+ var liquidVarRegexp = new RegExp('\{\{' + v + '\}\}', 'g');
2973
+ result = result.replace(liquidVarRegexp, vars[v]);
2974
+ }
2975
+ }
2976
+ return result;
2977
+ }
2978
+ liquid.renderLiquidTemplate = renderLiquidTemplate;
2979
+ })(liquid || (liquid = {}));
2980
+ //# sourceMappingURL=liquid.js.map
2981
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/i18n/load_default_locale_settings.js
2939
2982
 
2940
2983
  i18n_i18n.resetLocales();
2941
2984
  //# sourceMappingURL=load_default_locale_settings.js.map
2942
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/core/dist/lib/public_api.js
2985
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/public_api.js
2943
2986
  //types
2944
2987
 
2945
2988
 
@@ -2952,7 +2995,6 @@ i18n_i18n.resetLocales();
2952
2995
 
2953
2996
 
2954
2997
 
2955
- //data
2956
2998
 
2957
2999
 
2958
3000
 
@@ -2966,6 +3008,7 @@ i18n_i18n.resetLocales();
2966
3008
 
2967
3009
 
2968
3010
 
3011
+
2969
3012
  if (typeof Object.values !== 'function') {
2970
3013
  Object.values = function (obj) {
2971
3014
  return Object.keys(obj).map(function (key) { return obj[key]; });
@@ -2983,10 +3026,10 @@ if (typeof Math.trunc !== 'function') {
2983
3026
  };
2984
3027
  }
2985
3028
  //# sourceMappingURL=public_api.js.map
2986
- // EXTERNAL MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/ui/dist/lib/utils/browser_utils.js
3029
+ // EXTERNAL MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/ui/dist/lib/utils/browser_utils.js
2987
3030
  var browser_utils = __webpack_require__(1);
2988
3031
 
2989
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/ui/dist/lib/utils/ui-utils.js
3032
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/ui/dist/lib/utils/ui-utils.js
2990
3033
 
2991
3034
  /**
2992
3035
  * Wraps all the elements inside "parent" by "wrapper" element
@@ -3214,7 +3257,7 @@ function slideUp(target, duration, callback) {
3214
3257
  var eqCssPrefix = 'eqjs';
3215
3258
  var eqCssMobile = 'eqjs-mobile';
3216
3259
  //# sourceMappingURL=ui-utils.js.map
3217
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/ui/dist/lib/utils/mask.js
3260
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/ui/dist/lib/utils/mask.js
3218
3261
  function mask(input, maskPattern) {
3219
3262
  var d = { 9: '[0-9]', a: '[a-z]' };
3220
3263
  var mask = maskPattern.split('');
@@ -3311,7 +3354,7 @@ function mask(input, maskPattern) {
3311
3354
  input.addEventListener('focus', inputHandler);
3312
3355
  }
3313
3356
  //# sourceMappingURL=mask.js.map
3314
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/ui/dist/lib/utils/dom_elem_builder.js
3357
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/ui/dist/lib/utils/dom_elem_builder.js
3315
3358
  var dom_elem_builder_extends = (undefined && undefined.__extends) || (function () {
3316
3359
  var extendStatics = function (d, b) {
3317
3360
  extendStatics = Object.setPrototypeOf ||
@@ -3325,6 +3368,13 @@ var dom_elem_builder_extends = (undefined && undefined.__extends) || (function (
3325
3368
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
3326
3369
  };
3327
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
+ };
3328
3378
 
3329
3379
  var DomElementBuilder = /** @class */ (function () {
3330
3380
  function DomElementBuilder(tag, parent) {
@@ -3395,7 +3445,7 @@ var DomElementBuilder = /** @class */ (function () {
3395
3445
  classNames[_i - 1] = arguments[_i];
3396
3446
  }
3397
3447
  if (className) {
3398
- var fullList = className.trim().split(" ").concat(classNames);
3448
+ var fullList = __spreadArrays(className.trim().split(" "), classNames);
3399
3449
  for (var i = 0; i < fullList.length; i++)
3400
3450
  this.element.classList.add(fullList[i]);
3401
3451
  }
@@ -3407,7 +3457,7 @@ var DomElementBuilder = /** @class */ (function () {
3407
3457
  classNames[_i - 1] = arguments[_i];
3408
3458
  }
3409
3459
  if (className) {
3410
- var fullList = className.trim().split(" ").concat(classNames);
3460
+ var fullList = __spreadArrays(className.trim().split(" "), classNames);
3411
3461
  for (var i = 0; i < fullList.length; i++)
3412
3462
  this.element.classList.remove(fullList[i]);
3413
3463
  }
@@ -3607,7 +3657,7 @@ function domel(tag, parent) {
3607
3657
  return new DomElementBuilder(tag, parent);
3608
3658
  }
3609
3659
  //# sourceMappingURL=dom_elem_builder.js.map
3610
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/ui/dist/lib/utils/drag_manager.js
3660
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/ui/dist/lib/utils/drag_manager.js
3611
3661
 
3612
3662
 
3613
3663
 
@@ -3974,7 +4024,15 @@ var drag_manager_DragManager = /** @class */ (function () {
3974
4024
  //global variable
3975
4025
  var eqDragManager = new drag_manager_DragManager();
3976
4026
  //# sourceMappingURL=drag_manager.js.map
3977
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_cell_renderer.js
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
4035
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_cell_renderer.js
3978
4036
 
3979
4037
 
3980
4038
 
@@ -4122,16 +4180,10 @@ var easy_grid_cell_renderer_GridCellRendererStore = /** @class */ (function () {
4122
4180
  }());
4123
4181
 
4124
4182
  //# sourceMappingURL=easy_grid_cell_renderer.js.map
4125
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_columns.js
4183
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_columns.js
4126
4184
 
4127
4185
 
4128
- var DEFAULT_WIDTH = 150;
4129
- var DEFAULT_WIDTH_NUMBER = 120;
4130
- var DEFAULT_WIDTH_DATE = 200;
4131
- var DEFAULT_WIDTH_BOOL = 80;
4132
4186
  var DEFAULT_WIDTH_STRING = 250;
4133
- var MIN_WIDTH_STRING = 100;
4134
- var MAX_WIDTH_STRING = 500;
4135
4187
  var ROW_NUM_WIDTH = 60;
4136
4188
  var GridColumnAlign;
4137
4189
  (function (GridColumnAlign) {
@@ -4156,36 +4208,25 @@ var easy_grid_columns_GridColumn = /** @class */ (function () {
4156
4208
  function GridColumn(column, grid, isRowNum) {
4157
4209
  if (isRowNum === void 0) { isRowNum = false; }
4158
4210
  this._label = null;
4211
+ this._description = null;
4159
4212
  //public left: number;
4160
4213
  this.align = GridColumnAlign.NONE;
4161
4214
  this.isVisible = true;
4162
4215
  this.isRowNum = false;
4163
4216
  this.dataColumn = column;
4164
4217
  this.grid = grid;
4218
+ var widthOptions = grid.options.columnWidths || {};
4165
4219
  if (column) {
4166
4220
  if (column.style.alignment) {
4167
4221
  this.align = MapAlignment(column.style.alignment);
4168
4222
  }
4169
- var coltype = column.type;
4170
- var cellType = this.grid.cellRendererStore.getCellType(coltype);
4171
- switch (cellType) {
4172
- case CellRendererType.NUMBER:
4173
- this.width = DEFAULT_WIDTH_NUMBER;
4174
- break;
4175
- case CellRendererType.DATETIME:
4176
- this.width = DEFAULT_WIDTH_DATE;
4177
- break;
4178
- case CellRendererType.BOOL:
4179
- this.width = DEFAULT_WIDTH_BOOL;
4180
- break;
4181
- default:
4182
- this.width = DEFAULT_WIDTH_STRING;
4183
- }
4223
+ this.width = (widthOptions && widthOptions[this.type]) ? widthOptions[this.type].default : DEFAULT_WIDTH_STRING;
4184
4224
  this.cellRenderer = this.grid.cellRendererStore.getDefaultRenderer(column.type);
4225
+ this._description = column.description;
4185
4226
  }
4186
4227
  else if (isRowNum) {
4187
4228
  this.isRowNum = true;
4188
- this.width = ROW_NUM_WIDTH;
4229
+ this.width = (widthOptions && widthOptions.rowNumColumn) ? widthOptions.rowNumColumn.default : ROW_NUM_WIDTH;
4189
4230
  this._label = '';
4190
4231
  this.cellRenderer = this.grid.cellRendererStore.getDefaultRendererByType(CellRendererType.NUMBER);
4191
4232
  }
@@ -4204,6 +4245,14 @@ var easy_grid_columns_GridColumn = /** @class */ (function () {
4204
4245
  configurable: true
4205
4246
  });
4206
4247
  ;
4248
+ Object.defineProperty(GridColumn.prototype, "description", {
4249
+ /** Get column description. */
4250
+ get: function () {
4251
+ return this._description;
4252
+ },
4253
+ enumerable: true,
4254
+ configurable: true
4255
+ });
4207
4256
  Object.defineProperty(GridColumn.prototype, "type", {
4208
4257
  get: function () {
4209
4258
  return this.dataColumn ? this.dataColumn.type : null;
@@ -4223,9 +4272,10 @@ var easy_grid_columns_GridColumnList = /** @class */ (function () {
4223
4272
  GridColumnList.prototype.sync = function (columnList, hasRowNumCol) {
4224
4273
  if (hasRowNumCol === void 0) { hasRowNumCol = true; }
4225
4274
  this.clear();
4226
- if (hasRowNumCol) {
4227
- var rowNumCol = new easy_grid_columns_GridColumn(null, this.grid, true);
4228
- 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;
4229
4279
  }
4230
4280
  if (columnList) {
4231
4281
  for (var _i = 0, _a = columnList.getItems(); _i < _a.length; _i++) {
@@ -4287,7 +4337,7 @@ var easy_grid_columns_GridColumnList = /** @class */ (function () {
4287
4337
  }());
4288
4338
 
4289
4339
  //# sourceMappingURL=easy_grid_columns.js.map
4290
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid.js
4340
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid.js
4291
4341
  var easy_grid_assign = (undefined && undefined.__assign) || function () {
4292
4342
  easy_grid_assign = Object.assign || function(t) {
4293
4343
  for (var s, i = 1, n = arguments.length; i < n; i++) {
@@ -4299,6 +4349,14 @@ var easy_grid_assign = (undefined && undefined.__assign) || function () {
4299
4349
  };
4300
4350
  return easy_grid_assign.apply(this, arguments);
4301
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
+
4302
4360
 
4303
4361
 
4304
4362
 
@@ -4331,14 +4389,42 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4331
4389
  pageSize: 30,
4332
4390
  pageSizeItems: [20, 30, 50, 100, 200]
4333
4391
  },
4334
- 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,
4335
4422
  viewportRowsCount: null,
4336
4423
  showActiveRow: true
4337
4424
  };
4338
4425
  this.rowsOnPagePromise = null;
4339
4426
  this.containerInitialHeight = 0;
4340
4427
  this.firstRender = true;
4341
- this.compareValues = this.strictCompare;
4342
4428
  this.prevRowTotals = null;
4343
4429
  this.landingIndex = -1;
4344
4430
  this.landingSlot = domel('div')
@@ -4350,7 +4436,8 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4350
4436
  if (options && options.paging) {
4351
4437
  options.paging = utils_utils.assign(this.defaultDataGridOptions.paging, options.paging);
4352
4438
  }
4353
- this.options = easy_grid_assign({}, this.defaultDataGridOptions, options);
4439
+ this.options = this.mergeOptions(options);
4440
+ this.processColumnWidthsOptions();
4354
4441
  if (!this.options.slot)
4355
4442
  throw Error('"slot" parameter is required to initialize EasyDataGrid');
4356
4443
  if (!this.options.dataTable)
@@ -4362,6 +4449,42 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4362
4449
  this.setSlot(this.options.slot);
4363
4450
  this.init(this.options);
4364
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
+ };
4365
4488
  EasyGrid.prototype.setSlot = function (slot) {
4366
4489
  if (typeof slot === 'string') {
4367
4490
  if (slot.length) {
@@ -4394,8 +4517,8 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4394
4517
  if (options.onRowDbClick) {
4395
4518
  this.addEventListener('rowDbClick', options.onRowDbClick);
4396
4519
  }
4397
- if (options.onAddColumnClick) {
4398
- this.addEventListener('addColumnClick', options.onAddColumnClick);
4520
+ if (options.onPlusButtonClick) {
4521
+ this.addEventListener('plusButtonClick', options.onPlusButtonClick);
4399
4522
  }
4400
4523
  if (options.onColumnChanged) {
4401
4524
  this.addEventListener('columnChanged', options.onColumnChanged);
@@ -4481,7 +4604,7 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4481
4604
  };
4482
4605
  EasyGrid.prototype.render = function () {
4483
4606
  var _this = this;
4484
- if (!this.hasData() && !this.options.addColumns)
4607
+ if (!this.hasData() && !this.options.showPlusButton)
4485
4608
  return;
4486
4609
  this.containerInitialHeight = this.slot.clientHeight;
4487
4610
  this.rootDiv = document.createElement('div');
@@ -4498,6 +4621,7 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4498
4621
  gridContainer.classList.add(this.cssPrefix + "-container");
4499
4622
  gridContainer.appendChild(this.rootDiv);
4500
4623
  this.slot.appendChild(gridContainer);
4624
+ var needAutoResize = this.options.columnWidths.autoResize !== AutoResizeColumns.Never;
4501
4625
  if (this.rowsOnPagePromise) {
4502
4626
  this.rowsOnPagePromise
4503
4627
  .then(function () { return _this.updateHeight(); })
@@ -4508,8 +4632,13 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4508
4632
  }
4509
4633
  else {
4510
4634
  setTimeout(function () {
4511
- _this.updateHeight();
4512
- _this.firstRender = false;
4635
+ _this.updateHeight()
4636
+ .then(function () {
4637
+ _this.firstRender = false;
4638
+ if (needAutoResize) {
4639
+ _this.resizeColumns();
4640
+ }
4641
+ });
4513
4642
  }, 100);
4514
4643
  }
4515
4644
  };
@@ -4520,14 +4649,14 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4520
4649
  var firstRow = _this.bodyCellContainerDiv.firstElementChild;
4521
4650
  var rowHeight = firstRow ? firstRow.offsetHeight : DEFAULT_ROW_HEIGHT;
4522
4651
  var rowCount = _this.options.viewportRowsCount; // || DEFAULT_ROW_COUNT;
4523
- var bodyHeight_1 = rowHeight * rowCount;
4524
- domel(_this.bodyDiv)
4525
- .setStyle('height', bodyHeight_1 + "px");
4652
+ var viewportHeight_1 = rowHeight * rowCount;
4653
+ domel(_this.bodyViewportDiv)
4654
+ .setStyle('height', viewportHeight_1 + "px");
4526
4655
  setTimeout(function () {
4527
4656
  var sbHeight = _this.bodyViewportDiv.offsetHeight - _this.bodyViewportDiv.clientHeight;
4528
- bodyHeight_1 = bodyHeight_1 + sbHeight;
4529
- domel(_this.bodyDiv)
4530
- .setStyle('height', bodyHeight_1 + "px");
4657
+ viewportHeight_1 = viewportHeight_1 + sbHeight;
4658
+ domel(_this.bodyViewportDiv)
4659
+ .setStyle('height', viewportHeight_1 + "px");
4531
4660
  resolve();
4532
4661
  }, 100);
4533
4662
  return;
@@ -4546,6 +4675,12 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4546
4675
  }
4547
4676
  });
4548
4677
  };
4678
+ EasyGrid.prototype.getContainerWidth = function () {
4679
+ return this.columns.getItems()
4680
+ .filter(function (col) { return col.isVisible; })
4681
+ .map(function (col) { return col.width; })
4682
+ .reduce(function (sum, current) { return sum + current; });
4683
+ };
4549
4684
  EasyGrid.prototype.renderHeader = function () {
4550
4685
  var _this = this;
4551
4686
  this.headerDiv = domel('div')
@@ -4568,10 +4703,10 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4568
4703
  _this.headerRowDiv.appendChild(hd);
4569
4704
  if (column.isRowNum) {
4570
4705
  domel(hd)
4571
- .addChildElement(_this.renderAddColumnButton());
4706
+ .addChildElement(_this.renderHeaderButtons());
4572
4707
  }
4573
4708
  });
4574
- var containerWidth = this.columns.getItems().map(function (column) { return column.width; }).reduce(function (sum, current) { return sum + current; });
4709
+ var containerWidth = this.getContainerWidth();
4575
4710
  domel(this.headerCellContainerDiv)
4576
4711
  .setStyle('width', containerWidth + "px");
4577
4712
  };
@@ -4582,7 +4717,7 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4582
4717
  var _this = this;
4583
4718
  var colBuilder = domel('div')
4584
4719
  .addClass(this.cssPrefix + "-header-cell")
4585
- .data('col-idx', "" + (index + 1))
4720
+ .data('col-idx', "" + index)
4586
4721
  .setStyle('width', column.width + "px");
4587
4722
  if (column.dataColumn) {
4588
4723
  colBuilder
@@ -4596,6 +4731,11 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4596
4731
  .addClass(this.cssPrefix + "-header-cell-label")
4597
4732
  .text(column.label);
4598
4733
  }
4734
+ if (column.description) {
4735
+ domel('div', colDiv)
4736
+ .addClass('question-mark')
4737
+ .title(column.description);
4738
+ }
4599
4739
  if (this.options.allowDragDrop) {
4600
4740
  eqDragManager.registerDraggableItem({
4601
4741
  element: colDiv,
@@ -4615,14 +4755,6 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4615
4755
  }
4616
4756
  return colDiv;
4617
4757
  };
4618
- EasyGrid.prototype.strictCompare = function (value1, value2) {
4619
- return value1 !== value2;
4620
- };
4621
- EasyGrid.prototype.caseInsensitiveCompare = function (value1, value2) {
4622
- var val1 = (typeof value1 === 'string') ? value1.toLowerCase() : value1;
4623
- var val2 = (typeof value2 === 'string') ? value2.toLowerCase() : value2;
4624
- return val1 !== val2;
4625
- };
4626
4758
  EasyGrid.prototype.renderBody = function () {
4627
4759
  var _this = this;
4628
4760
  this.bodyDiv = domel('div')
@@ -4636,10 +4768,6 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4636
4768
  .addClass(this.cssPrefix + "-cell-container")
4637
4769
  .toDOM();
4638
4770
  var showAggrs = this.canShowAggregates();
4639
- this.compareValues = this.caseInsensitiveCompare;
4640
- if (showAggrs && this.options.aggregates.settings.caseSensitiveGroups) {
4641
- this.compareValues = this.strictCompare;
4642
- }
4643
4771
  if (this.dataTable) {
4644
4772
  this.showProgress();
4645
4773
  this.rowsOnPagePromise = this.getRowsToRender()
@@ -4649,15 +4777,22 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4649
4777
  //prevent double rendering (bad solution, we have to figure out how to avoid this behavior properly)
4650
4778
  _this.bodyCellContainerDiv.innerHTML = '';
4651
4779
  _this.prevRowTotals = null;
4780
+ var rowsToRender = 0;
4652
4781
  if (rows.length) {
4653
4782
  var groups_1 = showAggrs
4654
4783
  ? _this.options.aggregates.settings.getGroups()
4655
4784
  : [];
4785
+ rowsToRender = (rows.length < _this.pagination.pageSize)
4786
+ ? rows.length
4787
+ : _this.pagination.pageSize;
4656
4788
  rows.forEach(function (row, index) {
4657
4789
  if (showAggrs)
4658
4790
  _this.updateTotalsState(groups_1, row);
4659
- var tr = _this.renderRow(row, index);
4660
- _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
+ }
4661
4796
  });
4662
4797
  var showGrandTotalsOnEachPage = _this.options.aggregates && _this.options.aggregates.showGrandTotalsOnEachPage;
4663
4798
  if (showAggrs && (_this.isLastPage() || showGrandTotalsOnEachPage)) {
@@ -4665,11 +4800,16 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4665
4800
  _this.updateTotalsState(groups_1, row, true);
4666
4801
  }
4667
4802
  }
4668
- var containerWidth = _this.columns.getItems()
4669
- .map(function (column) { return column.width; }).reduce(function (sum, current) { return sum + current; });
4670
- domel(_this.bodyCellContainerDiv)
4671
- .setStyle('width', containerWidth + "px");
4672
- 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;
4673
4813
  })
4674
4814
  .catch(function (error) { console.error(error); return 0; });
4675
4815
  }
@@ -4677,7 +4817,7 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4677
4817
  domel(_this.headerViewportDiv)
4678
4818
  .setStyle('margin-left', "-" + _this.bodyViewportDiv.scrollLeft + "px");
4679
4819
  });
4680
- this.bodyViewportDiv.addEventListener('keydown', this.onVieportKeydown.bind(this));
4820
+ this.bodyViewportDiv.addEventListener('keydown', this.onViewportKeydown.bind(this));
4681
4821
  };
4682
4822
  EasyGrid.prototype.isLastPage = function () {
4683
4823
  if (this.dataTable.elasticChunks) {
@@ -4703,7 +4843,7 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4703
4843
  var group = groups[level - 1];
4704
4844
  for (var _i = 0, _a = group.columns; _i < _a.length; _i++) {
4705
4845
  var col = _a[_i];
4706
- if (this.compareValues(this.prevRowTotals.getValue(col), newRow.getValue(col))) {
4846
+ if (!aggrSettings.compareValues(this.prevRowTotals.getValue(col), newRow.getValue(col))) {
4707
4847
  changeLevel = level;
4708
4848
  break;
4709
4849
  }
@@ -4764,8 +4904,8 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4764
4904
  });
4765
4905
  var aggrContainer = this.options.aggregates.calculator.getAggrContainer();
4766
4906
  var aggrCols = aggrSettings.getAggregates().map(function (c) { return c.colId; });
4767
- var key = this.buildGroupKey(group, row);
4768
- aggrContainer.getAggregates(level, key)
4907
+ var key = aggrSettings.buildGroupKey(group, row);
4908
+ aggrContainer.getAggregateData(level, key)
4769
4909
  .then(function (values) {
4770
4910
  for (var _i = 0, aggrCols_1 = aggrCols; _i < aggrCols_1.length; _i++) {
4771
4911
  var aggrColId = aggrCols_1[_i];
@@ -4806,34 +4946,20 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4806
4946
  }
4807
4947
  }
4808
4948
  if (groupFooterTemplate) {
4809
- var cellDiv_1 = _this.renderCell(column, colIndex, val, rowElement);
4949
+ var cellDiv_1 = _this.renderCell(column, index, val, rowElement);
4810
4950
  var innerCell = cellDiv_1.firstChild;
4811
4951
  val = innerCell.innerHTML;
4812
4952
  val = _this.applyGroupColumnTemplate(groupFooterTemplate, val, values[aggrSettings.COUNT_FIELD_NAME]);
4813
4953
  }
4814
4954
  }
4815
- var cellDiv = _this.renderCell(column, colIndex, val, rowElement);
4955
+ var cellDiv = _this.renderCell(column, index, val, rowElement);
4816
4956
  rowElement.appendChild(cellDiv);
4817
4957
  });
4818
4958
  })
4819
4959
  .catch(function (error) { return console.error(error); });
4820
4960
  return rowElement;
4821
4961
  };
4822
- EasyGrid.prototype.buildGroupKey = function (group, row) {
4823
- var aggrSettings = this.options.aggregates.settings;
4824
- var caseInsensitive = aggrSettings && !aggrSettings.caseSensitiveGroups;
4825
- var result = {};
4826
- for (var _i = 0, _a = group.columns; _i < _a.length; _i++) {
4827
- var colId = _a[_i];
4828
- var keyVal = row.getValue(colId);
4829
- if (caseInsensitive) {
4830
- keyVal = keyVal.toLowerCase();
4831
- }
4832
- result[colId] = keyVal;
4833
- }
4834
- return result;
4835
- };
4836
- EasyGrid.prototype.onVieportKeydown = function (ev) {
4962
+ EasyGrid.prototype.onViewportKeydown = function (ev) {
4837
4963
  if (this.options.showActiveRow) {
4838
4964
  var rowCount = this.bodyCellContainerDiv.querySelectorAll("." + this.cssPrefix + "-row").length;
4839
4965
  var newValue = void 0;
@@ -4887,13 +5013,17 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4887
5013
  }
4888
5014
  }
4889
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
+ */
4890
5020
  EasyGrid.prototype.getRowsToRender = function () {
4891
5021
  if (this.options.paging.enabled === false) {
4892
5022
  return Promise.resolve(this.dataTable.getCachedRows());
4893
5023
  }
4894
5024
  return this.dataTable.getRows({
4895
- page: this.pagination.page,
4896
- pageSize: this.pagination.pageSize
5025
+ offset: (this.pagination.page - 1) * this.pagination.pageSize,
5026
+ limit: this.pagination.pageSize + 1
4897
5027
  })
4898
5028
  .catch(function (error) {
4899
5029
  console.error(error);
@@ -4918,23 +5048,26 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4918
5048
  var pageInfoDiv = domel('div')
4919
5049
  .addClass(this.cssPrefix + "-page-info")
4920
5050
  .toDOM();
4921
- var fistPageRecordNum = count
4922
- ? (this.pagination.page - 1) * this.pagination.pageSize + 1
4923
- : 0;
4924
- var lastPageRecordNum = count
4925
- ? fistPageRecordNum + count - 1
4926
- : 0;
4927
- var totalStr = this.dataTable.getTotal().toString();
4928
- if (this.dataTable.elasticChunks) {
4929
- var count_1 = this.dataTable.getCachedCount();
4930
- var total = this.dataTable.getTotal();
4931
- if (count_1 !== total)
4932
- totalStr = '?';
4933
- }
4934
- pageInfoDiv.innerHTML = i18n_i18n.getText('GridPageInfo')
4935
- .replace('{FirstPageRecordNum}', "<span>" + fistPageRecordNum.toString() + "</span>")
4936
- .replace('{LastPageRecordNum}', "<span>" + lastPageRecordNum.toString() + "</span>")
4937
- .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
+ }
4938
5071
  return pageInfoDiv;
4939
5072
  };
4940
5073
  EasyGrid.prototype.showProgress = function () {
@@ -4989,13 +5122,13 @@ var easy_grid_EasyGrid = /** @class */ (function () {
4989
5122
  if (this.options.showActiveRow && index == this.activeRowIndex) {
4990
5123
  rowBuilder.addClass(this.cssPrefix + "-row-active");
4991
5124
  }
4992
- this.columns.getItems().forEach(function (column) {
5125
+ this.columns.getItems().forEach(function (column, index) {
4993
5126
  if (!column.isVisible) {
4994
5127
  return;
4995
5128
  }
4996
5129
  var colindex = column.isRowNum ? -1 : _this.dataTable.columns.getIndex(column.dataColumn.id);
4997
5130
  var val = column.isRowNum ? indexGlobal + 1 : row.getValue(colindex);
4998
- rowElement.appendChild(_this.renderCell(column, colindex, val, rowElement));
5131
+ rowElement.appendChild(_this.renderCell(column, index, val, rowElement));
4999
5132
  });
5000
5133
  return rowElement;
5001
5134
  };
@@ -5029,7 +5162,8 @@ var easy_grid_EasyGrid = /** @class */ (function () {
5029
5162
  var _this = this;
5030
5163
  var paginateDiv = document.createElement('div');
5031
5164
  paginateDiv.className = this.cssPrefix + "-pagination-wrapper";
5032
- 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) {
5033
5167
  var prefix_1 = this.paginationOptions.useBootstrap ? '' : this.cssPrefix + "-";
5034
5168
  var buttonClickHandler_1 = function (ev) {
5035
5169
  var element = ev.target;
@@ -5155,18 +5289,18 @@ var easy_grid_EasyGrid = /** @class */ (function () {
5155
5289
  EasyGrid.prototype.removeEventListener = function (eventType, handlerId) {
5156
5290
  this.eventEmitter.unsubscribe(eventType, handlerId);
5157
5291
  };
5158
- EasyGrid.prototype.renderAddColumnButton = function () {
5292
+ EasyGrid.prototype.renderHeaderButtons = function () {
5159
5293
  var _this = this;
5160
- if (this.options.addColumns) {
5294
+ if (this.options.showPlusButton) {
5161
5295
  return domel('div')
5162
- .addClass(this.cssPrefix + "-addrow")
5163
- .title(this.options.addColumnsTitle || 'Add column')
5296
+ .addClass(this.cssPrefix + "-header-btn-plus")
5297
+ .title(this.options.plusButtonTitle || 'Add')
5164
5298
  .addChild('a', function (builder) { return builder
5165
5299
  .attr('href', 'javascript:void(0)')
5166
5300
  .on('click', function (e) {
5167
5301
  e.preventDefault();
5168
5302
  _this.fireEvent({
5169
- type: 'addColumnClick',
5303
+ type: 'plusButtonClick',
5170
5304
  sourceEvent: e
5171
5305
  });
5172
5306
  }); })
@@ -5267,11 +5401,102 @@ var easy_grid_EasyGrid = /** @class */ (function () {
5267
5401
  EasyGrid.prototype.focus = function () {
5268
5402
  this.bodyViewportDiv.focus();
5269
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
+ };
5270
5495
  return EasyGrid;
5271
5496
  }());
5272
5497
 
5273
5498
  //# sourceMappingURL=easy_grid.js.map
5274
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/calendar.js
5499
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/calendar.js
5275
5500
  var Calendar = /** @class */ (function () {
5276
5501
  function Calendar(slot, options) {
5277
5502
  this.slot = slot;
@@ -5302,7 +5527,7 @@ var Calendar = /** @class */ (function () {
5302
5527
  }());
5303
5528
 
5304
5529
  //# sourceMappingURL=calendar.js.map
5305
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/date_time_picker.js
5530
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/date_time_picker.js
5306
5531
 
5307
5532
  var date_time_picker_DateTimePicker = /** @class */ (function () {
5308
5533
  function DateTimePicker(options) {
@@ -5410,7 +5635,7 @@ var date_time_picker_DateTimePicker = /** @class */ (function () {
5410
5635
  }());
5411
5636
 
5412
5637
  //# sourceMappingURL=date_time_picker.js.map
5413
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/default_calendar.js
5638
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/default_calendar.js
5414
5639
  var default_calendar_extends = (undefined && undefined.__extends) || (function () {
5415
5640
  var extendStatics = function (d, b) {
5416
5641
  extendStatics = Object.setPrototypeOf ||
@@ -5674,7 +5899,7 @@ var default_calendar_DefaultCalendar = /** @class */ (function (_super) {
5674
5899
  }(Calendar));
5675
5900
 
5676
5901
  //# sourceMappingURL=default_calendar.js.map
5677
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/time_picker.js
5902
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/time_picker.js
5678
5903
  var TimePicker = /** @class */ (function () {
5679
5904
  function TimePicker(slot, options) {
5680
5905
  this.slot = slot;
@@ -5702,7 +5927,7 @@ var TimePicker = /** @class */ (function () {
5702
5927
  }());
5703
5928
 
5704
5929
  //# sourceMappingURL=time_picker.js.map
5705
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/default_time_picker.js
5930
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/default_time_picker.js
5706
5931
  var default_time_picker_extends = (undefined && undefined.__extends) || (function () {
5707
5932
  var extendStatics = function (d, b) {
5708
5933
  extendStatics = Object.setPrototypeOf ||
@@ -5784,7 +6009,7 @@ var default_time_picker_DefaultTimePicker = /** @class */ (function (_super) {
5784
6009
  }(TimePicker));
5785
6010
 
5786
6011
  //# sourceMappingURL=default_time_picker.js.map
5787
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/default_date_time_picker.js
6012
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/default_date_time_picker.js
5788
6013
  var default_date_time_picker_extends = (undefined && undefined.__extends) || (function () {
5789
6014
  var extendStatics = function (d, b) {
5790
6015
  extendStatics = Object.setPrototypeOf ||
@@ -5912,7 +6137,15 @@ var default_date_time_picker_DefaultDateTimePicker = /** @class */ (function (_s
5912
6137
  }(date_time_picker_DateTimePicker));
5913
6138
 
5914
6139
  //# sourceMappingURL=default_date_time_picker.js.map
5915
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/ui/dist/lib/dialogs/default_dialog_service.js
6140
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/ui/dist/lib/dialogs/dialog_service.js
6141
+ var DialogFooterAlignment;
6142
+ (function (DialogFooterAlignment) {
6143
+ DialogFooterAlignment[DialogFooterAlignment["Left"] = 1] = "Left";
6144
+ DialogFooterAlignment[DialogFooterAlignment["Center"] = 2] = "Center";
6145
+ DialogFooterAlignment[DialogFooterAlignment["Right"] = 3] = "Right";
6146
+ })(DialogFooterAlignment || (DialogFooterAlignment = {}));
6147
+ //# sourceMappingURL=dialog_service.js.map
6148
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/ui/dist/lib/dialogs/default_dialog_service.js
5916
6149
  var default_dialog_service_extends = (undefined && undefined.__extends) || (function () {
5917
6150
  var extendStatics = function (d, b) {
5918
6151
  extendStatics = Object.setPrototypeOf ||
@@ -5928,6 +6161,7 @@ var default_dialog_service_extends = (undefined && undefined.__extends) || (func
5928
6161
  })();
5929
6162
 
5930
6163
 
6164
+
5931
6165
  var default_dialog_service_cssPrefix = "kdlg";
5932
6166
  var DefaultDialogService = /** @class */ (function () {
5933
6167
  function DefaultDialogService() {
@@ -6011,17 +6245,20 @@ var DefaultDialogService = /** @class */ (function () {
6011
6245
  _this.open(options);
6012
6246
  });
6013
6247
  };
6014
- DefaultDialogService.prototype.open = function (options) {
6248
+ DefaultDialogService.prototype.open = function (options, data) {
6015
6249
  var _this = this;
6250
+ var dialog = new default_dialog_service_DefaultDialog(options, data);
6016
6251
  var onDestroy = options.onDestroy;
6017
- options.onDestroy = function () {
6252
+ options.onDestroy = function (dlg) {
6018
6253
  _this.untrack(dlg);
6019
- onDestroy && onDestroy();
6254
+ onDestroy && onDestroy(dlg);
6020
6255
  };
6021
- var dlg = new default_dialog_service_DefaultDialog(options);
6022
- dlg.open();
6023
- this.track(dlg);
6024
- return dlg;
6256
+ dialog.open();
6257
+ this.track(dialog);
6258
+ return dialog;
6259
+ };
6260
+ DefaultDialogService.prototype.createSet = function (options) {
6261
+ return new DefaultDialogSet(options, this);
6025
6262
  };
6026
6263
  DefaultDialogService.prototype.untrack = function (dlg) {
6027
6264
  var index = DefaultDialogService.openDialogs.indexOf(dlg);
@@ -6034,15 +6271,15 @@ var DefaultDialogService = /** @class */ (function () {
6034
6271
  };
6035
6272
  DefaultDialogService.prototype.openProgress = function (options) {
6036
6273
  var _this = this;
6274
+ var dialog = new default_dialog_service_DefaultProgressDialog(options);
6037
6275
  var onDestroy = options.onDestroy;
6038
- options.onDestroy = function () {
6276
+ options.onDestroy = function (dlg) {
6039
6277
  _this.untrack(dlg);
6040
- onDestroy && onDestroy();
6278
+ onDestroy && onDestroy(dlg);
6041
6279
  };
6042
- var dlg = new default_dialog_service_DefaultProgressDialog(options);
6043
- dlg.open();
6044
- this.track(dlg);
6045
- return dlg;
6280
+ dialog.open();
6281
+ this.track(dialog);
6282
+ return dialog;
6046
6283
  };
6047
6284
  DefaultDialogService.prototype.getAllDialogs = function () {
6048
6285
  return Array.from(DefaultDialogService.openDialogs);
@@ -6058,11 +6295,11 @@ var DefaultDialogService = /** @class */ (function () {
6058
6295
  }());
6059
6296
 
6060
6297
  var default_dialog_service_DefaultDialog = /** @class */ (function () {
6061
- function DefaultDialog(options) {
6298
+ function DefaultDialog(options, data) {
6062
6299
  var _this = this;
6063
6300
  this.options = options;
6064
- this.submitHandler = function () {
6065
- if (_this.options.onSubmit && _this.options.onSubmit() === false) {
6301
+ this.submitHandler = function (token) {
6302
+ if (_this.options.onSubmit && _this.options.onSubmit(_this, token) === false) {
6066
6303
  return false;
6067
6304
  }
6068
6305
  _this.destroy();
@@ -6070,7 +6307,7 @@ var default_dialog_service_DefaultDialog = /** @class */ (function () {
6070
6307
  };
6071
6308
  this.cancelHandler = function () {
6072
6309
  if (_this.options.onCancel) {
6073
- _this.options.onCancel();
6310
+ _this.options.onCancel(_this);
6074
6311
  }
6075
6312
  _this.destroy();
6076
6313
  };
@@ -6085,11 +6322,12 @@ var default_dialog_service_DefaultDialog = /** @class */ (function () {
6085
6322
  }
6086
6323
  return true;
6087
6324
  };
6088
- var id = utils_utils.generateId('dlg');
6325
+ this.dialogId = utils_utils.generateId('dlg');
6326
+ this.data = data;
6089
6327
  this.slot =
6090
6328
  domel('div', document.body)
6091
6329
  .attr('tab-index', '-1')
6092
- .data('dialog-id', id)
6330
+ .data('dialog-id', this.dialogId)
6093
6331
  .addClass(default_dialog_service_cssPrefix + "-modal", 'is-active')
6094
6332
  .focus()
6095
6333
  .addChild('div', function (b) { return b
@@ -6110,36 +6348,68 @@ var default_dialog_service_DefaultDialog = /** @class */ (function () {
6110
6348
  _this.cancelHandler();
6111
6349
  })
6112
6350
  .focus(); });
6351
+ })
6352
+ .addChild('div', function (b) {
6353
+ b.addClass(default_dialog_service_cssPrefix + "-alert-container");
6354
+ _this.alertElement = b.toDOM();
6113
6355
  })
6114
6356
  .addChild('section', function (b) {
6115
6357
  _this.bodyElement = b
6116
6358
  .addClass(default_dialog_service_cssPrefix + "-body")
6117
6359
  .toDOM();
6118
6360
  if (typeof options.body === 'string') {
6119
- b.addHtml(options.body);
6361
+ var html = liquid.renderLiquidTemplate(options.body, data);
6362
+ b.addHtml(html);
6120
6363
  }
6121
6364
  else {
6122
6365
  b.addChildElement(options.body);
6123
6366
  }
6124
6367
  })
6125
- .addChild('div', function (b) { return _this.alertElement = b
6126
- .addClass(default_dialog_service_cssPrefix + "-alert-container")
6127
- .toDOM(); })
6128
6368
  .addChild('footer', function (b) {
6369
+ var alignClass = null;
6370
+ if (options.footerAlignment && options.footerAlignment == DialogFooterAlignment.Center) {
6371
+ alignClass = 'align-center';
6372
+ }
6373
+ else {
6374
+ alignClass = 'align-right';
6375
+ }
6129
6376
  _this.footerElement = b
6130
- .addClass(default_dialog_service_cssPrefix + "-footer", 'align-right')
6377
+ .addClass(default_dialog_service_cssPrefix + "-footer")
6131
6378
  .toDOM();
6379
+ b.addClass(alignClass);
6132
6380
  if (options.submitable === false)
6133
6381
  return;
6134
- b.addChild('button', function (b) { return b
6135
- .addClass('kfrm-button', 'is-info')
6136
- .addText(options.submitButtonText || i18n_i18n.getText('ButtonOK'))
6137
- .on('click', function (e) {
6138
- _this.submitHandler();
6139
- })
6140
- .focus(); });
6382
+ b.addChild('button', function (bb) {
6383
+ bb.id(_this.dialogId + '-btn-submit')
6384
+ .addClass('kfrm-button', 'is-info')
6385
+ .addText(options.submitButtonText || i18n_i18n.getText('ButtonOK'));
6386
+ if (options.recaptchaSiteKey) {
6387
+ bb.data('sitekey', options.recaptchaSiteKey);
6388
+ bb.addClass('g-recaptcha');
6389
+ bb.on('click', function (e) {
6390
+ if (grecaptcha) {
6391
+ grecaptcha.ready(function () {
6392
+ grecaptcha.execute(options.recaptchaSiteKey, { action: 'submit' })
6393
+ .then(function (token) {
6394
+ _this.submitHandler(token);
6395
+ });
6396
+ });
6397
+ }
6398
+ else {
6399
+ _this.submitHandler();
6400
+ }
6401
+ });
6402
+ }
6403
+ else {
6404
+ bb.on('click', function (e) {
6405
+ _this.submitHandler();
6406
+ });
6407
+ }
6408
+ bb.focus();
6409
+ });
6141
6410
  if (options.cancelable !== false)
6142
- b.addChild('button', function (builder) { return builder
6411
+ b.addChild('button', function (bb) { return bb
6412
+ .id(_this.dialogId + '-btn-cancel')
6143
6413
  .addClass('kfrm-button')
6144
6414
  .addText(options.cancelButtonText || i18n_i18n.getText('ButtonCancel'))
6145
6415
  .on('click', function (e) {
@@ -6149,12 +6419,22 @@ var default_dialog_service_DefaultDialog = /** @class */ (function () {
6149
6419
  .toDOM(); })
6150
6420
  .toDOM();
6151
6421
  }
6422
+ DefaultDialog.prototype.getData = function () {
6423
+ return this.data;
6424
+ };
6152
6425
  DefaultDialog.prototype.getRootElement = function () {
6153
6426
  return this.slot;
6154
6427
  };
6428
+ DefaultDialog.prototype.getSubmitButtonElement = function () {
6429
+ return document.getElementById(this.dialogId + '-btn-submit');
6430
+ };
6431
+ DefaultDialog.prototype.getCancelButtonElement = function () {
6432
+ return document.getElementById(this.dialogId + '-btn-cancel');
6433
+ };
6155
6434
  DefaultDialog.prototype.open = function () {
6435
+ var _this = this;
6156
6436
  if (this.options.beforeOpen) {
6157
- this.options.beforeOpen();
6437
+ this.options.beforeOpen(this);
6158
6438
  }
6159
6439
  domel(this.slot).show();
6160
6440
  if (this.options.arrangeParents) {
@@ -6175,6 +6455,19 @@ var default_dialog_service_DefaultDialog = /** @class */ (function () {
6175
6455
  if (this.options.submitOnEnter) {
6176
6456
  window.addEventListener('keydown', this.keydownHandler, false);
6177
6457
  }
6458
+ //clear alert on change in any input element
6459
+ this.slot.querySelectorAll('input')
6460
+ .forEach(function (element) {
6461
+ return element.addEventListener('input', function () {
6462
+ _this.clearAlert();
6463
+ if (_this.options.onInput) {
6464
+ _this.options.onInput(_this);
6465
+ }
6466
+ });
6467
+ });
6468
+ if (this.options.onShow) {
6469
+ this.options.onShow(this);
6470
+ }
6178
6471
  };
6179
6472
  DefaultDialog.prototype.submit = function () {
6180
6473
  this.submitHandler();
@@ -6214,6 +6507,9 @@ var default_dialog_service_DefaultDialog = /** @class */ (function () {
6214
6507
  this.alertElement.innerHTML = '';
6215
6508
  };
6216
6509
  DefaultDialog.prototype.destroy = function () {
6510
+ var elem = document.querySelectorAll("[data-dialog-id=\"" + this.dialogId + "\"]");
6511
+ if (elem.length <= 0)
6512
+ return;
6217
6513
  if (this.options.arrangeParents) {
6218
6514
  this.arrangeParents(false);
6219
6515
  }
@@ -6222,7 +6518,7 @@ var default_dialog_service_DefaultDialog = /** @class */ (function () {
6222
6518
  window.removeEventListener('keydown', this.keydownHandler, false);
6223
6519
  }
6224
6520
  if (this.options.onDestroy) {
6225
- this.options.onDestroy();
6521
+ this.options.onDestroy(this);
6226
6522
  }
6227
6523
  };
6228
6524
  DefaultDialog.prototype.isActiveDialog = function () {
@@ -6250,7 +6546,7 @@ var default_dialog_service_DefaultDialog = /** @class */ (function () {
6250
6546
 
6251
6547
  var default_dialog_service_DefaultProgressDialog = /** @class */ (function (_super) {
6252
6548
  default_dialog_service_extends(DefaultProgressDialog, _super);
6253
- function DefaultProgressDialog(options) {
6549
+ function DefaultProgressDialog(options, data) {
6254
6550
  var _this = this;
6255
6551
  var contentElement;
6256
6552
  var progressElement;
@@ -6285,7 +6581,7 @@ var default_dialog_service_DefaultProgressDialog = /** @class */ (function (_sup
6285
6581
  cancelable: false,
6286
6582
  closable: false,
6287
6583
  onDestroy: options.onDestroy
6288
- }) || this;
6584
+ }, data) || this;
6289
6585
  _this.contentElement = contentElement;
6290
6586
  _this.progressElement = progressElement;
6291
6587
  return _this;
@@ -6314,8 +6610,55 @@ var default_dialog_service_DefaultProgressDialog = /** @class */ (function (_sup
6314
6610
  return DefaultProgressDialog;
6315
6611
  }(default_dialog_service_DefaultDialog));
6316
6612
 
6613
+ var DefaultDialogSet = /** @class */ (function () {
6614
+ function DefaultDialogSet(options, dialogService) {
6615
+ this.options = options;
6616
+ this.dialogService = dialogService;
6617
+ this.currentDialog = null;
6618
+ this.currentIndex = 0;
6619
+ this.options = options;
6620
+ this.dialogService = dialogService;
6621
+ }
6622
+ DefaultDialogSet.prototype.getCurrent = function () {
6623
+ return this.currentDialog;
6624
+ };
6625
+ DefaultDialogSet.prototype.openNext = function (data) {
6626
+ return this.open(this.currentIndex + 1, data);
6627
+ };
6628
+ DefaultDialogSet.prototype.openPrev = function (data) {
6629
+ return this.open(this.currentIndex - 1, data);
6630
+ };
6631
+ DefaultDialogSet.prototype.open = function (page, data) {
6632
+ if (page < 0) {
6633
+ this.currentIndex = 0;
6634
+ }
6635
+ else if (page >= this.options.length) {
6636
+ this.currentIndex = this.options.length - 1;
6637
+ }
6638
+ else {
6639
+ this.currentIndex = page;
6640
+ }
6641
+ if (this.currentDialog) {
6642
+ try {
6643
+ this.currentDialog.close();
6644
+ }
6645
+ catch (e) { }
6646
+ }
6647
+ var dlgOptions = this.options[this.currentIndex];
6648
+ this.currentDialog = this.dialogService.open(dlgOptions, data);
6649
+ return this.currentDialog;
6650
+ };
6651
+ DefaultDialogSet.prototype.close = function () {
6652
+ if (this.currentDialog) {
6653
+ this.currentDialog.close();
6654
+ this.currentDialog = null;
6655
+ }
6656
+ };
6657
+ return DefaultDialogSet;
6658
+ }());
6659
+
6317
6660
  //# sourceMappingURL=default_dialog_service.js.map
6318
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/ui/dist/lib/i18n/text_resources.js
6661
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/ui/dist/lib/i18n/text_resources.js
6319
6662
 
6320
6663
  function addEasyDataUITexts() {
6321
6664
  i18n_i18n.updateDefaultTexts({
@@ -6330,11 +6673,12 @@ function addEasyDataUITexts() {
6330
6673
  }
6331
6674
  addEasyDataUITexts();
6332
6675
  //# sourceMappingURL=text_resources.js.map
6333
- // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/30/s/easydata/easydata.js/packs/ui/dist/lib/public_api.js
6676
+ // CONCATENATED MODULE: c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/ui/dist/lib/public_api.js
6334
6677
  // grid
6335
6678
 
6336
6679
 
6337
6680
 
6681
+
6338
6682
  //datetimepicker
6339
6683
 
6340
6684
 
@@ -6352,13 +6696,14 @@ addEasyDataUITexts();
6352
6696
 
6353
6697
 
6354
6698
 
6699
+
6355
6700
  // export dialogs to use outside of context as global
6356
6701
  var dialogs = new DefaultDialogService();
6357
6702
 
6358
6703
  //# sourceMappingURL=public_api.js.map
6359
6704
  // CONCATENATED MODULE: ./src/utils/lcv.ts
6360
6705
  var majVer = 7;
6361
- var minVer = 1;
6706
+ var minVer = 2;
6362
6707
  var magics = [45, 128, 231];
6363
6708
  Math.trunc = Math.trunc || function (x) {
6364
6709
  if (isNaN(x)) {
@@ -6946,167 +7291,170 @@ var model_ex_DataModelEx = /** @class */ (function (_super) {
6946
7291
  }(external_easyqueryCore_["DataModel"]));
6947
7292
 
6948
7293
 
6949
- // CONCATENATED MODULE: ./src/data/eqs_aggr_calculator.ts
6950
- var eqs_aggr_calculator_assign = (undefined && undefined.__assign) || function () {
6951
- eqs_aggr_calculator_assign = Object.assign || function(t) {
6952
- for (var s, i = 1, n = arguments.length; i < n; i++) {
6953
- s = arguments[i];
6954
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6955
- t[p] = s[p];
6956
- }
6957
- return t;
6958
- };
6959
- return eqs_aggr_calculator_assign.apply(this, arguments);
6960
- };
6961
-
7294
+ // CONCATENATED MODULE: ./src/data/data_table_aggr_calculator.ts
6962
7295
 
6963
- var eqs_aggr_calculator_EqAggregatesCalculator = /** @class */ (function () {
6964
- function EqAggregatesCalculator(context) {
7296
+ var data_table_aggr_calculator_DataTableAggregatesCalculator = /** @class */ (function () {
7297
+ function DataTableAggregatesCalculator(context) {
6965
7298
  this.context = context;
7299
+ //stores current totals by level (group) number
7300
+ this.levelsTotals = [];
7301
+ this.prevRow = null;
6966
7302
  this.aggrContainer = new external_easyqueryCore_["EqAggregatesContainer"](context);
6967
7303
  }
6968
- EqAggregatesCalculator.prototype.getAggrContainer = function () {
7304
+ DataTableAggregatesCalculator.prototype.getAggrContainer = function () {
6969
7305
  return this.aggrContainer;
6970
7306
  };
6971
- 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();
6972
7327
  this.aggrContainer.clear();
6973
7328
  options = options || {};
6974
7329
  options.maxLevel = options.maxLevel >= 0
6975
7330
  ? options.maxLevel : 0;
6976
- var levelPromises = [];
6977
- var query = this.context.createQuery();
6978
- query.loadFromData(this.context.getQuery().toJSONData());
6979
- var settings = this.context.getQuery().getAggregationSettings();
6980
- var aggregates = settings.getAggregates();
6981
- var aggrColIds = settings.getAggregates().map(function (a) { return a.colId; });
6982
- var aggrCols = query.getColumns()
6983
- .filter(function (col) { return aggrColIds.indexOf(col.id) >= 0; });
6984
- var _loop_1 = function (col) {
6985
- query.changeColumnType(col, external_easyqueryCore_["ExprTag"].AggregateFunction, { funcId: aggregates.filter(function (a) { return a.colId == col.id; })[0].funcId });
6986
- };
6987
- for (var _i = 0, aggrCols_1 = aggrCols; _i < aggrCols_1.length; _i++) {
6988
- var col = aggrCols_1[_i];
6989
- _loop_1(col);
6990
- }
6991
- //get all non-aggregate columns
6992
- var queryCols = query.getColumns()
6993
- .filter(function (c) { return c.expr.tag !== external_easyqueryCore_["ExprTag"].AggregateFunction; });
6994
- for (var _a = 0, queryCols_1 = queryCols; _a < queryCols_1.length; _a++) {
6995
- var col = queryCols_1[_a];
6996
- col.setHidden(true);
6997
- }
6998
- if (settings.hasRecordCount()) {
6999
- var col = query.createColumn();
7000
- col.caption = settings.COUNT_FIELD_NAME;
7001
- col['_id'] = settings.COUNT_FIELD_NAME;
7002
- var sqlText = 'COUNT(*)';
7003
- var customSqlExpr = new external_easyqueryCore_["Expression"](col);
7004
- customSqlExpr.tag = external_easyqueryCore_["ExprTag"].CustomSql;
7005
- customSqlExpr.sql = sqlText;
7006
- customSqlExpr.baseAttrId = null;
7007
- col.expr = customSqlExpr;
7008
- query.getColumns().push(col);
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);
7009
7336
  }
7010
- if (settings.hasGrandTotals()) {
7011
- levelPromises.push(this.processLevel({
7012
- query: query,
7013
- level: 0,
7014
- groupName: 'Grand Totals',
7015
- resultObtainedCallback: options.resultObtained,
7016
- errorOccurredCallback: options.errorOccurred
7017
- }));
7018
- }
7019
- var groups = settings.getGroups();
7020
- for (var level = 1; level <= groups.length; level++) {
7021
- var group = groups[level - 1];
7022
- for (var _b = 0, queryCols_2 = queryCols; _b < queryCols_2.length; _b++) {
7023
- var col = queryCols_2[_b];
7024
- 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);
7025
7350
  }
7026
- levelPromises.push(this.processLevel({
7027
- query: query,
7028
- level: level,
7029
- groupName: group.name,
7030
- resultObtainedCallback: options.resultObtained,
7031
- errorOccurredCallback: options.errorOccurred
7032
- }));
7033
7351
  }
7034
- return Promise.all(levelPromises)
7035
- .then(function () { return; })
7036
- .catch(function (error) { return console.error(error); });
7352
+ return Promise.resolve();
7037
7353
  };
7038
- EqAggregatesCalculator.prototype.processLevel = function (options) {
7039
- var _this = this;
7040
- var fetcher = this.context.getServices()
7041
- .getDataFetcher();
7042
- var fetchOptions = {
7043
- aux: true,
7044
- query: options.query
7045
- };
7046
- if (this.context.debugMode) {
7047
- 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();
7048
7358
  }
7049
- var resultPromise = fetcher.fetchData(fetchOptions)
7050
- .then(function (result) {
7051
- var dataTable = new easy_data_table_EasyDataTable({
7052
- elasticChunks: true
7053
- });
7054
- var resultSet = result.resultSet;
7055
- for (var _i = 0, _a = resultSet.cols; _i < _a.length; _i++) {
7056
- var col = _a[_i];
7057
- dataTable.columns.add(col);
7058
- }
7059
- for (var _b = 0, _c = resultSet.rows; _b < _c.length; _b++) {
7060
- var row = _c[_b];
7061
- dataTable.addRow(row);
7062
- }
7063
- var levelData = _this.buildLevelData(options.level, dataTable);
7064
- _this.aggrContainer.setAggregates(options.level, levelData);
7065
- if (options.resultObtainedCallback) {
7066
- 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);
7067
7366
  }
7068
- })
7069
- .catch(function (error) {
7070
- if (options.errorOccurredCallback) {
7071
- 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
+ }
7072
7393
  }
7073
- });
7074
- return resultPromise;
7394
+ }
7395
+ return -1;
7075
7396
  };
7076
- EqAggregatesCalculator.prototype.buildLevelData = function (level, dataTable) {
7077
- var aggrSettings = this.context.getQuery().getAggregationSettings();
7078
- var keyColumns = level > 0
7079
- ? aggrSettings.getGroups()[level - 1].columns
7080
- : [];
7081
- var valueColumns = aggrSettings.getAggregates().map(function (a) { return a.colId; });
7082
- if (aggrSettings.hasRecordCount()) {
7083
- 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
+ }
7084
7426
  }
7085
- var data = new Map();
7086
- for (var _i = 0, _a = dataTable.getCachedRows(); _i < _a.length; _i++) {
7087
- var row = _a[_i];
7088
- var key = {};
7089
- var value = {};
7090
- for (var _b = 0, keyColumns_1 = keyColumns; _b < keyColumns_1.length; _b++) {
7091
- var keyCol = keyColumns_1[_b];
7092
- var colIdx = dataTable.columns.getIndex(keyCol);
7093
- if (colIdx >= 0) {
7094
- var keyVal = row.getValue(keyCol);
7095
- if (!aggrSettings.caseSensitiveGroups) {
7096
- keyVal = keyVal.toLowerCase();
7097
- }
7098
- key[keyCol] = keyVal;
7099
- }
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;
7100
7446
  }
7101
- for (var _c = 0, valueColumns_1 = valueColumns; _c < valueColumns_1.length; _c++) {
7102
- var valueCol = valueColumns_1[_c];
7103
- value[valueCol] = row.getValue(valueCol);
7447
+ if (value > columnTotals.max) {
7448
+ columnTotals.max = value;
7104
7449
  }
7105
- data.set(JSON.stringify(key), value);
7106
7450
  }
7107
- return data;
7108
7451
  };
7109
- return EqAggregatesCalculator;
7452
+ DataTableAggregatesCalculator.prototype.needRecalculation = function () {
7453
+ return true;
7454
+ };
7455
+ DataTableAggregatesCalculator.prototype.reset = function () {
7456
+ };
7457
+ return DataTableAggregatesCalculator;
7110
7458
  }());
7111
7459
 
7112
7460
 
@@ -7132,7 +7480,7 @@ external_easyqueryCore_["EqContext"].prototype.useEnterprise = function (keyOrIn
7132
7480
  services.registerDataModelResolver(function (context) { return new model_ex_DataModelEx(); });
7133
7481
  services.registerQueryResolver(function (context) { return new query_ex_QueryEx(context.getModel()); });
7134
7482
  services.registerQueryStorageResolver(function (context) { return new EqServerQueryStorage(context); });
7135
- services.registerAggregatesCalculator(function (context) { return new eqs_aggr_calculator_EqAggregatesCalculator(context); });
7483
+ services.registerAggregatesCalculator(function (context) { return new data_table_aggr_calculator_DataTableAggregatesCalculator(context); });
7136
7484
  if (lcv.__kt === 2) {
7137
7485
  console.warn('EasyQuery.JS is working in the TRIAL MODE!\n'
7138
7486
  + 'Please order a license (https://korzh.com/eq) to get a proper product key.');
@@ -7182,7 +7530,7 @@ function showLCDialog() {
7182
7530
  break;
7183
7531
  default:
7184
7532
  title = "Invalid key for EasyQuery!";
7185
- 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.";
7186
7534
  buttonTitle = 'Get key';
7187
7535
  buttonUrl = 'https://korzh.com/account';
7188
7536
  break;
@@ -7261,13 +7609,182 @@ function hideTrialWM() {
7261
7609
  }
7262
7610
  }
7263
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
+ console.log('Level', options.level, levelData);
7732
+ _this.aggrContainer.setAggregateData(options.level, levelData);
7733
+ if (options.resultObtainedCallback) {
7734
+ options.resultObtainedCallback(result, options.level);
7735
+ }
7736
+ })
7737
+ .catch(function (error) {
7738
+ if (options.errorOccurredCallback) {
7739
+ options.errorOccurredCallback(eqs_aggr_calculator_assign(eqs_aggr_calculator_assign({}, error), { level: options.level }));
7740
+ }
7741
+ });
7742
+ return resultPromise;
7743
+ };
7744
+ EqServerAggregatesCalculator.prototype.buildLevelData = function (level, dataTable) {
7745
+ var aggrSettings = this.context.getQuery().getAggregationSettings();
7746
+ var keyColumns = level > 0
7747
+ ? aggrSettings.getGroups()[level - 1].columns
7748
+ : [];
7749
+ var valueColumns = aggrSettings.getAggregates().map(function (a) { return a.colId; });
7750
+ if (aggrSettings.hasRecordCount()) {
7751
+ valueColumns.push(aggrSettings.COUNT_FIELD_NAME);
7752
+ }
7753
+ var data = new Map();
7754
+ for (var _i = 0, _a = dataTable.getCachedRows(); _i < _a.length; _i++) {
7755
+ var row = _a[_i];
7756
+ var key = {};
7757
+ var value = {};
7758
+ for (var _b = 0, keyColumns_1 = keyColumns; _b < keyColumns_1.length; _b++) {
7759
+ var keyCol = keyColumns_1[_b];
7760
+ var colIdx = dataTable.columns.getIndex(keyCol);
7761
+ if (colIdx >= 0) {
7762
+ var keyVal = row.getValue(keyCol);
7763
+ if (!aggrSettings.caseSensitiveGroups && typeof (keyVal) === 'string') {
7764
+ keyVal = keyVal.toLowerCase();
7765
+ }
7766
+ key[keyCol] = keyVal;
7767
+ }
7768
+ }
7769
+ for (var _c = 0, valueColumns_1 = valueColumns; _c < valueColumns_1.length; _c++) {
7770
+ var valueCol = valueColumns_1[_c];
7771
+ value[valueCol] = row.getValue(valueCol);
7772
+ }
7773
+ data.set(JSON.stringify(key), value);
7774
+ }
7775
+ return data;
7776
+ };
7777
+ EqServerAggregatesCalculator.prototype.needRecalculation = function () {
7778
+ return this._needRecalculation;
7779
+ };
7780
+ EqServerAggregatesCalculator.prototype.reset = function () {
7781
+ this._needRecalculation = true;
7782
+ };
7783
+ return EqServerAggregatesCalculator;
7784
+ }());
7785
+
7786
+
7264
7787
  // CONCATENATED MODULE: ./src/public_api.ts
7265
- /* concated harmony reexport EqAggregatesCalculator */__webpack_require__.d(__webpack_exports__, "EqAggregatesCalculator", function() { return eqs_aggr_calculator_EqAggregatesCalculator; });
7266
- /* concated harmony reexport QueryEx */__webpack_require__.d(__webpack_exports__, "QueryEx", function() { return query_ex_QueryEx; });
7267
- /* concated harmony reexport QueryColumnEx */__webpack_require__.d(__webpack_exports__, "QueryColumnEx", function() { return query_column_ex_QueryColumnEx; });
7268
- /* concated harmony reexport ConditionEx */__webpack_require__.d(__webpack_exports__, "ConditionEx", function() { return condition_ex_ConditionEx; });
7269
- /* concated harmony reexport DataModelEx */__webpack_require__.d(__webpack_exports__, "DataModelEx", function() { return model_ex_DataModelEx; });
7270
- /* concated harmony reexport EqServerQueryStorage */__webpack_require__.d(__webpack_exports__, "EqServerQueryStorage", function() { return EqServerQueryStorage; });
7271
7788
 
7272
7789
 
7273
7790