@michalrakus/x-react-web-lib 1.34.0 → 1.35.1

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.
Files changed (38) hide show
  1. package/XDocTemplateButton.d.ts +3 -0
  2. package/XDocTemplateButton.js +5 -0
  3. package/gulpfile.js +3 -0
  4. package/lib/administration/x-enum-enum.d.ts +12 -0
  5. package/lib/administration/x-enum-enum.js +2 -0
  6. package/lib/administration/x-enum.d.ts +10 -0
  7. package/lib/administration/x-enum.js +2 -0
  8. package/lib/components/XAutoComplete.d.ts +1 -0
  9. package/lib/components/XAutoComplete.js +1 -1
  10. package/lib/components/XAutoCompleteBase.d.ts +4 -4
  11. package/lib/components/XAutoCompleteBase.js +17 -24
  12. package/lib/components/XAutoCompleteDT.d.ts +1 -0
  13. package/lib/components/XAutoCompleteDT.js +1 -1
  14. package/lib/components/XFormDialog.d.ts +12 -0
  15. package/lib/components/XFormDialog.js +20 -0
  16. package/lib/components/XFormFooter.d.ts +4 -0
  17. package/lib/components/XFormFooter.js +20 -1
  18. package/lib/components/XInputFileList.js +6 -27
  19. package/lib/components/XLazyDataTable/XExportRowsDialog.js +37 -59
  20. package/lib/components/XLazyDataTable/XLazyDataTable.d.ts +33 -36
  21. package/lib/components/XLazyDataTable/XLazyDataTable.js +206 -144
  22. package/lib/components/XUtils.d.ts +1 -0
  23. package/lib/components/XUtils.js +21 -8
  24. package/lib/modules/docTemplates/XDocTemplateButton.d.ts +7 -0
  25. package/lib/modules/docTemplates/XDocTemplateButton.js +150 -0
  26. package/lib/modules/docTemplates/xt-doc-template-field-to-join.d.ts +6 -0
  27. package/lib/modules/docTemplates/xt-doc-template-field-to-join.js +2 -0
  28. package/lib/modules/docTemplates/xt-doc-template.d.ts +18 -0
  29. package/lib/modules/docTemplates/xt-doc-template.js +2 -0
  30. package/lib/modules/files/x-file.d.ts +8 -0
  31. package/lib/modules/files/x-file.js +2 -0
  32. package/lib/serverApi/FindParam.d.ts +2 -1
  33. package/lib/serverApi/FindParam.js +1 -0
  34. package/lib/serverApi/x-lib-api.d.ts +6 -0
  35. package/lib/serverApi/x-lib-api.js +0 -1
  36. package/package.json +1 -1
  37. package/xt-doc-template.d.ts +3 -0
  38. package/xt-doc-template.js +5 -0
@@ -69,6 +69,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
69
69
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
70
  }
71
71
  };
72
+ var __rest = (this && this.__rest) || function (s, e) {
73
+ var t = {};
74
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
75
+ t[p] = s[p];
76
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
77
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
78
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
79
+ t[p[i]] = s[p[i]];
80
+ }
81
+ return t;
82
+ };
72
83
  var __values = (this && this.__values) || function(o) {
73
84
  var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
74
85
  if (m) return m.call(o);
@@ -137,6 +148,8 @@ var XInputTextBase_1 = require("../XInputTextBase");
137
148
  var useXStateSession_1 = require("../useXStateSession");
138
149
  var useXStateSessionBase_1 = require("../useXStateSessionBase");
139
150
  var _ = __importStar(require("lodash"));
151
+ var XDocTemplateButton_1 = require("../../modules/docTemplates/XDocTemplateButton");
152
+ var XFormDialog_1 = require("../XFormDialog");
140
153
  var XStateKeySuffix;
141
154
  (function (XStateKeySuffix) {
142
155
  XStateKeySuffix["filters"] = "filters";
@@ -147,8 +160,14 @@ var XStateKeySuffix;
147
160
  XStateKeySuffix["selectedRow"] = "selected-row";
148
161
  XStateKeySuffix["multilineSwitchValue"] = "multiline-switch-value";
149
162
  })(XStateKeySuffix = exports.XStateKeySuffix || (exports.XStateKeySuffix = {}));
150
- var XLazyDataTable = function (props) {
151
- var _a, _b;
163
+ exports.XLazyDataTable = (0, react_1.forwardRef)(function (_a, ref) {
164
+ var _b, _c;
165
+ var _d = _a.paginator, paginator = _d === void 0 ? true : _d, _e = _a.rows, rows = _e === void 0 ? 10 : _e, _f = _a.filterDisplay, filterDisplay = _f === void 0 ? "row" : _f, _g = _a.autoFilter, autoFilter = _g === void 0 ? false : _g, _h = _a.showFilterButtons, showFilterButtons = _h === void 0 ? true : _h, _j = _a.fullTextSearch, fullTextSearch = _j === void 0 ? true : _j, _k = _a.multilineSwitch, multilineSwitch = _k === void 0 ? false : _k, _l = _a.multilineSwitchInitValue, multilineSwitchInitValue = _l === void 0 ? "allLines" : _l, _m = _a.multilineSwitchFewLinesCount, multilineSwitchFewLinesCount = _m === void 0 ? 2 : _m, _o = _a.scrollable, scrollable = _o === void 0 ? true : _o, _p = _a.scrollWidth, scrollWidth = _p === void 0 ? 'viewport' : _p, // nastavi sirku tabulky na (100vw - nieco) (ak bude obsah sirsi, zapne horizontalny scrollbar)
166
+ _q = _a.scrollHeight, // nastavi sirku tabulky na (100vw - nieco) (ak bude obsah sirsi, zapne horizontalny scrollbar)
167
+ scrollHeight = _q === void 0 ? 'viewport' : _q, // nastavi vysku tabulky na (100vh - nieco) (ak bude obsah vecsi, zapne vertikalny scrollbar)
168
+ _r = _a.shrinkWidth, // nastavi vysku tabulky na (100vh - nieco) (ak bude obsah vecsi, zapne vertikalny scrollbar)
169
+ shrinkWidth = _r === void 0 ? true : _r, propsRest = __rest(_a, ["paginator", "rows", "filterDisplay", "autoFilter", "showFilterButtons", "fullTextSearch", "multilineSwitch", "multilineSwitchInitValue", "multilineSwitchFewLinesCount", "scrollable", "scrollWidth", "scrollHeight", "shrinkWidth"]);
170
+ var props = __assign({ paginator: paginator, rows: rows, filterDisplay: filterDisplay, autoFilter: autoFilter, showFilterButtons: showFilterButtons, fullTextSearch: fullTextSearch, multilineSwitch: multilineSwitch, multilineSwitchInitValue: multilineSwitchInitValue, multilineSwitchFewLinesCount: multilineSwitchFewLinesCount, scrollable: scrollable, scrollWidth: scrollWidth, scrollHeight: scrollHeight, shrinkWidth: shrinkWidth }, propsRest);
152
171
  // must be here, is used in createFiltersInit()
153
172
  var xEntity = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(props.entity);
154
173
  var createAggregateItems = function () {
@@ -214,7 +233,10 @@ var XLazyDataTable = function (props) {
214
233
  };
215
234
  var getInitFilterMatchMode = function (xLazyColumnProps, xField) {
216
235
  var filterMatchMode;
217
- if (isAutoCompleteInFilterEnabled(xLazyColumnProps)) {
236
+ if (xLazyColumnProps.filterElement !== undefined) {
237
+ filterMatchMode = FindParam_1.XFilterMatchMode.X_FILTER_ELEMENT; // little hack
238
+ }
239
+ else if (isAutoCompleteInFilterEnabled(xLazyColumnProps)) {
218
240
  filterMatchMode = FindParam_1.XFilterMatchMode.X_AUTO_COMPLETE; // little hack
219
241
  }
220
242
  else if (xField.type === "string" || xField.type === "jsonb") {
@@ -316,12 +338,12 @@ var XLazyDataTable = function (props) {
316
338
  // ak mame fieldSet stlpce (stlpce ktore maju zadany fieldSetId a zobrazuju hodnoty podla fieldSet-u),
317
339
  // tak sem nacitame mapy umoznujuce ziskanie labelov zakliknutych field-ov
318
340
  // poznamka: uz by sa zislo mat vytvorene objekty (instancie) pre stlpce a do nich zapisovat pripadny XFieldSetMap, filter (teraz je vo "filters")
319
- var _c = __read((0, react_1.useState)({}), 2), xFieldSetMaps = _c[0], setXFieldSetMaps = _c[1];
320
- var _d = __read((0, react_1.useState)({ rowList: [], totalRecords: 0, aggregateValues: [] }), 2), value = _d[0], setValue = _d[1];
321
- var _e = __read((0, react_1.useState)(undefined), 2), expandedRows = _e[0], setExpandedRows = _e[1];
322
- var _f = __read((0, react_1.useState)(false), 2), loading = _f[0], setLoading = _f[1];
323
- var _g = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.pagingFirst), 0), 2), first = _g[0], setFirst = _g[1];
324
- var _h = __read((0, react_1.useState)(props.paginator ? props.rows : undefined), 2), rows = _h[0], setRows = _h[1];
341
+ var _s = __read((0, react_1.useState)({}), 2), xFieldSetMaps = _s[0], setXFieldSetMaps = _s[1];
342
+ var _t = __read((0, react_1.useState)({ rowList: [], totalRecords: 0, aggregateValues: [] }), 2), value = _t[0], setValue = _t[1];
343
+ var _u = __read((0, react_1.useState)(undefined), 2), expandedRows = _u[0], setExpandedRows = _u[1];
344
+ var _v = __read((0, react_1.useState)(false), 2), loading = _v[0], setLoading = _v[1];
345
+ var _w = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.pagingFirst), 0), 2), first = _w[0], setFirst = _w[1];
346
+ var _x = __read((0, react_1.useState)(props.paginator ? props.rows : undefined), 2), rowsLocal = _x[0], setRowsLocal = _x[1];
325
347
  // "filters" have special initialState function different from that used in useXStateSession
326
348
  var filtersInitialStateFunction = function () {
327
349
  var filtersInit = XUtils_1.XUtils.getValueFromStorage(getStateKey(XStateKeySuffix.filters), null);
@@ -335,19 +357,20 @@ var XLazyDataTable = function (props) {
335
357
  }
336
358
  return filtersInit;
337
359
  };
338
- var _j = __read((0, useXStateSessionBase_1.useXStateSessionBase)(getStateKey(XStateKeySuffix.filters), filtersInitialStateFunction), 2), filters = _j[0], setFilters = _j[1]; // filtrovanie na "controlled manner" (moze sa sem nainicializovat nejaka hodnota)
360
+ var _y = __read((0, useXStateSessionBase_1.useXStateSessionBase)(getStateKey(XStateKeySuffix.filters), filtersInitialStateFunction), 2), filters = _y[0], setFilters = _y[1]; // filtrovanie na "controlled manner" (moze sa sem nainicializovat nejaka hodnota)
339
361
  var initFtsInputValue = props.fullTextSearch ? createInitFtsInputValue() : undefined;
340
- var _k = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.ftsInputValue), initFtsInputValue), 2), ftsInputValue = _k[0], setFtsInputValue = _k[1];
341
- var _l = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.optionalCustomFilter), undefined), 2), optionalCustomFilter = _l[0], setOptionalCustomFilter = _l[1];
342
- var _m = __read((_a = props.multilineSwitchValue) !== null && _a !== void 0 ? _a : (0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.multilineSwitchValue), props.multilineSwitchInitValue), 2), multilineSwitchValue = _m[0], setMultilineSwitchValue = _m[1];
343
- var _o = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.multiSortMeta), XUtilsCommon_1.XUtilsCommon.createMultiSortMeta(props.sortField)), 2), multiSortMeta = _o[0], setMultiSortMeta = _o[1];
344
- var _p = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.selectedRow), null), 2), selectedRow = _p[0], setSelectedRow = _p[1];
345
- var _q = __read((_b = props.dataLoadedState) !== null && _b !== void 0 ? _b : (0, react_1.useState)(false), 2), dataLoaded = _q[0], setDataLoaded = _q[1]; // priznak kde si zapiseme, ci uz sme nacitali data
346
- var _r = __read((0, react_1.useState)({ dialogOpened: false }), 2), exportRowsDialogState = _r[0], setExportRowsDialogState = _r[1];
362
+ var _z = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.ftsInputValue), initFtsInputValue), 2), ftsInputValue = _z[0], setFtsInputValue = _z[1];
363
+ var _0 = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.optionalCustomFilter), undefined), 2), optionalCustomFilter = _0[0], setOptionalCustomFilter = _0[1];
364
+ var _1 = __read((_b = props.multilineSwitchValue) !== null && _b !== void 0 ? _b : (0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.multilineSwitchValue), props.multilineSwitchInitValue), 2), multilineSwitchValue = _1[0], setMultilineSwitchValue = _1[1];
365
+ var _2 = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.multiSortMeta), XUtilsCommon_1.XUtilsCommon.createMultiSortMeta(props.sortField)), 2), multiSortMeta = _2[0], setMultiSortMeta = _2[1];
366
+ var _3 = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.selectedRow), null), 2), selectedRow = _3[0], setSelectedRow = _3[1];
367
+ var _4 = __read((_c = props.dataLoadedState) !== null && _c !== void 0 ? _c : (0, react_1.useState)(false), 2), dataLoaded = _4[0], setDataLoaded = _4[1]; // priznak kde si zapiseme, ci uz sme nacitali data
368
+ var _5 = __read((0, react_1.useState)({ dialogOpened: false }), 2), exportRowsDialogState = _5[0], setExportRowsDialogState = _5[1];
347
369
  //const [exportRowsDialogRowCount, setExportRowsDialogRowCount] = useState<number>(); // param pre dialog
348
- var _s = __read((0, react_1.useState)(filters), 2), filtersAfterFiltering = _s[0], setFiltersAfterFiltering = _s[1]; // sem si odkladame stav filtra po kliknuti na button Filter (chceme exportovat presne to co vidno vyfiltrovane)
349
- var _t = __read((0, react_1.useState)(ftsInputValue), 2), ftsInputValueAfterFiltering = _t[0], setFtsInputValueAfterFiltering = _t[1]; // tak isto ako filtersAfterFiltering
350
- var _u = __read((0, react_1.useState)(optionalCustomFilter), 2), optionalCustomFilterAfterFiltering = _u[0], setOptionalCustomFilterAfterFiltering = _u[1]; // tak isto ako filtersAfterFiltering
370
+ var _6 = __read((0, react_1.useState)(filters), 2), filtersAfterFiltering = _6[0], setFiltersAfterFiltering = _6[1]; // sem si odkladame stav filtra po kliknuti na button Filter (chceme exportovat presne to co vidno vyfiltrovane)
371
+ var _7 = __read((0, react_1.useState)(ftsInputValue), 2), ftsInputValueAfterFiltering = _7[0], setFtsInputValueAfterFiltering = _7[1]; // tak isto ako filtersAfterFiltering
372
+ var _8 = __read((0, react_1.useState)(optionalCustomFilter), 2), optionalCustomFilterAfterFiltering = _8[0], setOptionalCustomFilterAfterFiltering = _8[1]; // tak isto ako filtersAfterFiltering
373
+ var _9 = __read((0, react_1.useState)({ opened: false }), 2), formDialogState = _9[0], setFormDialogState = _9[1];
351
374
  // parameter [] zabezpeci ze sa metoda zavola len po prvom renderingu (a nie po kazdej zmene stavu (zavolani setNieco()))
352
375
  (0, react_1.useEffect)(function () {
353
376
  // jednoduchy sposob - nepouzivame parameter props.displayed a priznak dataLoaded
@@ -374,6 +397,10 @@ var XLazyDataTable = function (props) {
374
397
  }
375
398
  }
376
399
  }); // eslint-disable-line react-hooks/exhaustive-deps
400
+ (0, react_1.useImperativeHandle)(ref, function () { return ({
401
+ reread: reread,
402
+ setupExpandedRows: function () { return setupExpandedRows(value, multilineSwitchValue); }
403
+ }); });
377
404
  // TODO - preco je to tu? presunut dole ak sa da...
378
405
  var dataKey = props.dataKey !== undefined ? props.dataKey : XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(props.entity).idField;
379
406
  var onPage = function (event) { return __awaiter(void 0, void 0, void 0, function () {
@@ -459,6 +486,10 @@ var XLazyDataTable = function (props) {
459
486
  findParam.multiSortMeta = multiSortMetaLocal;
460
487
  loadDataBase(findParam);
461
488
  };
489
+ // API function
490
+ var reread = function () {
491
+ loadData();
492
+ };
462
493
  var loadData = function () { return __awaiter(void 0, void 0, void 0, function () {
463
494
  return __generator(this, function (_a) {
464
495
  switch (_a.label) {
@@ -479,7 +510,7 @@ var XLazyDataTable = function (props) {
479
510
  return {
480
511
  resultType: FindParam_1.ResultType.RowCountAndPagedRows,
481
512
  first: first,
482
- rows: rows,
513
+ rows: rowsLocal,
483
514
  filters: filters,
484
515
  fullTextSearch: createXFullTextSearch(ftsInputValue),
485
516
  customFilterItems: createXCustomFilterItems(customFilterItems, optionalCustomFilter),
@@ -720,51 +751,76 @@ var XLazyDataTable = function (props) {
720
751
  onRowDoubleClickBase(event.data);
721
752
  };
722
753
  var onRowDoubleClickBase = function (row) {
723
- if (props.onEdit !== undefined && props.searchBrowseParams === undefined) {
724
- props.onEdit(row);
754
+ if (props.searchBrowseParams === undefined) {
755
+ editRow(row);
725
756
  }
726
- else if (props.searchBrowseParams !== undefined) {
757
+ else {
727
758
  props.searchBrowseParams.onChoose(row);
728
759
  }
729
760
  };
730
761
  var onClickAddRow = function () {
731
762
  //console.log("zavolany onClickAddRow");
732
- if (props.onAddRow !== undefined) {
733
- props.onAddRow();
763
+ if (typeof props.onAddRow === 'function') {
764
+ props.onAddRow(filters);
765
+ }
766
+ else if (props.editForm !== undefined && props.onAddRow !== false) {
767
+ setFormDialogState({
768
+ opened: true,
769
+ id: undefined,
770
+ initValues: {}
771
+ });
734
772
  }
735
773
  };
736
- var onClickEdit = function () {
737
- //console.log("zavolany onClickEdit");
774
+ var onClickEditRow = function () {
775
+ //console.log("zavolany onClickEditRow");
738
776
  if (selectedRow !== null) {
739
- if (props.onEdit !== undefined) {
740
- props.onEdit(selectedRow);
741
- }
777
+ editRow(selectedRow);
742
778
  }
743
779
  else {
744
780
  alert((0, XLocale_1.xLocaleOption)('pleaseSelectRow'));
745
781
  }
746
782
  };
783
+ var editRow = function (row) {
784
+ if (typeof props.onEdit === 'function') {
785
+ props.onEdit(row);
786
+ }
787
+ else if (props.editForm !== undefined && props.onEdit !== false) {
788
+ setFormDialogState({
789
+ opened: true,
790
+ id: row[dataKey],
791
+ initValues: undefined
792
+ });
793
+ }
794
+ };
795
+ var editRowOnSaveOrCancel = function (object, objectChange) {
796
+ if (object !== null) {
797
+ // save was pressed, reread from DB
798
+ loadData();
799
+ }
800
+ // if object === null, then cancel was pressed, we do nothing, we just close the dialog
801
+ setFormDialogState({ opened: false });
802
+ };
747
803
  var onClickRemoveRow = function () { return __awaiter(void 0, void 0, void 0, function () {
748
- var reread, e_9, e_10;
804
+ var reread_1, e_9, e_10;
749
805
  return __generator(this, function (_a) {
750
806
  switch (_a.label) {
751
807
  case 0:
752
808
  if (!(selectedRow !== null)) return [3 /*break*/, 11];
753
809
  if (!(props.removeRow instanceof Function)) return [3 /*break*/, 5];
754
- reread = true;
810
+ reread_1 = true;
755
811
  _a.label = 1;
756
812
  case 1:
757
813
  _a.trys.push([1, 3, , 4]);
758
814
  return [4 /*yield*/, props.removeRow(selectedRow)];
759
815
  case 2:
760
- reread = _a.sent();
816
+ reread_1 = _a.sent();
761
817
  return [3 /*break*/, 4];
762
818
  case 3:
763
819
  e_9 = _a.sent();
764
820
  XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'), e_9);
765
821
  return [3 /*break*/, 4];
766
822
  case 4:
767
- if (reread) {
823
+ if (reread_1) {
768
824
  loadData();
769
825
  if (props.onRemoveRow) {
770
826
  props.onRemoveRow(selectedRow, XUtils_1.OperationType.Remove);
@@ -817,7 +873,7 @@ var XLazyDataTable = function (props) {
817
873
  findParam = {
818
874
  resultType: FindParam_1.ResultType.OnlyRowCount,
819
875
  first: first,
820
- rows: rows,
876
+ rows: rowsLocal,
821
877
  filters: filtersAfterFiltering,
822
878
  fullTextSearch: createXFullTextSearch(ftsInputValueAfterFiltering),
823
879
  customFilterItems: createXCustomFilterItems(customFilterItems, optionalCustomFilterAfterFiltering),
@@ -882,13 +938,14 @@ var XLazyDataTable = function (props) {
882
938
  // ****** vseobecne metodky pre set/get do/z filtra ********
883
939
  // zatial funguje len pre simple filtrovanie (filterDisplay="row")
884
940
  // vseobecna specialna metodka pouzvana pri custom filtri (XLazyColumn.filterElement)
885
- var setFilterItem = function (field, filterItem) {
941
+ // nepodarilo sa posunut autoFilter takym sposobom aby app programmer nemusel autoFilter nastavovat
942
+ var setFilterItem = function (field, filterItem, autoFilter) {
886
943
  filters[field] = filterItem;
887
944
  // neskusal som, ci treba aj toto klonovat ale pravdepodobne hej
888
945
  var filtersCloned = __assign({}, filters);
889
946
  setFilters(filtersCloned);
890
947
  removePagingFromStorage();
891
- loadDataBaseIfAutoFilter(filtersCloned, false);
948
+ loadDataBaseIfAutoFilter(filtersCloned, autoFilter);
892
949
  };
893
950
  // vseobecna specialna metodka pouzvana pri custom filtri (XLazyColumn.filterElement)
894
951
  var getFilterItem = function (field) {
@@ -1036,19 +1093,19 @@ var XLazyDataTable = function (props) {
1036
1093
  };
1037
1094
  // ak mame scrollWidth/scrollHeight = viewport (default), vyratame scrollWidth/scrollHeight tak aby tabulka "sadla" do okna (viewport-u)
1038
1095
  var isMobile = XUtils_1.XUtils.isMobile();
1039
- var scrollWidth = undefined; // vypnute horizontalne scrollovanie
1040
- var scrollHeight = undefined; // vypnute vertikalne scrollovanie
1096
+ var scrollWidthLocal = undefined; // vypnute horizontalne scrollovanie
1097
+ var scrollHeightLocal = undefined; // vypnute vertikalne scrollovanie
1041
1098
  if (props.scrollable) {
1042
1099
  if (props.scrollWidth !== "none") {
1043
- scrollWidth = props.scrollWidth;
1044
- if (scrollWidth === "viewport") {
1045
- scrollWidth = "calc(100vw - ".concat(isMobile ? 1 : 2.2, "rem)"); // desktop - povodne bolo 1.4rem (20px okraje) namiesto 2.2 ale pri vela stlpcoch vznikal horizontalny scrollbar
1100
+ scrollWidthLocal = props.scrollWidth;
1101
+ if (scrollWidthLocal === "viewport") {
1102
+ scrollWidthLocal = "calc(100vw - ".concat(isMobile ? 1 : 2.2, "rem)"); // desktop - povodne bolo 1.4rem (20px okraje) namiesto 2.2 ale pri vela stlpcoch vznikal horizontalny scrollbar
1046
1103
  // mobil - padding 0.5rem body element
1047
1104
  }
1048
1105
  }
1049
1106
  if (props.scrollHeight !== "none") {
1050
- scrollHeight = props.scrollHeight;
1051
- if (scrollHeight === "viewport") {
1107
+ scrollHeightLocal = props.scrollHeight;
1108
+ if (scrollHeightLocal === "viewport") {
1052
1109
  // vypocet je priblizny, robeny na mobil, desktop bude mat mozno iny
1053
1110
  //const headerHeight = XUtils.toPX0('12.7rem');
1054
1111
  //let footerHeight = XUtils.toPX0('3.7rem') + XUtils.toPX0('3rem'); // table footer (paging) + buttons Add row, Edit, ...
@@ -1085,13 +1142,13 @@ var XLazyDataTable = function (props) {
1085
1142
  if (props.formFooterHeight !== undefined) {
1086
1143
  headerFooterHeight += XUtils_1.XUtils.toPX0(XUtils_1.XUtils.processGridBreakpoints(props.formFooterHeight));
1087
1144
  }
1088
- scrollHeight = "calc(".concat(viewHeight, " - ").concat(headerFooterHeight, "px)");
1145
+ scrollHeightLocal = "calc(".concat(viewHeight, " - ").concat(headerFooterHeight, "px)");
1089
1146
  }
1090
1147
  }
1091
1148
  }
1092
1149
  var style = {};
1093
- if (scrollWidth !== undefined) {
1094
- style.width = scrollWidth;
1150
+ if (scrollWidthLocal !== undefined) {
1151
+ style.width = scrollWidthLocal;
1095
1152
  }
1096
1153
  if (props.shrinkWidth) {
1097
1154
  style.maxWidth = 'min-content'; // ak nic nedame (nechame auto), tak (v pripade ak nebudeme mat horizontalny scrollbar) natiahne tabulku na celu sirku stranky, co nechceme
@@ -1153,6 +1210,7 @@ var XLazyDataTable = function (props) {
1153
1210
  }
1154
1211
  // pre lepsiu citatelnost vytvarame stlpce uz tu
1155
1212
  var columnElemList = react_1.default.Children.map(props.children.filter(function (child) { return XUtils_1.XUtils.xViewStatus(child.props.columnViewStatus) !== XUtils_1.XViewStatus.Hidden; }), function (child) {
1213
+ var _a, _b;
1156
1214
  // ak chceme zmenit child element, tak treba bud vytvorit novy alebo vyklonovat
1157
1215
  // priklad je na https://soshace.com/building-react-components-using-children-props-and-context-api/
1158
1216
  // (vzdy musime robit manipulacie so stlpcom, lebo potrebujeme pridat filter={true} sortable={true}
@@ -1177,92 +1235,107 @@ var XLazyDataTable = function (props) {
1177
1235
  }
1178
1236
  // *********** filterElement ***********
1179
1237
  var betweenFilter = undefined;
1180
- var filterElement;
1238
+ var filterElement = null;
1181
1239
  if (childColumn.props.filterElement !== undefined) {
1182
- filterElement = function (options) {
1183
- // compilator sa stazoval ze childColumn.props.filterElement moze byt undefined, preto som pridal "!"
1184
- return childColumn.props.filterElement({ getFilterItem: getFilterItem, setFilterItem: setFilterItem, options: options });
1185
- };
1240
+ // if we use matchModeLabel and this special match mode is chosen then we use custom filter element
1241
+ // if we don't use matchModeLabel (undefined) then we use custom filter element always
1242
+ if ((childColumn.props.filterElement.matchModeLabel && getFilterMatchMode(childColumn.props.field) === FindParam_1.XFilterMatchMode.X_FILTER_ELEMENT)
1243
+ || childColumn.props.filterElement.matchModeLabel === undefined) {
1244
+ filterElement = function (options) {
1245
+ // compilator sa stazoval ze childColumn.props.filterElement moze byt undefined, preto som pridal "!"
1246
+ return childColumn.props.filterElement.element({ getFilterItem: getFilterItem, setFilterItem: setFilterItem, options: options, autoFilter: childColumn.props.autoFilter });
1247
+ };
1248
+ }
1186
1249
  }
1187
- else if (getFilterMatchMode(childColumn.props.field) === FindParam_1.XFilterMatchMode.X_AUTO_COMPLETE) {
1188
- var assocField_1 = undefined; // path to manyToOne assoc
1189
- var displayField = undefined; // field/fields displayed in autocomplete (can be path)
1190
- // if childColumn.props.autoComplete = true, then autoComplete = undefined and default autocomlete is created
1191
- var autoComplete = (typeof childColumn.props.autoComplete === 'object' ? childColumn.props.autoComplete : undefined);
1192
- if (autoComplete) {
1193
- if (autoComplete.field) {
1194
- displayField = autoComplete.field;
1250
+ if (filterElement === null) {
1251
+ if (getFilterMatchMode(childColumn.props.field) === FindParam_1.XFilterMatchMode.X_AUTO_COMPLETE) {
1252
+ var assocField_1 = undefined; // path to manyToOne assoc
1253
+ var displayField = undefined; // field/fields displayed in autocomplete (can be path)
1254
+ // if childColumn.props.autoComplete = true, then autoComplete = undefined and default autocomplete is created
1255
+ var autoComplete = (typeof childColumn.props.autoComplete === 'object' ? childColumn.props.autoComplete : undefined);
1256
+ if (autoComplete) {
1257
+ if (autoComplete.field) {
1258
+ displayField = autoComplete.field;
1259
+ }
1260
+ if (autoComplete.assocField) {
1261
+ // check - autoComplete.assocField must be prefix (part) of childColumn.props.field
1262
+ if (!childColumn.props.field.startsWith(autoComplete.assocField + ".")) {
1263
+ throw "XLazyColumn with field \"".concat(childColumn.props.field, "\": autoComplete.assocField \"").concat(autoComplete.assocField, "\" is not prefix of the field");
1264
+ }
1265
+ assocField_1 = autoComplete.assocField;
1266
+ if (displayField === undefined) {
1267
+ // take displayField from childColumn.props.field (rest of the path)
1268
+ displayField = childColumn.props.field.substring(autoComplete.assocField.length + 1);
1269
+ }
1270
+ }
1195
1271
  }
1196
- if (autoComplete.assocField) {
1197
- // check - autoComplete.assocField must be prefix (part) of childColumn.props.field
1198
- if (!childColumn.props.field.startsWith(autoComplete.assocField + ".")) {
1199
- throw "XLazyColumn with field \"".concat(childColumn.props.field, "\": autoComplete.assocField \"").concat(autoComplete.assocField, "\" is not prefix of the field");
1272
+ if (assocField_1 === undefined) {
1273
+ // default - take assocField/displayField from childColumn.props.field
1274
+ var _c = __read(XUtilsCommon_1.XUtilsCommon.getPathToAssocAndField(childColumn.props.field), 2), assocFieldTemp = _c[0], displayFieldTemp = _c[1];
1275
+ if (assocFieldTemp === null) {
1276
+ throw "XLazyColumn with field \"".concat(childColumn.props.field, "\": unexpected error - path of length >= 2 expected");
1200
1277
  }
1201
- assocField_1 = autoComplete.assocField;
1278
+ assocField_1 = assocFieldTemp;
1202
1279
  if (displayField === undefined) {
1203
- // take displayField from childColumn.props.field (rest of the path)
1204
- displayField = childColumn.props.field.substring(autoComplete.assocField.length + 1);
1280
+ displayField = displayFieldTemp;
1205
1281
  }
1206
1282
  }
1283
+ var xAssoc = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXAssocToOneByPath(xEntity, assocField_1);
1284
+ var object = getFilterValue(childColumn.props.field);
1285
+ filterElement = react_1.default.createElement(XAutoCompleteBase_1.XAutoCompleteBase, { value: object, onChange: function (object, objectChange) { return setFilterValue(childColumn.props.field, object, undefined, object !== null ? [{
1286
+ where: "[".concat(assocField_1, "] = ").concat(object['id']),
1287
+ params: {}
1288
+ }] : undefined, childColumn.props.autoFilter); }, error: undefined, onErrorChange: function (error) { }, idField: "id", field: displayField, itemTemplate: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.itemTemplate, inputClassName: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.inputClassName, suggestionsQuery: {
1289
+ entity: xAssoc.entityName,
1290
+ filter: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.filter,
1291
+ sortField: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.sortField,
1292
+ fields: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.fields
1293
+ }, searchBrowse: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.searchBrowse, valueForm: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.valueForm, addRowEnabled: false, width: "100%", scrollHeight: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.scrollHeight, suggestionsLoad: "lazy", lazyLoadMaxRows: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.lazyLoadMaxRows, minLength: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.minLength });
1207
1294
  }
1208
- if (assocField_1 === undefined) {
1209
- // default - take assocField/displayField from childColumn.props.field
1210
- var _a = __read(XUtilsCommon_1.XUtilsCommon.getPathToAssocAndField(childColumn.props.field), 2), assocFieldTemp = _a[0], displayFieldTemp = _a[1];
1211
- if (assocFieldTemp === null) {
1212
- throw "XLazyColumn with field \"".concat(childColumn.props.field, "\": unexpected error - path of length >= 2 expected");
1213
- }
1214
- assocField_1 = assocFieldTemp;
1215
- if (displayField === undefined) {
1216
- displayField = displayFieldTemp;
1295
+ else {
1296
+ if (xField.type === "boolean") {
1297
+ var checkboxValue = getFilterValue(childColumn.props.field);
1298
+ filterElement = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: checkboxValue, onChange: function (e) { return setFilterValue(childColumn.props.field, e.value, api_1.FilterMatchMode.EQUALS, undefined, childColumn.props.autoFilter); } });
1217
1299
  }
1218
- }
1219
- var xAssoc = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXAssocToOneByPath(xEntity, assocField_1);
1220
- var object = getFilterValue(childColumn.props.field);
1221
- filterElement = react_1.default.createElement(XAutoCompleteBase_1.XAutoCompleteBase, { value: object, onChange: function (object, objectChange) { return setFilterValue(childColumn.props.field, object, undefined, object !== null ? [{ where: "[".concat(assocField_1, "] = ").concat(object['id']), params: {} }] : undefined, childColumn.props.autoFilter); }, error: undefined, onErrorChange: function (error) { }, idField: "id", field: displayField, suggestionsQuery: { entity: xAssoc.entityName, filter: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.filter, sortField: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.sortField }, searchBrowse: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.searchBrowse, valueForm: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.valueForm, addRowEnabled: false, width: "100%", scrollHeight: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.scrollHeight, suggestionsLoad: "lazy", lazyLoadMaxRows: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.lazyLoadMaxRows, minLength: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.minLength });
1222
- }
1223
- else {
1224
- if (xField.type === "boolean") {
1225
- var checkboxValue = getFilterValue(childColumn.props.field);
1226
- filterElement = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: checkboxValue, onChange: function (e) { return setFilterValue(childColumn.props.field, e.value, api_1.FilterMatchMode.EQUALS, undefined, childColumn.props.autoFilter); } });
1227
- }
1228
- else if (childColumn.props.dropdownInFilter) {
1229
- var dropdownValue = getDropdownFilterValue(childColumn.props.field);
1230
- filterElement = react_1.default.createElement(XDropdownDTFilter_1.XDropdownDTFilter, { entity: props.entity, path: childColumn.props.field, value: dropdownValue, onValueChange: function (field, displayValue) { return onDropdownFilterChange(field, displayValue, childColumn.props.autoFilter); }, filter: childColumn.props.dropdownFilter, sortField: childColumn.props.dropdownSortField });
1231
- }
1232
- else if (xField.type === "string") {
1233
- var stringValue = getFilterValue(childColumn.props.field);
1234
- filterElement = react_1.default.createElement(XInputTextBase_1.XInputTextBase, { value: stringValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value, undefined, undefined, childColumn.props.autoFilter); } });
1235
- }
1236
- else if (xField.type === "date" || xField.type === "datetime") {
1237
- betweenFilter = getBetweenFilter(childColumn.props.betweenFilter, props.betweenFilter);
1238
- if (betweenFilter !== undefined) {
1239
- // display: 'flex' umiestni XCalendar elementy vedla seba
1240
- filterElement =
1241
- react_1.default.createElement("div", { style: betweenFilter === "row" ? { display: 'flex' } : undefined },
1242
- react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value, childColumn.props.autoFilter); }, scale: xField.scale, datetime: xField.type === "datetime" }),
1243
- react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value, childColumn.props.autoFilter); }, scale: xField.scale, datetime: xField.type === "datetime" }));
1300
+ else if (childColumn.props.dropdownInFilter) {
1301
+ var dropdownValue = getDropdownFilterValue(childColumn.props.field);
1302
+ filterElement = react_1.default.createElement(XDropdownDTFilter_1.XDropdownDTFilter, { entity: props.entity, path: childColumn.props.field, value: dropdownValue, onValueChange: function (field, displayValue) { return onDropdownFilterChange(field, displayValue, childColumn.props.autoFilter); }, filter: childColumn.props.dropdownFilter, sortField: childColumn.props.dropdownSortField });
1244
1303
  }
1245
- else {
1246
- var dateValue = getFilterValue(childColumn.props.field);
1247
- filterElement = react_1.default.createElement(XCalendar_1.XCalendar, { value: dateValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value, undefined, undefined, childColumn.props.autoFilter); }, scale: xField.scale, datetime: xField.type === "datetime" });
1304
+ else if (xField.type === "string") {
1305
+ var stringValue = getFilterValue(childColumn.props.field);
1306
+ filterElement = react_1.default.createElement(XInputTextBase_1.XInputTextBase, { value: stringValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value, undefined, undefined, childColumn.props.autoFilter); } });
1248
1307
  }
1249
- }
1250
- else if (xField.type === "decimal" || xField.type === "number") {
1251
- var params = XUtilsMetadata_1.XUtilsMetadata.getParamsForInputNumber(xField);
1252
- betweenFilter = getBetweenFilter(childColumn.props.betweenFilter, props.betweenFilter);
1253
- if (betweenFilter !== undefined) {
1254
- // display: 'flex' umiestni input elementy pod seba (betweenFilter = "column") resp. vedla seba (betweenFilter = "row")
1255
- filterElement =
1256
- react_1.default.createElement("div", { style: { display: 'flex', flexDirection: betweenFilter } },
1257
- react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value, childColumn.props.autoFilter); } }, params)),
1258
- react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value, childColumn.props.autoFilter); } }, params)));
1308
+ else if (xField.type === "date" || xField.type === "datetime") {
1309
+ betweenFilter = getBetweenFilter(childColumn.props.betweenFilter, props.betweenFilter);
1310
+ if (betweenFilter !== undefined) {
1311
+ // display: 'flex' umiestni XCalendar elementy vedla seba
1312
+ filterElement =
1313
+ react_1.default.createElement("div", { style: betweenFilter === "row" ? { display: 'flex' } : undefined },
1314
+ react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value, childColumn.props.autoFilter); }, scale: xField.scale, datetime: xField.type === "datetime" }),
1315
+ react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value, childColumn.props.autoFilter); }, scale: xField.scale, datetime: xField.type === "datetime" }));
1316
+ }
1317
+ else {
1318
+ var dateValue = getFilterValue(childColumn.props.field);
1319
+ filterElement = react_1.default.createElement(XCalendar_1.XCalendar, { value: dateValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value, undefined, undefined, childColumn.props.autoFilter); }, scale: xField.scale, datetime: xField.type === "datetime" });
1320
+ }
1259
1321
  }
1260
- else {
1261
- var numberValue = getFilterValue(childColumn.props.field);
1262
- filterElement = react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: numberValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value, undefined, undefined, childColumn.props.autoFilter); } }, params));
1322
+ else if (xField.type === "decimal" || xField.type === "number") {
1323
+ var params = XUtilsMetadata_1.XUtilsMetadata.getParamsForInputNumber(xField);
1324
+ betweenFilter = getBetweenFilter(childColumn.props.betweenFilter, props.betweenFilter);
1325
+ if (betweenFilter !== undefined) {
1326
+ // display: 'flex' umiestni input elementy pod seba (betweenFilter = "column") resp. vedla seba (betweenFilter = "row")
1327
+ filterElement =
1328
+ react_1.default.createElement("div", { style: { display: 'flex', flexDirection: betweenFilter } },
1329
+ react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value, childColumn.props.autoFilter); } }, params)),
1330
+ react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value, childColumn.props.autoFilter); } }, params)));
1331
+ }
1332
+ else {
1333
+ var numberValue = getFilterValue(childColumn.props.field);
1334
+ filterElement = react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: numberValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value, undefined, undefined, childColumn.props.autoFilter); } }, params));
1335
+ }
1263
1336
  }
1264
1337
  }
1265
- }
1338
+ } // if (filterElement === null)
1266
1339
  // ************** dataType **************
1267
1340
  // depending on the dataType of the column, suitable match modes are displayed in filter
1268
1341
  var dataType = "text";
@@ -1296,6 +1369,9 @@ var XLazyDataTable = function (props) {
1296
1369
  if (isAutoCompleteInFilterEnabled(childColumn.props)) {
1297
1370
  filterMatchModeOptions.push({ label: (0, XLocale_1.xLocaleOption)('xAutoComplete'), value: FindParam_1.XFilterMatchMode.X_AUTO_COMPLETE });
1298
1371
  }
1372
+ if ((_a = childColumn.props.filterElement) === null || _a === void 0 ? void 0 : _a.matchModeLabel) {
1373
+ filterMatchModeOptions.push({ label: (_b = childColumn.props.filterElement) === null || _b === void 0 ? void 0 : _b.matchModeLabel, value: FindParam_1.XFilterMatchMode.X_FILTER_ELEMENT });
1374
+ }
1299
1375
  }
1300
1376
  // *********** showClearButton ***********
1301
1377
  // pre filterDisplay = "row" nechceme clear button, chceme setrit miesto
@@ -1364,37 +1440,23 @@ var XLazyDataTable = function (props) {
1364
1440
  setMultilineSwitchValue(switchValue);
1365
1441
  setupExpandedRows(value, switchValue);
1366
1442
  }, className: "m-1" }) : null,
1367
- props.headerElementRight,
1443
+ props.headerBodyRight,
1368
1444
  props.label && !isMobile ? react_1.default.createElement("div", { className: "x-lazy-datatable-label-right-compensation" }) : null),
1369
1445
  react_1.default.createElement("div", { className: "flex justify-content-center" },
1370
- react_1.default.createElement(datatable_1.DataTable, { value: value.rowList, dataKey: dataKey, expandedRows: expandedRows, rowExpansionTemplate: props.rowExpansionTemplate ? rowExpansionTemplate : undefined, paginator: props.paginator, pageLinkSize: pageLinkSize, rows: rows, totalRecords: value.totalRecords, lazy: true, first: first, onPage: onPage, loading: loading, filterDisplay: props.filterDisplay, filters: filters, onFilter: onFilter, sortMode: "multiple", removableSort: true, multiSortMeta: multiSortMeta, onSort: onSort, selectionMode: "single", selection: selectedRow, onSelectionChange: onSelectionChange, onRowDoubleClick: onRowDoubleClick, rowClassName: props.rowClassName, ref: dataTableEl, className: "p-datatable-sm x-lazy-datatable", resizableColumns: true, columnResizeMode: "expand", tableStyle: tableStyle, paginatorLeft: paginatorLeft, paginatorRight: paginatorRight, scrollable: props.scrollable, scrollHeight: scrollHeight, style: style }, columnElemList)),
1446
+ react_1.default.createElement(datatable_1.DataTable, { value: value.rowList, dataKey: dataKey, expandedRows: expandedRows, rowExpansionTemplate: props.rowExpansionTemplate ? rowExpansionTemplate : undefined, paginator: props.paginator, pageLinkSize: pageLinkSize, rows: rowsLocal, totalRecords: value.totalRecords, lazy: true, first: first, onPage: onPage, loading: loading, filterDisplay: props.filterDisplay, filters: filters, onFilter: onFilter, sortMode: "multiple", removableSort: true, multiSortMeta: multiSortMeta, onSort: onSort, selectionMode: "single", selection: selectedRow, onSelectionChange: onSelectionChange, onRowDoubleClick: onRowDoubleClick, rowClassName: props.rowClassName, ref: dataTableEl, className: "p-datatable-sm x-lazy-datatable", resizableColumns: true, columnResizeMode: "expand", tableStyle: tableStyle, paginatorLeft: paginatorLeft, paginatorRight: paginatorRight, scrollable: props.scrollable, scrollHeight: scrollHeightLocal, style: style }, columnElemList)),
1371
1447
  react_1.default.createElement("div", { className: "flex justify-content-center" },
1372
- props.onAddRow !== undefined && props.searchBrowseParams === undefined ? react_1.default.createElement(XButton_1.XButton, { key: "addRow", icon: "pi pi-plus", label: (0, XLocale_1.xLocaleOption)('addRow'), onClick: onClickAddRow }) : null,
1373
- props.onEdit !== undefined && props.searchBrowseParams === undefined ? react_1.default.createElement(XButton_1.XButton, { key: "editRow", icon: "pi pi-pencil", label: (0, XLocale_1.xLocaleOption)('editRow'), onClick: onClickEdit }) : null,
1374
- props.removeRow !== undefined && props.removeRow !== false && props.searchBrowseParams === undefined ? react_1.default.createElement(XButton_1.XButton, { key: "removeRow", icon: "pi pi-times", label: (0, XLocale_1.xLocaleOption)('removeRow'), onClick: onClickRemoveRow }) : null,
1448
+ (props.onAddRow !== false && (props.editForm !== undefined || props.onAddRow !== undefined)) && props.searchBrowseParams === undefined ? react_1.default.createElement(XButton_1.XButton, { key: "addRow", icon: "pi pi-plus", label: (0, XLocale_1.xLocaleOption)('addRow'), onClick: onClickAddRow }) : null,
1449
+ (props.onEdit !== false && (props.editForm !== undefined || props.onEdit !== undefined)) && props.searchBrowseParams === undefined ? react_1.default.createElement(XButton_1.XButton, { key: "editRow", icon: "pi pi-pencil", label: (0, XLocale_1.xLocaleOption)('editRow'), onClick: onClickEditRow }) : null,
1450
+ (props.removeRow !== false && (props.removeRow !== undefined)) && props.searchBrowseParams === undefined ? react_1.default.createElement(XButton_1.XButton, { key: "removeRow", icon: "pi pi-times", label: (0, XLocale_1.xLocaleOption)('removeRow'), onClick: onClickRemoveRow }) : null,
1375
1451
  exportRows ? react_1.default.createElement(XButton_1.XButton, { key: "exportRows", icon: "pi pi-file-export", label: (0, XLocale_1.xLocaleOption)('exportRows'), onClick: onClickExport }) : null,
1376
- props.appButtonsForRow ? props.appButtonsForRow.map(function (xAppButton) { return react_1.default.createElement(XButton_1.XButton, { key: xAppButton.key, icon: xAppButton.icon, label: xAppButton.label, onClick: function () { return onClickAppButtonForRow(xAppButton.onClick); }, style: xAppButton.style }); }) : null,
1377
- props.appButtons,
1452
+ props.docTemplates && !isMobile && props.searchBrowseParams === undefined ? react_1.default.createElement(XDocTemplateButton_1.XDocTemplateButton, { key: "docTemplates", entity: props.entity, rowId: selectedRow ? selectedRow[dataKey] : undefined, docTemplates: typeof props.docTemplates === 'function' ? props.docTemplates : undefined }) : null,
1453
+ props.appButtonsForRow && props.searchBrowseParams === undefined ? props.appButtonsForRow.map(function (xAppButton) { return react_1.default.createElement(XButton_1.XButton, { key: xAppButton.key, icon: xAppButton.icon, label: xAppButton.label, onClick: function () { return onClickAppButtonForRow(xAppButton.onClick); }, style: xAppButton.style }); }) : null,
1454
+ props.appButtons && props.searchBrowseParams === undefined,
1378
1455
  props.searchBrowseParams !== undefined ? react_1.default.createElement(XButton_1.XButton, { key: "choose", label: (0, XLocale_1.xLocaleOption)('chooseRow'), onClick: onClickChoose }) : null,
1456
+ props.editForm != undefined ? react_1.default.createElement(XFormDialog_1.XFormDialog, { key: "formDialog", dialogState: formDialogState, form: props.editForm, onSaveOrCancel: editRowOnSaveOrCancel }) : null,
1379
1457
  exportRows ? react_1.default.createElement(XExportRowsDialog_1.XExportRowsDialog, { key: "exportRowsDialog", dialogState: exportRowsDialogState, hideDialog: function () { return setExportRowsDialogState({ dialogOpened: false }); } }) : null),
1380
1458
  hasContentTypeHtml() ? react_1.default.createElement(editor_1.Editor, { style: { display: 'none' }, showHeader: false }) : null /* we want to import css if needed (<style type="text/css" data-primereact-style-id="editor">) */));
1381
- };
1382
- exports.XLazyDataTable = XLazyDataTable;
1383
- exports.XLazyDataTable.defaultProps = {
1384
- paginator: true,
1385
- rows: 10,
1386
- filterDisplay: "row",
1387
- autoFilter: false,
1388
- showFilterButtons: true,
1389
- fullTextSearch: true,
1390
- multilineSwitch: false,
1391
- multilineSwitchInitValue: "allLines",
1392
- multilineSwitchFewLinesCount: 2,
1393
- scrollable: true,
1394
- scrollWidth: 'viewport',
1395
- scrollHeight: 'viewport',
1396
- shrinkWidth: true
1397
- };
1459
+ });
1398
1460
  // TODO - XLazyColumn neni idealny nazov, lepsi je XColumn (ale zatial nechame XLazyColumn)
1399
1461
  var XLazyColumn = function (props) {
1400
1462
  // nevadi ze tu nic nevraciame, field a header vieme precitat a zvysok by sme aj tak zahodili lebo vytvarame novy element
@@ -73,6 +73,7 @@ export declare class XUtils {
73
73
  static fetch(path: string, value: any, usePublicToken?: boolean | XToken): Promise<any>;
74
74
  static post(path: string, value: any): Promise<Response>;
75
75
  static openExcelReport(apiPath: string, requestPayload: any, fileName?: string): Promise<boolean>;
76
+ static downloadFile(apiPath: string, requestPayload: any, fileName: string): Promise<boolean>;
76
77
  static fetchBasicJson(path: string, value: any, usePublicToken?: boolean | XToken): Promise<Response>;
77
78
  static fetchFile(path: string, jsonFieldValue: any, fileToPost: any): Promise<any>;
78
79
  static fetchBasicAuthBasic(path: string, headers: any, body: any, usePublicToken?: boolean | XToken): Promise<Response>;