@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.
@@ -335,8 +335,8 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
335
335
  maxRows: this.props.lazyLoadMaxRows + 1,
336
336
  fullTextSearch: { fields: this.getFields(), value: event.query.trim(), splitValue: this.props.splitQueryValue, matchMode: "contains" },
337
337
  entity: this.props.suggestionsQuery.entity,
338
- filterItems: XUtils_1.XUtils.createCustomFilterItems(filter),
339
- multiSortMeta: XUtils_1.XUtils.createMultiSortMeta(this.getSortField()),
338
+ filterItems: XUtilsCommon_1.XUtilsCommon.createCustomFilterItems(filter),
339
+ multiSortMeta: XUtilsCommon_1.XUtilsCommon.createMultiSortMeta(this.getSortField()),
340
340
  fields: this.props.suggestionsQuery.fields
341
341
  };
342
342
  return [4 /*yield*/, XUtils_1.XUtils.fetchOne('x-lazy-auto-complete-suggestions', suggestionsRequest)];
@@ -346,7 +346,7 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
346
346
  // ak sme nesortovali v DB (co je draha operacia) tak zosortujeme teraz
347
347
  // (itemTemplateString sa vola duplicitne ale pre tych cca 20 zaznamov je to ok)
348
348
  if (this.props.suggestionsQuery.sortField === undefined) {
349
- filteredSuggestions = XUtils_1.XUtils.arraySort(filteredSuggestions, this.itemTemplateString);
349
+ filteredSuggestions = XUtilsCommon_1.XUtilsCommon.arraySort(filteredSuggestions, this.itemTemplateString);
350
350
  }
351
351
  // ak mame o 1 zaznam viac ako je lazyLoadMaxRows, zmenime posledny zaznam na ...
352
352
  // TODO - lepsie by bolo posledny zaznam vyhodit a popisok ... zobrazit do footer-a (odpadnu problemy z pripadnou selekciou pseudozaznamu ...)
@@ -727,17 +727,13 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
727
727
  // Dialog pre konkretny form:
728
728
  // <DobrovolnikForm id={this.formDialogObjectId} object={this.formDialogInitValuesForInsert} onSaveOrCancel={this.formDialogOnSaveOrCancel}/>
729
729
  // formgroup-inline lepi SplitButton na autocomplete a zarovna jeho vysku
730
- return (react_1.default.createElement("div", { className: "x-auto-complete-base", style: { width: this.props.width, maxWidth: this.props.maxWidth } },
731
- react_1.default.createElement(autocomplete_1.AutoComplete, __assign({ key: "autoComplete", value: inputValue, suggestions: this.state.filteredSuggestions, completeMethod: this.completeMethod, itemTemplate: this.itemTemplate, onChange: this.onChange, onSelect: this.onSelect, onBlur: this.onBlur, minLength: this.props.minLength, scrollHeight: this.props.scrollHeight, ref: this.autoCompleteRef, readOnly: readOnly, disabled: readOnly }, XUtils_1.XUtils.createTooltipOrErrorProps(error), { inputClassName: this.props.inputClassName, showEmptyMessage: true })),
732
- buttons,
733
- this.props.valueForm != undefined ?
734
- react_1.default.createElement(dialog_1.Dialog, { key: "dialogForm", className: "x-dialog-without-header", visible: this.state.formDialogOpened, onHide: this.formDialogOnHide }, react_1.default.cloneElement(this.props.valueForm, {
730
+ return (react_1.default.createElement.apply(react_1.default, __spreadArray(__spreadArray(["div", { className: "x-auto-complete-base", style: { width: this.props.width, maxWidth: this.props.maxWidth } }, react_1.default.createElement(autocomplete_1.AutoComplete, __assign({ value: inputValue, suggestions: this.state.filteredSuggestions, completeMethod: this.completeMethod, itemTemplate: this.itemTemplate, onChange: this.onChange, onSelect: this.onSelect, onBlur: this.onBlur, minLength: this.props.minLength, scrollHeight: this.props.scrollHeight, ref: this.autoCompleteRef, readOnly: readOnly, disabled: readOnly }, XUtils_1.XUtils.createTooltipOrErrorProps(error), { inputClassName: this.props.inputClassName, showEmptyMessage: true }))], __read(buttons), false), [this.props.valueForm != undefined ?
731
+ react_1.default.createElement(dialog_1.Dialog, { key: "dialog-form", className: "x-dialog-without-header", visible: this.state.formDialogOpened, onHide: this.formDialogOnHide }, react_1.default.cloneElement(this.props.valueForm, {
735
732
  id: this.formDialogObjectId, initValues: this.formDialogInitValuesForInsert, onSaveOrCancel: this.formDialogOnSaveOrCancel
736
733
  } /*, this.props.valueForm.children*/))
737
- : undefined,
738
- this.props.searchBrowse != undefined && !readOnly ?
739
- react_1.default.createElement(dialog_1.Dialog, { key: "dialogBrowse", className: "x-dialog-without-header", visible: this.state.searchDialogOpened, onHide: this.searchDialogOnHide }, react_1.default.cloneElement(this.props.searchBrowse, { searchBrowseParams: this.createSearchBrowseParams() } /*, props.searchBrowse.children*/))
740
- : undefined));
734
+ : undefined, this.props.searchBrowse != undefined && !readOnly ?
735
+ react_1.default.createElement(dialog_1.Dialog, { key: "dialog-browse", className: "x-dialog-without-header", visible: this.state.searchDialogOpened, onHide: this.searchDialogOnHide }, react_1.default.cloneElement(this.props.searchBrowse, { searchBrowseParams: this.createSearchBrowseParams() } /*, props.searchBrowse.children*/))
736
+ : undefined], false)));
741
737
  };
742
738
  XAutoCompleteBase.valueMoreSuggestions = "...";
743
739
  XAutoCompleteBase.defaultProps = {
@@ -110,6 +110,7 @@ var XUtilsMetadata_1 = require("./XUtilsMetadata");
110
110
  var XUtils_1 = require("./XUtils");
111
111
  var XLazyDataTable_1 = require("./XLazyDataTable/XLazyDataTable");
112
112
  var XUtilsMetadataCommon_1 = require("../serverApi/XUtilsMetadataCommon");
113
+ var XUtilsCommon_1 = require("../serverApi/XUtilsCommon");
113
114
  // TODO - pouzit extends XEditBrowseBase, ako je tomu pri CarForm?
114
115
  var XEditBrowse = /** @class */ (function (_super) {
115
116
  __extends(XEditBrowse, _super);
@@ -281,7 +282,7 @@ var XEditBrowse = /** @class */ (function (_super) {
281
282
  var index = this.getIndexForColumn(field);
282
283
  if (index !== undefined) {
283
284
  var xBrowseMeta = this.state.xBrowseMeta;
284
- XUtils_1.XUtils.arrayMoveElement(xBrowseMeta.columnMetaList, index, offset);
285
+ XUtilsCommon_1.XUtilsCommon.arrayMoveElement(xBrowseMeta.columnMetaList, index, offset);
285
286
  // TODO - tu mozno treba setnut funkciu - koli moznej asynchronicite
286
287
  this.setState({ xBrowseMeta: xBrowseMeta });
287
288
  }
@@ -0,0 +1,79 @@
1
+ /// <reference types="react" />
2
+ export interface XFieldSetMeta {
3
+ id?: number;
4
+ fieldSetId: string;
5
+ xFieldMetaRoot: XFieldMeta;
6
+ modifDate: Date | null;
7
+ modifXUser: any | null;
8
+ version: number;
9
+ }
10
+ export declare enum XFieldType {
11
+ rootField = "rootField",
12
+ fieldGroup = "fieldGroup",
13
+ fieldGroupWithCheckbox = "fieldGroupWithCheckbox",
14
+ checkbox = "checkbox",
15
+ checkboxNullable = "checkboxNullable",
16
+ inputText = "inputText",
17
+ inputDecimal = "inputDecimal"
18
+ }
19
+ export declare enum XChildrenLayout {
20
+ column = "column",
21
+ row = "row",
22
+ tabView = "tabView",
23
+ tabViewWithHeaderGroup = "tabViewWithHeaderGroup"
24
+ }
25
+ export declare enum XFieldPropValuesFrom {
26
+ parent = "parent",
27
+ this = "this"
28
+ }
29
+ export interface XFieldMeta {
30
+ type?: XFieldType;
31
+ childrenLayout?: XChildrenLayout;
32
+ width?: string;
33
+ labelWidth?: string;
34
+ inputWidth?: string;
35
+ suppressFieldGroupPanel?: true;
36
+ field: string;
37
+ label: string;
38
+ tooltip?: string;
39
+ decimalProps?: {
40
+ scale: number;
41
+ };
42
+ dateFrom?: Date;
43
+ dateTo?: Date;
44
+ xFieldMetaList?: XFieldMeta[];
45
+ fieldPropValuesMapForEdit?: XFieldPropValuesMapForEdit;
46
+ fieldPropValuesMapCached?: XFieldPropValuesMap;
47
+ xFieldMetaParentCached?: XFieldMeta;
48
+ }
49
+ export interface XFieldPropValuesMapForEdit {
50
+ [field: string]: XFieldPropValuesForEdit;
51
+ }
52
+ export interface XFieldPropValuesMap {
53
+ [field: string]: XFieldPropValues;
54
+ }
55
+ export interface XFieldPropValuesForEdit {
56
+ valuesFrom: XFieldPropValuesFrom;
57
+ values?: XFieldPropValues;
58
+ error?: string;
59
+ }
60
+ export type XFieldPropValues = any | undefined;
61
+ export interface XFieldProp {
62
+ id: string;
63
+ label: string;
64
+ fieldPropEdit?: JSX.Element;
65
+ }
66
+ export interface XFieldPropEditProps {
67
+ value?: XFieldPropValues;
68
+ onChange?: (value: XFieldPropValues) => void;
69
+ onErrorChange?: (error: (string | undefined)) => void;
70
+ }
71
+ export interface XFieldSetValues {
72
+ [field: string]: any;
73
+ }
74
+ export type XFieldXFieldMetaMap = Map<string, XFieldMeta>;
75
+ export declare class XFieldSetBase {
76
+ static createXFieldXFieldMetaMap(xFieldSetMeta: XFieldSetMeta): XFieldXFieldMetaMap;
77
+ static xFieldSetValuesAsUI(xFieldSetValues: XFieldSetValues, xFieldXFieldMetaMap: XFieldXFieldMetaMap): string;
78
+ private static createMapForXFieldMeta;
79
+ }
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ var __values = (this && this.__values) || function(o) {
3
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
4
+ if (m) return m.call(o);
5
+ if (o && typeof o.length === "number") return {
6
+ next: function () {
7
+ if (o && i >= o.length) o = void 0;
8
+ return { value: o && o[i++], done: !o };
9
+ }
10
+ };
11
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
12
+ };
13
+ var __read = (this && this.__read) || function (o, n) {
14
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
15
+ if (!m) return o;
16
+ var i = m.call(o), r, ar = [], e;
17
+ try {
18
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
19
+ }
20
+ catch (error) { e = { error: error }; }
21
+ finally {
22
+ try {
23
+ if (r && !r.done && (m = i["return"])) m.call(i);
24
+ }
25
+ finally { if (e) throw e.error; }
26
+ }
27
+ return ar;
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.XFieldSetBase = exports.XFieldPropValuesFrom = exports.XChildrenLayout = exports.XFieldType = void 0;
31
+ var XUtilsConversions_1 = require("../../serverApi/XUtilsConversions");
32
+ var XFieldType;
33
+ (function (XFieldType) {
34
+ XFieldType["rootField"] = "rootField";
35
+ XFieldType["fieldGroup"] = "fieldGroup";
36
+ XFieldType["fieldGroupWithCheckbox"] = "fieldGroupWithCheckbox";
37
+ XFieldType["checkbox"] = "checkbox";
38
+ XFieldType["checkboxNullable"] = "checkboxNullable";
39
+ XFieldType["inputText"] = "inputText";
40
+ XFieldType["inputDecimal"] = "inputDecimal";
41
+ })(XFieldType = exports.XFieldType || (exports.XFieldType = {}));
42
+ // children layout sa da nastavit len na type, ktory ma children - rootField, fieldGroup
43
+ var XChildrenLayout;
44
+ (function (XChildrenLayout) {
45
+ XChildrenLayout["column"] = "column";
46
+ XChildrenLayout["row"] = "row";
47
+ XChildrenLayout["tabView"] = "tabView";
48
+ XChildrenLayout["tabViewWithHeaderGroup"] = "tabViewWithHeaderGroup"; // to iste co tabView ale prvy fieldGroup (0-ty tab) zobrazi nad tabView (aby bol vzdy pristupny)
49
+ })(XChildrenLayout = exports.XChildrenLayout || (exports.XChildrenLayout = {}));
50
+ // poznamka - tabView a tabViewWithHeaderGroup odignoruju bezne simple children - ak take budu existovat, zobrazi sa uzivatelovi warning pri nastaveni tabView
51
+ // pouzijeme len checkbox supressFieldGroupPanel
52
+ // pouziva sa len pre typ fieldGroup a len v pripade ak dany fieldGroup nie je vyrenderovany v nejakej tab-ke (jeho parent ma nastaveny layout tabView*)
53
+ // export enum XFieldGroupPanelViewStatus {
54
+ // show = "show", // default - vyrenderuje Panel aj s labelom a vo vnutri panelu umiestni children
55
+ // hide = "hide" // nerenderuje Panel, children umiestni do div elementu (label sa nepouzije) - pouziva sa na vytvorenie stlpcov v (parent) fieldGroup-e
56
+ // }
57
+ var XFieldPropValuesFrom;
58
+ (function (XFieldPropValuesFrom) {
59
+ XFieldPropValuesFrom["parent"] = "parent";
60
+ XFieldPropValuesFrom["this"] = "this"; // field prop values preberame z current fieldu
61
+ })(XFieldPropValuesFrom = exports.XFieldPropValuesFrom || (exports.XFieldPropValuesFrom = {}));
62
+ // zatial provizorne len na staticke metody
63
+ var XFieldSetBase = /** @class */ (function () {
64
+ function XFieldSetBase() {
65
+ }
66
+ // api metoda na vytvorenie Map instancie, ktora sluzi na rychle najdenie prislusneho XFieldMeta podla nazvu fieldu
67
+ XFieldSetBase.createXFieldXFieldMetaMap = function (xFieldSetMeta) {
68
+ var xFieldXFieldMetaMap = new Map();
69
+ XFieldSetBase.createMapForXFieldMeta(xFieldSetMeta.xFieldMetaRoot, xFieldXFieldMetaMap);
70
+ return xFieldXFieldMetaMap;
71
+ };
72
+ // api metoda na vyrenderovanie field set atributu
73
+ // logicky patri do src/serverApi/XUtilsConversions.ts a zisla by sa aj pri exporte do excelu ale XFieldXFieldMetaMap (a jeho "parent"-a XFieldSetBase) mame len na frontende
74
+ XFieldSetBase.xFieldSetValuesAsUI = function (xFieldSetValues, xFieldXFieldMetaMap) {
75
+ var e_1, _a;
76
+ var _b;
77
+ // budeme mat vzdy spravne poradie? nebudeme... asi najjednoduchsie zosortovat tu "valueUIList" podla abecedy
78
+ var valueUIList = [];
79
+ try {
80
+ for (var _c = __values(Object.entries(xFieldSetValues)), _d = _c.next(); !_d.done; _d = _c.next()) {
81
+ var _e = __read(_d.value, 2), field = _e[0], value = _e[1];
82
+ var xFieldMeta = xFieldXFieldMetaMap.get(field);
83
+ if (xFieldMeta) {
84
+ if (xFieldMeta.type === XFieldType.checkbox) {
85
+ valueUIList.push(xFieldMeta.label);
86
+ }
87
+ else if (xFieldMeta.type === XFieldType.inputText) {
88
+ valueUIList.push("".concat(xFieldMeta.label, ": \"").concat(value, "\""));
89
+ }
90
+ else if (xFieldMeta.type === XFieldType.inputDecimal) {
91
+ valueUIList.push("".concat(xFieldMeta.label, ": ").concat((0, XUtilsConversions_1.numberAsUI)((0, XUtilsConversions_1.numberFromModel)(value), (_b = xFieldMeta.decimalProps) === null || _b === void 0 ? void 0 : _b.scale)));
92
+ }
93
+ else {
94
+ // neznamy typ
95
+ valueUIList.push("".concat(xFieldMeta.label, ": \"").concat(value, "\""));
96
+ }
97
+ }
98
+ else {
99
+ // field bol z formulara odstraneny (nemalo by sa to takto pouzivat, skor by sa mala datumom ohranicit platnost fieldu)
100
+ // zobrazime v surovom stave
101
+ valueUIList.push("".concat(field, ": ").concat(typeof value === 'string' ? '"' + value + '"' : value));
102
+ }
103
+ }
104
+ }
105
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
106
+ finally {
107
+ try {
108
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
109
+ }
110
+ finally { if (e_1) throw e_1.error; }
111
+ }
112
+ return valueUIList.join(", ");
113
+ };
114
+ XFieldSetBase.createMapForXFieldMeta = function (xFieldMeta, xFieldXFieldMetaMap) {
115
+ var e_2, _a;
116
+ xFieldXFieldMetaMap.set(xFieldMeta.field, xFieldMeta);
117
+ if (xFieldMeta.xFieldMetaList) {
118
+ try {
119
+ for (var _b = __values(xFieldMeta.xFieldMetaList), _c = _b.next(); !_c.done; _c = _b.next()) {
120
+ var insideXFieldMeta = _c.value;
121
+ XFieldSetBase.createMapForXFieldMeta(insideXFieldMeta, xFieldXFieldMetaMap);
122
+ }
123
+ }
124
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
125
+ finally {
126
+ try {
127
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
128
+ }
129
+ finally { if (e_2) throw e_2.error; }
130
+ }
131
+ }
132
+ };
133
+ return XFieldSetBase;
134
+ }());
135
+ exports.XFieldSetBase = XFieldSetBase;
@@ -169,7 +169,7 @@ var XFormBase = /** @class */ (function (_super) {
169
169
  assocToSort = _b.value;
170
170
  assocRowList = object[assocToSort.assoc];
171
171
  if (assocRowList) {
172
- object[assocToSort.assoc] = XUtils_1.XUtils.arraySort(assocRowList, assocToSort.sortField);
172
+ object[assocToSort.assoc] = XUtilsCommon_1.XUtilsCommon.arraySort(assocRowList, assocToSort.sortField);
173
173
  }
174
174
  }
175
175
  }
@@ -1,6 +1,6 @@
1
1
  import { XFormBase } from "./XFormBase";
2
2
  import React, { Component, ReactChild } from "react";
3
- import { DataTableFilterMeta } from "primereact/datatable";
3
+ import { DataTableFilterMeta, DataTableSortMeta } from "primereact/datatable";
4
4
  import { ColumnBodyOptions } from "primereact/column";
5
5
  import { XEntity, XField } from "../serverApi/XEntityMetadata";
6
6
  import { XViewStatusOrBoolean } from "./XUtils";
@@ -26,7 +26,7 @@ export interface XFormDataTableProps {
26
26
  rows?: number;
27
27
  filterDisplay: "menu" | "row" | "none";
28
28
  sortable: boolean;
29
- sortField?: string;
29
+ sortField: string;
30
30
  scrollable: boolean;
31
31
  scrollWidth?: string;
32
32
  scrollHeight?: string;
@@ -48,6 +48,7 @@ export declare class XFormDataTable2 extends Component<XFormDataTableProps> {
48
48
  static defaultProps: {
49
49
  filterDisplay: string;
50
50
  sortable: boolean;
51
+ sortField: string;
51
52
  scrollable: boolean;
52
53
  scrollWidth: string;
53
54
  scrollHeight: string;
@@ -116,6 +117,8 @@ export interface XFormAutoCompleteColumnProps extends XFormColumnBaseProps {
116
117
  searchBrowse?: JSX.Element;
117
118
  assocForm?: JSX.Element;
118
119
  filter?: XTableFieldFilterProp;
120
+ sortField?: string | DataTableSortMeta[];
121
+ fields?: string[];
119
122
  suggestions?: any[];
120
123
  }
121
124
  export interface XFormSearchButtonColumnProps extends XFormColumnBaseProps {
@@ -277,7 +277,7 @@ var XFormDataTable2 = /** @class */ (function (_super) {
277
277
  };
278
278
  XFormDataTable2.prototype.getFilterMatchMode = function (xField) {
279
279
  var filterMatchMode;
280
- if (xField.type === "string") {
280
+ if (xField.type === "string" || xField.type === "jsonb") {
281
281
  filterMatchMode = api_1.FilterMatchMode.CONTAINS;
282
282
  }
283
283
  // zatial vsetky ostatne EQUALS
@@ -404,7 +404,7 @@ var XFormDataTable2 = /** @class */ (function (_super) {
404
404
  }
405
405
  else if (columnProps.type === "autoComplete") {
406
406
  var columnPropsAutoComplete = columnProps;
407
- body = react_1.default.createElement(XAutoCompleteDT_1.XAutoCompleteDT, { form: this.props.form, entity: this.getEntity(), assocField: columnPropsAutoComplete.assocField, displayField: columnPropsAutoComplete.displayField, searchBrowse: columnPropsAutoComplete.searchBrowse, assocForm: columnPropsAutoComplete.assocForm, filter: columnPropsAutoComplete.filter, suggestions: columnPropsAutoComplete.suggestions, rowData: rowData, readOnly: readOnly });
407
+ body = react_1.default.createElement(XAutoCompleteDT_1.XAutoCompleteDT, { form: this.props.form, entity: this.getEntity(), assocField: columnPropsAutoComplete.assocField, displayField: columnPropsAutoComplete.displayField, searchBrowse: columnPropsAutoComplete.searchBrowse, assocForm: columnPropsAutoComplete.assocForm, filter: columnPropsAutoComplete.filter, sortField: columnPropsAutoComplete.sortField, fields: columnPropsAutoComplete.fields, suggestions: columnPropsAutoComplete.suggestions, rowData: rowData, readOnly: readOnly });
408
408
  }
409
409
  else if (columnProps.type === "searchButton") {
410
410
  var columnPropsSearchButton = columnProps;
@@ -527,7 +527,7 @@ var XFormDataTable2 = /** @class */ (function (_super) {
527
527
  };
528
528
  XFormDataTable2.prototype.render = function () {
529
529
  var _this = this;
530
- var _a, _b, _c;
530
+ var _a, _b;
531
531
  var xEntity = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(this.getEntity());
532
532
  var paginator = this.props.paginator !== undefined ? this.props.paginator : false;
533
533
  var rows = undefined;
@@ -540,8 +540,14 @@ var XFormDataTable2 = /** @class */ (function (_super) {
540
540
  }
541
541
  }
542
542
  var filterDisplay = this.props.filterDisplay !== "none" ? this.props.filterDisplay : undefined;
543
- // default sortovanie - ak mame insert tak nesortujeme (drzime poradie v akom user zaznam vytvoril), ak mame update tak podla id zosortujeme (nech je to zobrazene vzdy rovnako)
544
- var sortField = (_a = this.props.sortField) !== null && _a !== void 0 ? _a : (this.props.form.isAddRow() ? undefined : xEntity.idField);
543
+ var sortField = this.props.sortField;
544
+ if (sortField === "idFieldOnUpdate") {
545
+ // default sortovanie - ak mame insert tak nesortujeme (drzime poradie v akom user zaznam vytvoril), ak mame update tak podla id zosortujeme (nech je to zobrazene vzdy rovnako)
546
+ sortField = (this.props.form.isAddRow() ? undefined : xEntity.idField);
547
+ }
548
+ else if (sortField === "none") {
549
+ sortField = undefined;
550
+ }
545
551
  var label = this.props.label !== undefined ? this.props.label : this.props.assocField;
546
552
  var readOnly = this.isReadOnly();
547
553
  // v bloku function (child) nejde pouzit priamo this, thisLocal uz ide pouzit
@@ -679,8 +685,8 @@ var XFormDataTable2 = /** @class */ (function (_super) {
679
685
  var removeRowLabel = undefined;
680
686
  if (this.props.showAddRemoveButtons) {
681
687
  // calling xLocaleOption does not work in standard default values initialisation place (public static defaultProps)
682
- addRowLabel = (_b = this.props.addRowLabel) !== null && _b !== void 0 ? _b : (0, XLocale_1.xLocaleOption)('addRow');
683
- removeRowLabel = (_c = this.props.removeRowLabel) !== null && _c !== void 0 ? _c : (0, XLocale_1.xLocaleOption)('removeRow');
688
+ addRowLabel = (_a = this.props.addRowLabel) !== null && _a !== void 0 ? _a : (0, XLocale_1.xLocaleOption)('addRow');
689
+ removeRowLabel = (_b = this.props.removeRowLabel) !== null && _b !== void 0 ? _b : (0, XLocale_1.xLocaleOption)('removeRow');
684
690
  }
685
691
  return (react_1.default.createElement("div", null,
686
692
  react_1.default.createElement("div", { className: "flex justify-content-center" },
@@ -696,6 +702,7 @@ var XFormDataTable2 = /** @class */ (function (_super) {
696
702
  XFormDataTable2.defaultProps = {
697
703
  filterDisplay: "none",
698
704
  sortable: false,
705
+ sortField: "idFieldOnUpdate",
699
706
  scrollable: true,
700
707
  scrollWidth: '100%',
701
708
  scrollHeight: '200vh',
@@ -3,7 +3,7 @@ import { DataTableFilterMeta, DataTableFilterMetaData, DataTableOperatorFilterMe
3
3
  import { ColumnBodyOptions, ColumnFilterElementTemplateOptions } from 'primereact/column';
4
4
  import { XViewStatusOrBoolean } from "../XUtils";
5
5
  import { XSearchBrowseParams } from "../XSearchBrowseParams";
6
- import { XAggregateType, XCustomFilter } from "../../serverApi/FindParam";
6
+ import { XAggregateFunction, XCustomFilter } from "../../serverApi/FindParam";
7
7
  import { XOnSaveOrCancelProp } from "../XFormBase";
8
8
  import { IconType } from "primereact/utils";
9
9
  import { ButtonProps } from "primereact/button";
@@ -110,7 +110,8 @@ export interface XLazyColumnProps {
110
110
  betweenFilter?: XBetweenFilterProp | "noBetween";
111
111
  width?: string;
112
112
  contentType?: XContentType;
113
- aggregateType?: XAggregateType;
113
+ fieldSetId?: string;
114
+ aggregateType?: XAggregateFunction;
114
115
  columnViewStatus: XViewStatusOrBoolean;
115
116
  filterElement?: XFilterElementProp;
116
117
  body?: React.ReactNode | ((data: any, options: ColumnBodyOptions) => React.ReactNode);