@michalrakus/x-react-web-lib 1.28.0 → 1.30.0

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.
@@ -131,6 +131,7 @@ var XMultilineSwitch_1 = require("./XMultilineSwitch");
131
131
  var XMultilineRenderer_1 = require("./XMultilineRenderer");
132
132
  var XHtmlRenderer_1 = require("./XHtmlRenderer");
133
133
  var XOcfDropdown_1 = require("./XOcfDropdown");
134
+ var XFieldSetBase_1 = require("../XFieldSet/XFieldSetBase");
134
135
  var XLazyDataTable = function (props) {
135
136
  var _a;
136
137
  // must be here, is used in createInitFilters()
@@ -144,7 +145,7 @@ var XLazyDataTable = function (props) {
144
145
  var column = columns_1_1.value;
145
146
  var xLazyColumn = column; // nevedel som to krajsie...
146
147
  if (xLazyColumn.props.aggregateType) {
147
- aggregateItems.push({ field: xLazyColumn.props.field, aggregateType: xLazyColumn.props.aggregateType });
148
+ aggregateItems.push({ field: xLazyColumn.props.field, aggregateFunction: xLazyColumn.props.aggregateType });
148
149
  }
149
150
  }
150
151
  }
@@ -184,7 +185,7 @@ var XLazyDataTable = function (props) {
184
185
  };
185
186
  var getFilterMatchMode = function (xField) {
186
187
  var filterMatchMode;
187
- if (xField.type === "string") {
188
+ if (xField.type === "string" || xField.type === "jsonb") {
188
189
  filterMatchMode = api_1.FilterMatchMode.CONTAINS;
189
190
  }
190
191
  // zatial vsetky ostatne EQUALS
@@ -217,12 +218,16 @@ var XLazyDataTable = function (props) {
217
218
  };
218
219
  // premenne platne pre cely component (obdoba member premennych v class-e)
219
220
  var dataTableEl = (0, react_1.useRef)(null);
220
- var customFilterItems = XUtils_1.XUtils.createCustomFilterItems(props.customFilter);
221
+ var customFilterItems = XUtilsCommon_1.XUtilsCommon.createCustomFilterItems(props.customFilter);
221
222
  var aggregateItems = createAggregateItems();
222
- var _b = __read((0, react_1.useState)({ rowList: [], totalRecords: 0, aggregateValues: [] }), 2), value = _b[0], setValue = _b[1];
223
- var _c = __read((0, react_1.useState)(false), 2), loading = _c[0], setLoading = _c[1];
224
- var _d = __read((0, react_1.useState)(0), 2), first = _d[0], setFirst = _d[1];
225
- var _e = __read((0, react_1.useState)(props.paginator ? props.rows : undefined), 2), rows = _e[0], setRows = _e[1];
223
+ // ak mame fieldSet stlpce (stlpce ktore maju zadany fieldSetId a zobrazuju hodnoty podla fieldSet-u),
224
+ // tak sem nacitame mapy umoznujuce ziskanie labelov zakliknutych field-ov
225
+ // poznamka: uz by sa zislo mat vytvorene objekty (instancie) pre stlpce a do nich zapisovat pripadny XFieldSetMap, filter (teraz je vo "filters")
226
+ var _b = __read((0, react_1.useState)({}), 2), xFieldSetMaps = _b[0], setXFieldSetMaps = _b[1];
227
+ var _c = __read((0, react_1.useState)({ rowList: [], totalRecords: 0, aggregateValues: [] }), 2), value = _c[0], setValue = _c[1];
228
+ var _d = __read((0, react_1.useState)(false), 2), loading = _d[0], setLoading = _d[1];
229
+ var _e = __read((0, react_1.useState)(0), 2), first = _e[0], setFirst = _e[1];
230
+ var _f = __read((0, react_1.useState)(props.paginator ? props.rows : undefined), 2), rows = _f[0], setRows = _f[1];
226
231
  var filtersInit = createInitFilters();
227
232
  if (props.filters) {
228
233
  filtersInit = __assign(__assign({}, filtersInit), props.filters); // items from props.filters will replace existing items in filtersInit
@@ -234,22 +239,22 @@ var XLazyDataTable = function (props) {
234
239
  }
235
240
  // ak mame props.searchBrowseParams.customFilterFunction, pridame filter
236
241
  if (props.searchBrowseParams.customFilter) {
237
- customFilterItems = XUtils_1.XUtils.filterAnd(customFilterItems, XUtils_1.XUtils.evalFilter(props.searchBrowseParams.customFilter));
242
+ customFilterItems = XUtilsCommon_1.XUtilsCommon.filterAnd(customFilterItems, XUtils_1.XUtils.evalFilter(props.searchBrowseParams.customFilter));
238
243
  }
239
244
  }
240
- var _f = __read((0, react_1.useState)(filtersInit), 2), filters = _f[0], setFilters = _f[1]; // filtrovanie na "controlled manner" (moze sa sem nainicializovat nejaka hodnota)
245
+ var _g = __read((0, react_1.useState)(filtersInit), 2), filters = _g[0], setFilters = _g[1]; // filtrovanie na "controlled manner" (moze sa sem nainicializovat nejaka hodnota)
241
246
  var initFtsInputValue = props.fullTextSearch ? createInitFtsInputValue() : undefined;
242
- var _g = __read((0, react_1.useState)(initFtsInputValue), 2), ftsInputValue = _g[0], setFtsInputValue = _g[1];
243
- var _h = __read((0, react_1.useState)(undefined), 2), optionalCustomFilter = _h[0], setOptionalCustomFilter = _h[1];
244
- var _j = __read((0, react_1.useState)(props.multilineSwitchInitValue), 2), multilineSwitchValue = _j[0], setMultilineSwitchValue = _j[1];
245
- var _k = __read((0, react_1.useState)(XUtils_1.XUtils.createMultiSortMeta(props.sortField)), 2), multiSortMeta = _k[0], setMultiSortMeta = _k[1];
246
- var _l = __read((0, react_1.useState)(null), 2), selectedRow = _l[0], setSelectedRow = _l[1];
247
- var _m = __read((_a = props.dataLoadedState) !== null && _a !== void 0 ? _a : (0, react_1.useState)(false), 2), dataLoaded = _m[0], setDataLoaded = _m[1]; // priznak kde si zapiseme, ci uz sme nacitali data
248
- var _o = __read((0, react_1.useState)({ dialogOpened: false }), 2), exportRowsDialogState = _o[0], setExportRowsDialogState = _o[1];
247
+ var _h = __read((0, react_1.useState)(initFtsInputValue), 2), ftsInputValue = _h[0], setFtsInputValue = _h[1];
248
+ var _j = __read((0, react_1.useState)(undefined), 2), optionalCustomFilter = _j[0], setOptionalCustomFilter = _j[1];
249
+ var _k = __read((0, react_1.useState)(props.multilineSwitchInitValue), 2), multilineSwitchValue = _k[0], setMultilineSwitchValue = _k[1];
250
+ var _l = __read((0, react_1.useState)(XUtilsCommon_1.XUtilsCommon.createMultiSortMeta(props.sortField)), 2), multiSortMeta = _l[0], setMultiSortMeta = _l[1];
251
+ var _m = __read((0, react_1.useState)(null), 2), selectedRow = _m[0], setSelectedRow = _m[1];
252
+ var _o = __read((_a = props.dataLoadedState) !== null && _a !== void 0 ? _a : (0, react_1.useState)(false), 2), dataLoaded = _o[0], setDataLoaded = _o[1]; // priznak kde si zapiseme, ci uz sme nacitali data
253
+ var _p = __read((0, react_1.useState)({ dialogOpened: false }), 2), exportRowsDialogState = _p[0], setExportRowsDialogState = _p[1];
249
254
  //const [exportRowsDialogRowCount, setExportRowsDialogRowCount] = useState<number>(); // param pre dialog
250
- var _p = __read((0, react_1.useState)(filtersInit), 2), filtersAfterFiltering = _p[0], setFiltersAfterFiltering = _p[1]; // sem si odkladame stav filtra po kliknuti na button Filter (chceme exportovat presne to co vidno vyfiltrovane)
251
- var _q = __read((0, react_1.useState)(initFtsInputValue), 2), ftsInputValueAfterFiltering = _q[0], setFtsInputValueAfterFiltering = _q[1]; // tak isto ako filtersAfterFiltering
252
- var _r = __read((0, react_1.useState)(undefined), 2), optionalCustomFilterAfterFiltering = _r[0], setOptionalCustomFilterAfterFiltering = _r[1]; // tak isto ako filtersAfterFiltering
255
+ var _q = __read((0, react_1.useState)(filtersInit), 2), filtersAfterFiltering = _q[0], setFiltersAfterFiltering = _q[1]; // sem si odkladame stav filtra po kliknuti na button Filter (chceme exportovat presne to co vidno vyfiltrovane)
256
+ var _r = __read((0, react_1.useState)(initFtsInputValue), 2), ftsInputValueAfterFiltering = _r[0], setFtsInputValueAfterFiltering = _r[1]; // tak isto ako filtersAfterFiltering
257
+ var _s = __read((0, react_1.useState)(undefined), 2), optionalCustomFilterAfterFiltering = _s[0], setOptionalCustomFilterAfterFiltering = _s[1]; // tak isto ako filtersAfterFiltering
253
258
  // parameter [] zabezpeci ze sa metoda zavola len po prvom renderingu (a nie po kazdej zmene stavu (zavolani setNieco()))
254
259
  (0, react_1.useEffect)(function () {
255
260
  // jednoduchy sposob - nepouzivame parameter props.displayed a priznak dataLoaded
@@ -318,9 +323,22 @@ var XLazyDataTable = function (props) {
318
323
  setOptionalCustomFilter(undefined);
319
324
  }
320
325
  };
321
- var loadData = function () {
322
- loadDataBase(createFindParam());
323
- };
326
+ var loadData = function () { return __awaiter(void 0, void 0, void 0, function () {
327
+ return __generator(this, function (_a) {
328
+ switch (_a.label) {
329
+ case 0:
330
+ // pre poriadok zaserializujeme obidve operacie (aj ked teoreticky by to malo fungovat aj bez serializovania)
331
+ return [4 /*yield*/, loadXFieldSetMaps()];
332
+ case 1:
333
+ // pre poriadok zaserializujeme obidve operacie (aj ked teoreticky by to malo fungovat aj bez serializovania)
334
+ _a.sent();
335
+ return [4 /*yield*/, loadDataBase(createFindParam())];
336
+ case 2:
337
+ _a.sent();
338
+ return [2 /*return*/];
339
+ }
340
+ });
341
+ }); };
324
342
  var createFindParam = function () {
325
343
  return {
326
344
  resultType: FindParam_1.ResultType.RowCountAndPagedRows,
@@ -335,6 +353,42 @@ var XLazyDataTable = function (props) {
335
353
  aggregateItems: aggregateItems
336
354
  };
337
355
  };
356
+ var loadXFieldSetMaps = function () { return __awaiter(void 0, void 0, void 0, function () {
357
+ var fieldSetIds, xFieldSetMetaList, xFieldSetMapsLocal, xFieldSetMetaList_1, xFieldSetMetaList_1_1, xFieldSetMeta;
358
+ var e_3, _a;
359
+ return __generator(this, function (_b) {
360
+ switch (_b.label) {
361
+ case 0:
362
+ fieldSetIds = getFieldSetIds();
363
+ if (!(fieldSetIds.length > 0)) return [3 /*break*/, 2];
364
+ return [4 /*yield*/, XUtils_1.XUtils.fetchRows('XFieldSetMeta', { where: "[fieldSetId] IN (:...fieldSetIdList)", params: { fieldSetIdList: fieldSetIds } })];
365
+ case 1:
366
+ xFieldSetMetaList = _b.sent();
367
+ // check
368
+ if (xFieldSetMetaList.length !== fieldSetIds.length) {
369
+ throw "One or more of fieldSetIds \"".concat(fieldSetIds.join(", "), "\" was not found in DB in the table for Entity XFieldSetMeta");
370
+ }
371
+ xFieldSetMapsLocal = {};
372
+ try {
373
+ for (xFieldSetMetaList_1 = __values(xFieldSetMetaList), xFieldSetMetaList_1_1 = xFieldSetMetaList_1.next(); !xFieldSetMetaList_1_1.done; xFieldSetMetaList_1_1 = xFieldSetMetaList_1.next()) {
374
+ xFieldSetMeta = xFieldSetMetaList_1_1.value;
375
+ xFieldSetMapsLocal[xFieldSetMeta.fieldSetId] = XFieldSetBase_1.XFieldSetBase.createXFieldXFieldMetaMap(xFieldSetMeta);
376
+ }
377
+ }
378
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
379
+ finally {
380
+ try {
381
+ if (xFieldSetMetaList_1_1 && !xFieldSetMetaList_1_1.done && (_a = xFieldSetMetaList_1.return)) _a.call(xFieldSetMetaList_1);
382
+ }
383
+ finally { if (e_3) throw e_3.error; }
384
+ }
385
+ // save created structures
386
+ setXFieldSetMaps(xFieldSetMapsLocal);
387
+ _b.label = 2;
388
+ case 2: return [2 /*return*/];
389
+ }
390
+ });
391
+ }); };
338
392
  var loadDataBase = function (findParam) { return __awaiter(void 0, void 0, void 0, function () {
339
393
  var findResult;
340
394
  return __generator(this, function (_a) {
@@ -380,12 +434,12 @@ var XLazyDataTable = function (props) {
380
434
  return xFullTextSearch;
381
435
  };
382
436
  var createXCustomFilterItems = function (customFilterItems, optionalCustomFilter) {
383
- return XUtils_1.XUtils.filterAnd(customFilterItems, optionalCustomFilter === null || optionalCustomFilter === void 0 ? void 0 : optionalCustomFilter.filter);
437
+ return XUtilsCommon_1.XUtilsCommon.filterAnd(customFilterItems, optionalCustomFilter === null || optionalCustomFilter === void 0 ? void 0 : optionalCustomFilter.filter);
384
438
  };
385
439
  var getFields = function (addPropsFields) {
386
440
  // krasne zobrazi cely objekt!
387
441
  //console.log(dataTableEl.current);
388
- var e_3, _a;
442
+ var e_4, _a;
389
443
  var fields = [];
390
444
  var columns = dataTableEl.current.props.children;
391
445
  try {
@@ -394,12 +448,12 @@ var XLazyDataTable = function (props) {
394
448
  fields.push(column.props.field);
395
449
  }
396
450
  }
397
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
451
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
398
452
  finally {
399
453
  try {
400
454
  if (columns_3_1 && !columns_3_1.done && (_a = columns_3.return)) _a.call(columns_3);
401
455
  }
402
- finally { if (e_3) throw e_3.error; }
456
+ finally { if (e_4) throw e_4.error; }
403
457
  }
404
458
  if (addPropsFields) {
405
459
  if (props.fields) {
@@ -411,7 +465,7 @@ var XLazyDataTable = function (props) {
411
465
  var getHeaders = function () {
412
466
  // krasne zobrazi cely objekt!
413
467
  //console.log(dataTableEl.current);
414
- var e_4, _a;
468
+ var e_5, _a;
415
469
  var headers = [];
416
470
  var columns = dataTableEl.current.props.children;
417
471
  try {
@@ -421,17 +475,17 @@ var XLazyDataTable = function (props) {
421
475
  headers.push(column.props.header);
422
476
  }
423
477
  }
424
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
478
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
425
479
  finally {
426
480
  try {
427
481
  if (columns_4_1 && !columns_4_1.done && (_a = columns_4.return)) _a.call(columns_4);
428
482
  }
429
- finally { if (e_4) throw e_4.error; }
483
+ finally { if (e_5) throw e_5.error; }
430
484
  }
431
485
  return headers;
432
486
  };
433
487
  var getWidths = function () {
434
- var e_5, _a;
488
+ var e_6, _a;
435
489
  var _b;
436
490
  // vrati sirky stlpcov napr. ['7.75rem', '20rem', '8.5rem', '8.5rem', '6rem']
437
491
  // nevracia aktualne sirky stlpcov (po manualnom rozsireni) ale tie ktore boli nastavene/vypocitane v kode
@@ -443,15 +497,37 @@ var XLazyDataTable = function (props) {
443
497
  widths.push((_b = column.props.headerStyle) === null || _b === void 0 ? void 0 : _b.width);
444
498
  }
445
499
  }
446
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
500
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
447
501
  finally {
448
502
  try {
449
503
  if (columns_5_1 && !columns_5_1.done && (_a = columns_5.return)) _a.call(columns_5);
450
504
  }
451
- finally { if (e_5) throw e_5.error; }
505
+ finally { if (e_6) throw e_6.error; }
452
506
  }
453
507
  return widths;
454
508
  };
509
+ var getFieldSetIds = function () {
510
+ var e_7, _a;
511
+ var fieldSetIds = [];
512
+ // warning note: props.children are used to get props of XLazyColumn whereas dataTableEl.current.props.children are used to get props of Primereact DataTable
513
+ var columns = props.children;
514
+ try {
515
+ for (var columns_6 = __values(columns), columns_6_1 = columns_6.next(); !columns_6_1.done; columns_6_1 = columns_6.next()) {
516
+ var column = columns_6_1.value;
517
+ if (column.props.fieldSetId) {
518
+ fieldSetIds.push(column.props.fieldSetId);
519
+ }
520
+ }
521
+ }
522
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
523
+ finally {
524
+ try {
525
+ if (columns_6_1 && !columns_6_1.done && (_a = columns_6.return)) _a.call(columns_6);
526
+ }
527
+ finally { if (e_7) throw e_7.error; }
528
+ }
529
+ return fieldSetIds;
530
+ };
455
531
  var hasContentTypeHtml = function () {
456
532
  var columns = props.children;
457
533
  return columns.some(function (column) { return column.props.contentType === "html"; });
@@ -489,7 +565,7 @@ var XLazyDataTable = function (props) {
489
565
  }
490
566
  };
491
567
  var onClickRemoveRow = function () { return __awaiter(void 0, void 0, void 0, function () {
492
- var reread, e_6, e_7;
568
+ var reread, e_8, e_9;
493
569
  return __generator(this, function (_a) {
494
570
  switch (_a.label) {
495
571
  case 0:
@@ -504,8 +580,8 @@ var XLazyDataTable = function (props) {
504
580
  reread = _a.sent();
505
581
  return [3 /*break*/, 4];
506
582
  case 3:
507
- e_6 = _a.sent();
508
- XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'), e_6);
583
+ e_8 = _a.sent();
584
+ XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'), e_8);
509
585
  return [3 /*break*/, 4];
510
586
  case 4:
511
587
  if (reread) {
@@ -527,8 +603,8 @@ var XLazyDataTable = function (props) {
527
603
  _a.sent();
528
604
  return [3 /*break*/, 9];
529
605
  case 8:
530
- e_7 = _a.sent();
531
- XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'), e_7);
606
+ e_9 = _a.sent();
607
+ XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'), e_9);
532
608
  return [3 /*break*/, 9];
533
609
  case 9:
534
610
  loadData();
@@ -702,12 +778,17 @@ var XLazyDataTable = function (props) {
702
778
  }
703
779
  return betweenFilter;
704
780
  };
705
- var valueAsUI = function (value, xField, contentType) {
781
+ var valueAsUI = function (value, xField, contentType, fieldSetId) {
706
782
  var valueResult;
707
783
  if (xField.type === "boolean") {
708
784
  // TODO - efektivnejsie by bolo renderovat len prislusne ikonky
709
785
  valueResult = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: value, disabled: true });
710
786
  }
787
+ else if (xField.type === "jsonb" && fieldSetId) {
788
+ // zatial sem dame; este by sme mohli dat hlbsie do convertValue/convertValueBase (aby fungovalo aj pre excel) ale tam je problem ze nemame k dispozicii "xFieldSetMaps"
789
+ // poznamka: krajsie by bolo brat fieldSetId z xField ale to by sme museli vytvorit decorator na backend-e...
790
+ valueResult = XFieldSetBase_1.XFieldSetBase.xFieldSetValuesAsUI(value, xFieldSetMaps[fieldSetId]);
791
+ }
711
792
  else {
712
793
  if (contentType === "html") {
713
794
  // value should be always string (xField.type === "string")
@@ -732,11 +813,11 @@ var XLazyDataTable = function (props) {
732
813
  var bodyValue;
733
814
  var rowDataValue = XUtilsCommon_1.XUtilsCommon.getValueOrValueListByPath(rowData, columnProps.field);
734
815
  if (Array.isArray(rowDataValue)) {
735
- var elemList = rowDataValue.map(function (value) { return valueAsUI(value, xField, columnProps.contentType); });
816
+ var elemList = rowDataValue.map(function (value) { return valueAsUI(value, xField, columnProps.contentType, columnProps.fieldSetId); });
736
817
  bodyValue = react_1.default.createElement(XMultilineRenderer_1.XMultilineRenderer, { valueList: elemList, renderType: multilineSwitchValue, fewLinesCount: props.multilineSwitchFewLinesCount });
737
818
  }
738
819
  else {
739
- bodyValue = valueAsUI(rowDataValue, xField, columnProps.contentType);
820
+ bodyValue = valueAsUI(rowDataValue, xField, columnProps.contentType, columnProps.fieldSetId);
740
821
  }
741
822
  return bodyValue;
742
823
  };
@@ -73,6 +73,7 @@ var XUtils_1 = require("./XUtils");
73
73
  var dialog_1 = require("primereact/dialog");
74
74
  var XFormComponent_1 = require("./XFormComponent");
75
75
  var XUtilsMetadataCommon_1 = require("../serverApi/XUtilsMetadataCommon");
76
+ var XUtilsCommon_1 = require("../serverApi/XUtilsCommon");
76
77
  var XSearchButton = /** @class */ (function (_super) {
77
78
  __extends(XSearchButton, _super);
78
79
  function XSearchButton(props) {
@@ -138,7 +139,7 @@ var XSearchButton = /** @class */ (function (_super) {
138
139
  case 1:
139
140
  displayFieldFilter = { where: "[".concat(props.displayField, "] LIKE :xDisplayFieldValue"), params: { "xDisplayFieldValue": "".concat(e.target.value, "%") } };
140
141
  customFilter = this.getFilterBase(this.props.filter);
141
- return [4 /*yield*/, XUtils_1.XUtils.fetchRows(this.xAssoc.entityName, XUtils_1.XUtils.filterAnd(displayFieldFilter, customFilter))];
142
+ return [4 /*yield*/, XUtils_1.XUtils.fetchRows(this.xAssoc.entityName, XUtilsCommon_1.XUtilsCommon.filterAnd(displayFieldFilter, customFilter))];
142
143
  case 2:
143
144
  rows = _a.sent();
144
145
  if (rows.length === 0) {
@@ -3,7 +3,7 @@ import { CsvDecimalFormat, CsvEncoding, CsvSeparator, ExportType, XMultilineExpo
3
3
  import React from "react";
4
4
  import { XEnvVar } from "./XEnvVars";
5
5
  import { XError, XErrorMap } from "./XErrors";
6
- import { XCustomFilter, XCustomFilterItem } from "../serverApi/FindParam";
6
+ import { XCustomFilter } from "../serverApi/FindParam";
7
7
  import { DataTableSortMeta } from "primereact/datatable";
8
8
  import { XObject } from "./XObject";
9
9
  import { XTableFieldReadOnlyProp } from "./XFormDataTable2";
@@ -86,26 +86,6 @@ export declare class XUtils {
86
86
  */
87
87
  static getEnvVarValue(envVarEnum: XEnvVar): string;
88
88
  static removeRow(entity: string, row: any): Promise<void>;
89
- static arrayMoveElement(array: any[], position: number, offset: number): void;
90
- static arraySort(array: any[], fieldOrStringFunction: string | ((item: any) => string)): any[];
91
- /**
92
- * returns true, if param item is member of the array
93
- * remark: null/undefined items in array are ignored, item = null/undefined is ignored
94
- *
95
- * @param array
96
- * @param item
97
- * @param idField
98
- */
99
- static arrayIncludes<T>(array: T[], item: T, idField: string): boolean;
100
- /**
101
- * returns intersection of 2 row lists
102
- * remark: null/undefined items in both array1 and array2 are ignored
103
- *
104
- * @param array1
105
- * @param array2
106
- * @param idField
107
- */
108
- static arrayIntersect<T>(array1: T[], array2: T[], idField: string): T[];
109
89
  static isReadOnly(path: string, readOnlyInit?: boolean): boolean;
110
90
  static isReadOnlyTableField(path: string | undefined, readOnly: XTableFieldReadOnlyProp | undefined, object: XObject | null, tableRow: any): boolean;
111
91
  static markNotNull(label: string): string;
@@ -119,10 +99,6 @@ export declare class XUtils {
119
99
  static getErrorMessages(xErrorMap: XErrorMap): string;
120
100
  static getErrorMessage(xError: XError): string | undefined;
121
101
  static normalizeString(value: string): string;
122
- static createCustomFilterItems(customFilter: XCustomFilter | undefined): XCustomFilterItem[] | undefined;
123
- static createMultiSortMeta(sortField: string | DataTableSortMeta[] | undefined): DataTableSortMeta[] | undefined;
124
- static filterAnd(...filters: (XCustomFilter | undefined)[]): XCustomFilterItem[] | undefined;
125
- static filterIdIn(idField: string, idList: number[]): XCustomFilter;
126
102
  static evalFilter(filter: XFilterOrFunction | undefined): XCustomFilter | undefined;
127
103
  static isTableRowInserted(tableRow: any): boolean;
128
104
  static xViewStatus(xViewStatusOrBoolean: XViewStatusOrBoolean): XViewStatus;
@@ -73,15 +73,6 @@ var __read = (this && this.__read) || function (o, n) {
73
73
  }
74
74
  return ar;
75
75
  };
76
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
77
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
78
- if (ar || !(i in from)) {
79
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
80
- ar[i] = from[i];
81
- }
82
- }
83
- return to.concat(ar || Array.prototype.slice.call(from));
84
- };
85
76
  Object.defineProperty(exports, "__esModule", { value: true });
86
77
  exports.XUtils = exports.XViewStatus = exports.OperationType = void 0;
87
78
  var XUtilsMetadata_1 = require("./XUtilsMetadata");
@@ -276,7 +267,7 @@ var XUtils = /** @class */ (function () {
276
267
  return __generator(this, function (_a) {
277
268
  switch (_a.label) {
278
269
  case 0:
279
- findParam = { resultType: FindParam_1.ResultType.AllRows, entity: entity, customFilterItems: XUtils.createCustomFilterItems(customFilter), multiSortMeta: XUtils.createMultiSortMeta(sortField), fields: fields };
270
+ findParam = { resultType: FindParam_1.ResultType.AllRows, entity: entity, customFilterItems: XUtilsCommon_1.XUtilsCommon.createCustomFilterItems(customFilter), multiSortMeta: XUtilsCommon_1.XUtilsCommon.createMultiSortMeta(sortField), fields: fields };
280
271
  return [4 /*yield*/, XUtils.fetchOne('lazyDataTableFindRows', findParam)];
281
272
  case 1:
282
273
  rowList = (_a.sent()).rowList;
@@ -292,7 +283,7 @@ var XUtils = /** @class */ (function () {
292
283
  return __generator(this, function (_a) {
293
284
  switch (_a.label) {
294
285
  case 0:
295
- findParam = { resultType: FindParam_1.ResultType.OnlyRowCount, entity: entity, customFilterItems: XUtils.createCustomFilterItems(customFilter) };
286
+ findParam = { resultType: FindParam_1.ResultType.OnlyRowCount, entity: entity, customFilterItems: XUtilsCommon_1.XUtilsCommon.createCustomFilterItems(customFilter) };
296
287
  return [4 /*yield*/, XUtils.fetchOne('lazyDataTableFindRows', findParam)];
297
288
  case 1:
298
289
  totalRecords = (_a.sent()).totalRecords;
@@ -526,85 +517,6 @@ var XUtils = /** @class */ (function () {
526
517
  });
527
518
  });
528
519
  };
529
- // TODO - prehodit do XUtilsCommon
530
- XUtils.arrayMoveElement = function (array, position, offset) {
531
- var element = array[position];
532
- array.splice(position, 1);
533
- var positionNew = position + offset;
534
- if (positionNew > array.length) {
535
- positionNew = positionNew - array.length - 1; // element goes to the begin
536
- }
537
- else if (positionNew < 0) {
538
- positionNew = array.length + positionNew + 1; // element goes to the end
539
- }
540
- if (positionNew >= 0 && positionNew <= array.length) {
541
- array.splice(positionNew, 0, element);
542
- }
543
- };
544
- // TODO - prehodit do XUtilsCommon
545
- XUtils.arraySort = function (array, fieldOrStringFunction) {
546
- var stringFunction;
547
- if (typeof fieldOrStringFunction === 'string') {
548
- stringFunction = function (item) { return item[fieldOrStringFunction]; };
549
- }
550
- else {
551
- stringFunction = fieldOrStringFunction;
552
- }
553
- return array.sort(function (suggestion1, suggestion2) {
554
- var value1 = stringFunction(suggestion1);
555
- var value2 = stringFunction(suggestion2);
556
- if (value1 > value2) {
557
- return 1;
558
- }
559
- else if (value1 < value2) {
560
- return -1;
561
- }
562
- else {
563
- return 0;
564
- }
565
- });
566
- };
567
- // TODO - prehodit do XUtilsCommon
568
- /**
569
- * returns true, if param item is member of the array
570
- * remark: null/undefined items in array are ignored, item = null/undefined is ignored
571
- *
572
- * @param array
573
- * @param item
574
- * @param idField
575
- */
576
- XUtils.arrayIncludes = function (array, item, idField) {
577
- return item && array.some(function (arrayItem) { return arrayItem && arrayItem[idField] === item[idField]; });
578
- };
579
- // TODO - prehodit do XUtilsCommon
580
- /**
581
- * returns intersection of 2 row lists
582
- * remark: null/undefined items in both array1 and array2 are ignored
583
- *
584
- * @param array1
585
- * @param array2
586
- * @param idField
587
- */
588
- XUtils.arrayIntersect = function (array1, array2, idField) {
589
- var e_6, _a;
590
- var array2IdSet = new Set();
591
- try {
592
- for (var array2_1 = __values(array2), array2_1_1 = array2_1.next(); !array2_1_1.done; array2_1_1 = array2_1.next()) {
593
- var item = array2_1_1.value;
594
- if (item) {
595
- array2IdSet.add(item[idField]);
596
- }
597
- }
598
- }
599
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
600
- finally {
601
- try {
602
- if (array2_1_1 && !array2_1_1.done && (_a = array2_1.return)) _a.call(array2_1);
603
- }
604
- finally { if (e_6) throw e_6.error; }
605
- }
606
- return array1.filter(function (item) { return item && array2IdSet.has(item[idField]); });
607
- };
608
520
  // helper
609
521
  XUtils.isReadOnly = function (path, readOnlyInit) {
610
522
  // ak mame path dlzky 2 a viac, field je vzdy readOnly
@@ -696,7 +608,7 @@ var XUtils = /** @class */ (function () {
696
608
  // pomocna metodka
697
609
  // ak nie su v xErrorMap ziadne chyby, vrati ""
698
610
  XUtils.getErrorMessages = function (xErrorMap) {
699
- var e_7, _a;
611
+ var e_6, _a;
700
612
  var _b;
701
613
  var msg = "";
702
614
  try {
@@ -710,12 +622,12 @@ var XUtils = /** @class */ (function () {
710
622
  }
711
623
  }
712
624
  }
713
- catch (e_7_1) { e_7 = { error: e_7_1 }; }
625
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
714
626
  finally {
715
627
  try {
716
628
  if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
717
629
  }
718
- finally { if (e_7) throw e_7.error; }
630
+ finally { if (e_6) throw e_6.error; }
719
631
  }
720
632
  return msg;
721
633
  };
@@ -749,75 +661,6 @@ var XUtils = /** @class */ (function () {
749
661
  }
750
662
  return value;
751
663
  };
752
- // pomocna metodka - konvertuje XCustomFilter -> XCustomFilterItem[]
753
- XUtils.createCustomFilterItems = function (customFilter) {
754
- var customFilterItems = undefined;
755
- if (customFilter) {
756
- if (Array.isArray(customFilter)) {
757
- customFilterItems = customFilter;
758
- }
759
- else {
760
- customFilterItems = [customFilter];
761
- }
762
- }
763
- return customFilterItems;
764
- };
765
- // pomocna metodka - konvertuje sortField -> DataTableSortMeta[]
766
- XUtils.createMultiSortMeta = function (sortField) {
767
- var multiSortMeta = undefined;
768
- if (sortField) {
769
- if (Array.isArray(sortField)) {
770
- multiSortMeta = sortField;
771
- }
772
- else {
773
- // default order is asc, supported is also value in form "<column name> desc"
774
- var order = 1;
775
- var fieldAndOrder = sortField.split(' ');
776
- if (fieldAndOrder.length === 2) {
777
- sortField = fieldAndOrder[0];
778
- if (fieldAndOrder[1].toLowerCase() === "desc") {
779
- order = -1;
780
- }
781
- }
782
- multiSortMeta = [{ field: sortField, order: order }];
783
- }
784
- }
785
- return multiSortMeta;
786
- };
787
- // pomocna metodka
788
- XUtils.filterAnd = function () {
789
- var e_8, _a;
790
- var filters = [];
791
- for (var _i = 0; _i < arguments.length; _i++) {
792
- filters[_i] = arguments[_i];
793
- }
794
- var customFilterItemsResult = undefined;
795
- if (filters.length > 0) {
796
- customFilterItemsResult = [];
797
- try {
798
- for (var filters_1 = __values(filters), filters_1_1 = filters_1.next(); !filters_1_1.done; filters_1_1 = filters_1.next()) {
799
- var filter = filters_1_1.value;
800
- var customFilterItems = XUtils.createCustomFilterItems(filter);
801
- if (customFilterItems) {
802
- customFilterItemsResult.push.apply(customFilterItemsResult, __spreadArray([], __read(customFilterItems), false));
803
- }
804
- }
805
- }
806
- catch (e_8_1) { e_8 = { error: e_8_1 }; }
807
- finally {
808
- try {
809
- if (filters_1_1 && !filters_1_1.done && (_a = filters_1.return)) _a.call(filters_1);
810
- }
811
- finally { if (e_8) throw e_8.error; }
812
- }
813
- }
814
- return customFilterItemsResult;
815
- };
816
- // pomocna metodka
817
- // ak je idList prazdny, vytvori podmienku id IN (0) a nevrati ziadne zaznamy
818
- XUtils.filterIdIn = function (idField, idList) {
819
- return { where: "[".concat(idField, "] IN (:...idList)"), params: { "idList": idList.length > 0 ? idList : [0] } };
820
- };
821
664
  // pomocna metodka
822
665
  XUtils.evalFilter = function (filter) {
823
666
  var customFilter = undefined;
@@ -12,6 +12,7 @@
12
12
  "removeRowConfirm": "Are you sure to remove the selected row?",
13
13
  "removeRowFailed": "Remove row failed.",
14
14
  "newRow": "new row",
15
+ "ok": "Ok",
15
16
  "save": "Save",
16
17
  "cancel": "Cancel",
17
18
  "expRowCount": "Row count",
@@ -27,8 +28,12 @@
27
28
  "fieldSetSaveEditConfirm": "Are you sure to save the form?",
28
29
  "fieldSetCancelEditConfirm": "Are you sure to cancel editing? All changes will be lost.",
29
30
  "fieldSetRemoveFieldConfirm": "Are you sure to remove the field?",
31
+ "runStatisticMissingDateField": "Warning:\nThe following statistic fields have date field not filled in:\n\"{fieldsWithoutDate}\".\nNo condition for date will be applied for these statistic fields.",
30
32
  "upload": "Upload",
31
33
  "yes": "yes",
32
- "no": "no"
34
+ "no": "no",
35
+ "dateFrom": "Date from",
36
+ "dateTo": "Date to",
37
+ "year": "Year"
33
38
  }
34
39
  }
@@ -19,15 +19,15 @@ export interface XFullTextSearch {
19
19
  splitValue: boolean;
20
20
  matchMode: 'startsWith' | 'contains' | 'endsWith' | 'equals';
21
21
  }
22
- export declare enum XAggregateType {
22
+ export declare enum XAggregateFunction {
23
23
  Min = "MIN",
24
24
  Max = "MAX",
25
25
  Sum = "SUM",
26
26
  Avg = "AVG"
27
27
  }
28
- export interface XAggregateItem {
28
+ export interface XSimpleAggregateItem {
29
29
  field: string;
30
- aggregateType: XAggregateType;
30
+ aggregateFunction: XAggregateFunction;
31
31
  }
32
32
  export interface FindParam {
33
33
  resultType: ResultType;
@@ -39,7 +39,7 @@ export interface FindParam {
39
39
  multiSortMeta?: DataTableSortMeta[];
40
40
  entity: string;
41
41
  fields?: string[];
42
- aggregateItems?: XAggregateItem[];
42
+ aggregateItems?: XSimpleAggregateItem[];
43
43
  }
44
44
  export interface XLazyAutoCompleteSuggestionsRequest {
45
45
  maxRows: number;