@michalrakus/x-react-web-lib 1.35.0 → 1.35.2

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.
@@ -5,6 +5,7 @@ import { MenuItemCommandEvent } from "primereact/menuitem";
5
5
  import { XSearchBrowseParams } from "./XSearchBrowseParams";
6
6
  import { DataTableSortMeta } from "primereact/datatable";
7
7
  import { XEntity } from "../serverApi/XEntityMetadata";
8
+ import { XFormDialogState } from "./XFormDialog";
8
9
  interface XButtonItem {
9
10
  icon: any | undefined;
10
11
  tooltip?: string;
@@ -62,14 +63,12 @@ export declare class XAutoCompleteBase extends Component<XAutoCompleteBaseProps>
62
63
  notValid: boolean;
63
64
  suggestions: any[] | undefined;
64
65
  filteredSuggestions: any[] | undefined;
65
- formDialogOpened: boolean;
66
+ formDialogState: XFormDialogState;
66
67
  searchDialogOpened: boolean;
67
68
  };
68
69
  suggestionsLoadedForOSS: boolean;
69
70
  wasOnChangeCalled: boolean;
70
71
  xEntity: XEntity | undefined;
71
- formDialogObjectId: number | undefined;
72
- formDialogInitValuesForInsert: any | undefined;
73
72
  constructor(props: XAutoCompleteBaseProps);
74
73
  getXSuggestionsLoadType(): XSuggestionsLoadType;
75
74
  getFields(): string[];
@@ -89,7 +88,6 @@ export declare class XAutoCompleteBase extends Component<XAutoCompleteBaseProps>
89
88
  removeFocusFromInput(): void;
90
89
  setObjectValue(object: any, objectChange: OperationType): void;
91
90
  formDialogOnSaveOrCancel(object: any | null, objectChange: OperationType): void;
92
- formDialogOnHide(): void;
93
91
  searchDialogOnChoose(chosenRow: any): void;
94
92
  searchDialogOnHide(): void;
95
93
  createInsertItem(buttonItems: XButtonItem[]): void;
@@ -130,6 +130,7 @@ var XUtils_1 = require("./XUtils");
130
130
  var button_1 = require("primereact/button");
131
131
  var XUtilsCommon_1 = require("../serverApi/XUtilsCommon");
132
132
  var XUtilsMetadataCommon_1 = require("../serverApi/XUtilsMetadataCommon");
133
+ var XFormDialog_1 = require("./XFormDialog");
133
134
  var XAutoCompleteBase = /** @class */ (function (_super) {
134
135
  __extends(XAutoCompleteBase, _super);
135
136
  function XAutoCompleteBase(props) {
@@ -142,7 +143,7 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
142
143
  notValid: false,
143
144
  suggestions: undefined,
144
145
  filteredSuggestions: undefined,
145
- formDialogOpened: false,
146
+ formDialogState: { opened: false },
146
147
  searchDialogOpened: false
147
148
  };
148
149
  _this.suggestionsLoadedForOSS = false;
@@ -169,7 +170,6 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
169
170
  _this.itemTemplateString = _this.itemTemplateString.bind(_this);
170
171
  _this.computeDefaultDisplayValue = _this.computeDefaultDisplayValue.bind(_this);
171
172
  _this.formDialogOnSaveOrCancel = _this.formDialogOnSaveOrCancel.bind(_this);
172
- _this.formDialogOnHide = _this.formDialogOnHide.bind(_this);
173
173
  _this.searchDialogOnChoose = _this.searchDialogOnChoose.bind(_this);
174
174
  _this.searchDialogOnHide = _this.searchDialogOnHide.bind(_this);
175
175
  return _this;
@@ -494,14 +494,8 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
494
494
  this.setFocusToInput();
495
495
  }
496
496
  }
497
- this.setState({ formDialogOpened: false });
498
- };
499
- XAutoCompleteBase.prototype.formDialogOnHide = function () {
500
- this.setState({ formDialogOpened: false });
501
- // ak mame v inpute neplatnu hodnotu, vratime kurzor na input
502
- if (this.state.inputChanged) {
503
- this.setFocusToInput();
504
- }
497
+ var formDialogState = { opened: false };
498
+ this.setState({ formDialogState: formDialogState });
505
499
  };
506
500
  XAutoCompleteBase.prototype.searchDialogOnChoose = function (chosenRow) {
507
501
  this.setState({ searchDialogOpened: false });
@@ -532,13 +526,18 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
532
526
  }
533
527
  else {
534
528
  // otvorime dialog na insert
535
- _this.formDialogObjectId = undefined;
536
- _this.formDialogInitValuesForInsert = {};
529
+ var initValues = {};
537
530
  // ak mame nevalidnu hodnotu, tak ju predplnime (snaha o user friendly)
538
531
  if (_this.state.inputChanged) {
539
- _this.formDialogInitValuesForInsert[_this.getFirstField()] = _this.state.inputValueState;
532
+ initValues[_this.getFirstField()] = _this.state.inputValueState;
540
533
  }
541
- _this.setState({ formDialogOpened: true });
534
+ var formDialogState = {
535
+ opened: true,
536
+ id: undefined,
537
+ initValues: initValues,
538
+ onSaveOrCancel: _this.formDialogOnSaveOrCancel
539
+ };
540
+ _this.setState({ formDialogState: formDialogState });
542
541
  }
543
542
  }
544
543
  });
@@ -614,9 +613,13 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
614
613
  if (this.props.idField === undefined) {
615
614
  throw "XAutoCompleteBase: property valueForm is defined but property idField is also needed for form editation.";
616
615
  }
617
- this.formDialogObjectId = this.props.value[this.props.idField];
618
- this.formDialogInitValuesForInsert = undefined;
619
- this.setState({ formDialogOpened: true });
616
+ var formDialogState = {
617
+ opened: true,
618
+ id: this.props.value[this.props.idField],
619
+ initValues: undefined,
620
+ onSaveOrCancel: this.formDialogOnSaveOrCancel
621
+ };
622
+ this.setState({ formDialogState: formDialogState });
620
623
  };
621
624
  // vracia objekt (ak inputChanged === false) alebo string (ak inputChanged === true)
622
625
  XAutoCompleteBase.prototype.computeInputValue = function () {
@@ -740,13 +743,9 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
740
743
  else {
741
744
  error = this.props.error;
742
745
  }
743
- // Dialog pre konkretny form:
744
- // <DobrovolnikForm id={this.formDialogObjectId} object={this.formDialogInitValuesForInsert} onSaveOrCancel={this.formDialogOnSaveOrCancel}/>
745
746
  // formgroup-inline lepi SplitButton na autocomplete a zarovna jeho vysku
746
747
  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, inputRef: this.autoCompleteInputRef, readOnly: readOnly, disabled: readOnly }, XUtils_1.XUtils.createTooltipOrErrorProps(error), { inputClassName: this.props.inputClassName, showEmptyMessage: true }))], __read(buttons), false), [this.props.valueForm != undefined ?
747
- 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, {
748
- id: this.formDialogObjectId, initValues: this.formDialogInitValuesForInsert, onSaveOrCancel: this.formDialogOnSaveOrCancel
749
- } /*, this.props.valueForm.children*/))
748
+ react_1.default.createElement(XFormDialog_1.XFormDialog, { key: "dialog-form", dialogState: this.state.formDialogState, form: this.props.valueForm })
750
749
  : undefined, this.props.searchBrowse != undefined && !readOnly ?
751
750
  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*/))
752
751
  : undefined], false)));
@@ -61,6 +61,7 @@ export declare abstract class XFormBase extends Component<XFormProps> {
61
61
  formReadOnlyBase(field: string): boolean;
62
62
  onClickSave(): Promise<void>;
63
63
  onClickCancel(): void;
64
+ openFormNull(): void;
64
65
  validateSave(): Promise<boolean>;
65
66
  validateForm(): Promise<XErrorMap>;
66
67
  fieldValidation(): XErrorMap;
@@ -449,7 +449,7 @@ var XFormBase = /** @class */ (function (_super) {
449
449
  this.props.onSaveOrCancel(object, isAddRow ? XUtils_1.OperationType.Insert : XUtils_1.OperationType.Update);
450
450
  }
451
451
  else {
452
- this.props.openForm(null); // standardny rezim; save zbehol, ideme naspet do browsu
452
+ this.openFormNull();
453
453
  }
454
454
  return [2 /*return*/];
455
455
  }
@@ -461,11 +461,21 @@ var XFormBase = /** @class */ (function (_super) {
461
461
  this.props.onSaveOrCancel(null, XUtils_1.OperationType.None); // formular je zobrazeny v dialogu
462
462
  }
463
463
  else {
464
- // standardny rezim
465
- // openForm pridavame automaticky v XFormNavigator2 pri renderovani komponentu
466
- // null - vrati sa do predchadzajuceho formularu, z ktoreho bol otvoreny
464
+ this.openFormNull();
465
+ }
466
+ };
467
+ XFormBase.prototype.openFormNull = function () {
468
+ // deprecated functionality used when XFormNavigator (deprecated) used
469
+ // standardny rezim
470
+ // openForm pridavame automaticky v XFormNavigator pri renderovani komponentu
471
+ // null - vrati sa do predchadzajuceho formularu, z ktoreho bol otvoreny
472
+ if (typeof this.props.openForm === 'function') {
467
473
  this.props.openForm(null);
468
474
  }
475
+ else {
476
+ // warning
477
+ console.log("Form has no onSaveOrCancel method declared.");
478
+ }
469
479
  };
470
480
  XFormBase.prototype.validateSave = function () {
471
481
  return __awaiter(this, void 0, void 0, function () {
@@ -0,0 +1,13 @@
1
+ import React from "react";
2
+ import { XOnSaveOrCancelProp } from "./XFormBase";
3
+ export interface XFormDialogState {
4
+ opened: boolean;
5
+ id?: number;
6
+ initValues?: object;
7
+ onSaveOrCancel?: XOnSaveOrCancelProp;
8
+ form?: JSX.Element;
9
+ }
10
+ export declare const XFormDialog: (props: {
11
+ dialogState: XFormDialogState;
12
+ form?: JSX.Element | undefined;
13
+ }) => React.JSX.Element;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.XFormDialog = void 0;
7
+ var react_1 = __importDefault(require("react"));
8
+ var dialog_1 = require("primereact/dialog");
9
+ var XUtils_1 = require("./XUtils");
10
+ var XFormDialog = function (props) {
11
+ var _a;
12
+ var onHide = function () {
13
+ if (props.dialogState.onSaveOrCancel) {
14
+ props.dialogState.onSaveOrCancel(null, XUtils_1.OperationType.None);
15
+ }
16
+ };
17
+ var form = (_a = props.dialogState.form) !== null && _a !== void 0 ? _a : props.form;
18
+ return (react_1.default.createElement(dialog_1.Dialog, { key: "dialog-form", className: "x-dialog-without-header", visible: props.dialogState.opened, onHide: onHide }, form ? react_1.default.cloneElement(form, {
19
+ id: props.dialogState.id, initValues: props.dialogState.initValues, onSaveOrCancel: props.dialogState.onSaveOrCancel
20
+ } /*, props.form.children*/) : null));
21
+ };
22
+ exports.XFormDialog = XFormDialog;
@@ -2,6 +2,9 @@ import React, { Component } from "react";
2
2
  export interface XFormNavigator3Props {
3
3
  rootFormElement?: JSX.Element;
4
4
  }
5
+ /**
6
+ * @deprecated use opening form in dialogs instead
7
+ */
5
8
  export declare class XFormNavigator3 extends Component<XFormNavigator3Props> {
6
9
  state: {
7
10
  formElements: JSX.Element[];
@@ -65,6 +65,9 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
65
65
  Object.defineProperty(exports, "__esModule", { value: true });
66
66
  exports.XFormNavigator3 = void 0;
67
67
  var react_1 = __importStar(require("react"));
68
+ /**
69
+ * @deprecated use opening form in dialogs instead
70
+ */
68
71
  var XFormNavigator3 = /** @class */ (function (_super) {
69
72
  __extends(XFormNavigator3, _super);
70
73
  function XFormNavigator3(props) {
@@ -10,6 +10,8 @@ import { ButtonProps } from "primereact/button";
10
10
  import { XtDocTemplate } from "../../modules/docTemplates/xt-doc-template";
11
11
  export type XBetweenFilterProp = "row" | "column" | undefined;
12
12
  export type XMultilineRenderType = "singleLine" | "fewLines" | "allLines";
13
+ export type XOpenFormForInsert = (initValues?: object, onSaveOrCancel?: XOnSaveOrCancelProp, form?: JSX.Element) => void;
14
+ export type XOpenFormForUpdate = (id: number, onSaveOrCancel?: XOnSaveOrCancelProp, form?: JSX.Element) => void;
13
15
  export interface XAppButtonForRow {
14
16
  key?: string;
15
17
  icon?: IconType<ButtonProps>;
@@ -31,6 +33,9 @@ export interface XEditModeHandlers {
31
33
  onMoveColumnLeft: (field: string) => void;
32
34
  onMoveColumnRight: (field: string) => void;
33
35
  }
36
+ /**
37
+ * @deprecated was used to send props displayed and openForm to *Browse when using XFormNavigator (deprecated)
38
+ */
34
39
  export interface XBrowseProps {
35
40
  displayed?: boolean;
36
41
  openForm?: (newFormElement: JSX.Element | null) => void;
@@ -47,6 +52,10 @@ export declare enum XStateKeySuffix {
47
52
  selectedRow = "selected-row",
48
53
  multilineSwitchValue = "multiline-switch-value"
49
54
  }
55
+ export interface XLazyDataTableRef {
56
+ reread: () => void;
57
+ setupExpandedRows: () => void;
58
+ }
50
59
  export interface XLazyDataTableProps {
51
60
  entity: string;
52
61
  stateKey?: string;
@@ -55,21 +64,22 @@ export interface XLazyDataTableProps {
55
64
  dataKey?: string;
56
65
  rowExpansionTemplate?: (row: any, options: DataTableRowExpansionTemplate) => React.ReactNode;
57
66
  showExpandedRow?: (row: any, multilineSwitchValue: XMultilineRenderType) => boolean;
58
- paginator: boolean;
59
- rows: number;
60
- filterDisplay: "menu" | "row";
67
+ paginator?: boolean;
68
+ rows?: number;
69
+ filterDisplay?: "menu" | "row";
61
70
  betweenFilter?: XBetweenFilterProp;
62
- autoFilter: boolean;
63
- showFilterButtons: boolean;
71
+ autoFilter?: boolean;
72
+ showFilterButtons?: boolean;
64
73
  showExportRows?: boolean;
65
- scrollable: boolean;
66
- scrollWidth: string;
67
- scrollHeight: string;
74
+ scrollable?: boolean;
75
+ scrollWidth?: string;
76
+ scrollHeight?: string;
68
77
  formFooterHeight?: string;
69
- shrinkWidth: boolean;
78
+ shrinkWidth?: boolean;
70
79
  onResetTable?: () => void;
71
- onAddRow?: (filters: DataTableFilterMeta) => void;
72
- onEdit?: (selectedRow: any) => void;
80
+ editForm?: JSX.Element;
81
+ onAddRow?: ((filters: DataTableFilterMeta, openFormForInsert: XOpenFormForInsert) => void) | false;
82
+ onEdit?: ((selectedRow: any, openFormForUpdate: XOpenFormForUpdate) => void) | false;
73
83
  removeRow?: ((selectedRow: any) => Promise<boolean>) | boolean;
74
84
  onRemoveRow?: XOnSaveOrCancelProp;
75
85
  docTemplates?: true | ((entity: string) => Promise<XtDocTemplate[]>);
@@ -79,41 +89,27 @@ export interface XLazyDataTableProps {
79
89
  customFilter?: XCustomFilter;
80
90
  optionalCustomFilters?: XOptionalCustomFilter[];
81
91
  sortField?: string | DataTableSortMeta[];
82
- fullTextSearch: boolean | string[];
92
+ fullTextSearch?: boolean | string[];
83
93
  fields?: string[];
84
- multilineSwitch: boolean;
85
- multilineSwitchInitValue: XMultilineRenderType;
86
- multilineSwitchFewLinesCount: number;
94
+ multilineSwitch?: boolean;
95
+ multilineSwitchInitValue?: XMultilineRenderType;
96
+ multilineSwitchFewLinesCount?: number;
87
97
  multilineSwitchValue?: [XMultilineRenderType, React.Dispatch<React.SetStateAction<XMultilineRenderType>>];
88
98
  headerBodyRight?: React.ReactNode;
89
99
  searchBrowseParams?: XSearchBrowseParams;
90
100
  width?: string;
91
101
  rowClassName?: (data: any) => object | string | undefined;
92
- dataLoadedState?: [boolean, React.Dispatch<React.SetStateAction<boolean>>];
93
102
  exportFieldsToDuplicateValues?: string[];
94
103
  editMode?: boolean;
95
104
  editModeHandlers?: XEditModeHandlers;
105
+ /**
106
+ * @deprecated was used to reread data after save/cancel of the form when using XFormNavigator (deprecated),
107
+ * now method reread() is exposed and supposed to be called in onSaveOrCancel of the form
108
+ */
96
109
  displayed?: boolean;
97
110
  children: ReactChild[];
98
111
  }
99
- export declare const XLazyDataTable: {
100
- (props: XLazyDataTableProps): React.JSX.Element;
101
- defaultProps: {
102
- paginator: boolean;
103
- rows: number;
104
- filterDisplay: string;
105
- autoFilter: boolean;
106
- showFilterButtons: boolean;
107
- fullTextSearch: boolean;
108
- multilineSwitch: boolean;
109
- multilineSwitchInitValue: string;
110
- multilineSwitchFewLinesCount: number;
111
- scrollable: boolean;
112
- scrollWidth: string;
113
- scrollHeight: string;
114
- shrinkWidth: boolean;
115
- };
116
- };
112
+ export declare const XLazyDataTable: React.ForwardRefExoticComponent<XLazyDataTableProps & React.RefAttributes<XLazyDataTableRef>>;
117
113
  export type XGetFilterItem = (field: string) => DataTableFilterMetaData | DataTableOperatorFilterMetaData;
118
114
  export type XSetFilterItem = (field: string, filterItem: DataTableFilterMetaData | DataTableOperatorFilterMetaData, autoFilter: boolean) => void;
119
115
  export type XFilterElementParams = {
@@ -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);
@@ -138,6 +149,7 @@ var useXStateSession_1 = require("../useXStateSession");
138
149
  var useXStateSessionBase_1 = require("../useXStateSessionBase");
139
150
  var _ = __importStar(require("lodash"));
140
151
  var XDocTemplateButton_1 = require("../../modules/docTemplates/XDocTemplateButton");
152
+ var XFormDialog_1 = require("../XFormDialog");
141
153
  var XStateKeySuffix;
142
154
  (function (XStateKeySuffix) {
143
155
  XStateKeySuffix["filters"] = "filters";
@@ -148,8 +160,14 @@ var XStateKeySuffix;
148
160
  XStateKeySuffix["selectedRow"] = "selected-row";
149
161
  XStateKeySuffix["multilineSwitchValue"] = "multiline-switch-value";
150
162
  })(XStateKeySuffix = exports.XStateKeySuffix || (exports.XStateKeySuffix = {}));
151
- var XLazyDataTable = function (props) {
152
- var _a, _b;
163
+ exports.XLazyDataTable = (0, react_1.forwardRef)(function (_a, ref) {
164
+ var _b;
165
+ var _c = _a.paginator, paginator = _c === void 0 ? true : _c, _d = _a.rows, rows = _d === void 0 ? 30 : _d, _e = _a.filterDisplay, filterDisplay = _e === void 0 ? "row" : _e, _f = _a.autoFilter, autoFilter = _f === void 0 ? false : _f, _g = _a.showFilterButtons, showFilterButtons = _g === void 0 ? true : _g, _h = _a.fullTextSearch, fullTextSearch = _h === void 0 ? true : _h, _j = _a.multilineSwitch, multilineSwitch = _j === void 0 ? false : _j, _k = _a.multilineSwitchInitValue, multilineSwitchInitValue = _k === void 0 ? "allLines" : _k, _l = _a.multilineSwitchFewLinesCount, multilineSwitchFewLinesCount = _l === void 0 ? 2 : _l, _m = _a.scrollable, scrollable = _m === void 0 ? true : _m, _o = _a.scrollWidth, scrollWidth = _o === void 0 ? 'viewport' : _o, // nastavi sirku tabulky na (100vw - nieco) (ak bude obsah sirsi, zapne horizontalny scrollbar)
166
+ _p = _a.scrollHeight, // nastavi sirku tabulky na (100vw - nieco) (ak bude obsah sirsi, zapne horizontalny scrollbar)
167
+ scrollHeight = _p === void 0 ? 'viewport' : _p, // nastavi vysku tabulky na (100vh - nieco) (ak bude obsah vecsi, zapne vertikalny scrollbar)
168
+ _q = _a.shrinkWidth, // nastavi vysku tabulky na (100vh - nieco) (ak bude obsah vecsi, zapne vertikalny scrollbar)
169
+ shrinkWidth = _q === void 0 ? true : _q, 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);
153
171
  // must be here, is used in createFiltersInit()
154
172
  var xEntity = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(props.entity);
155
173
  var createAggregateItems = function () {
@@ -320,12 +338,12 @@ var XLazyDataTable = function (props) {
320
338
  // ak mame fieldSet stlpce (stlpce ktore maju zadany fieldSetId a zobrazuju hodnoty podla fieldSet-u),
321
339
  // tak sem nacitame mapy umoznujuce ziskanie labelov zakliknutych field-ov
322
340
  // poznamka: uz by sa zislo mat vytvorene objekty (instancie) pre stlpce a do nich zapisovat pripadny XFieldSetMap, filter (teraz je vo "filters")
323
- var _c = __read((0, react_1.useState)({}), 2), xFieldSetMaps = _c[0], setXFieldSetMaps = _c[1];
324
- var _d = __read((0, react_1.useState)({ rowList: [], totalRecords: 0, aggregateValues: [] }), 2), value = _d[0], setValue = _d[1];
325
- var _e = __read((0, react_1.useState)(undefined), 2), expandedRows = _e[0], setExpandedRows = _e[1];
326
- var _f = __read((0, react_1.useState)(false), 2), loading = _f[0], setLoading = _f[1];
327
- var _g = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.pagingFirst), 0), 2), first = _g[0], setFirst = _g[1];
328
- var _h = __read((0, react_1.useState)(props.paginator ? props.rows : undefined), 2), rows = _h[0], setRows = _h[1];
341
+ var _r = __read((0, react_1.useState)({}), 2), xFieldSetMaps = _r[0], setXFieldSetMaps = _r[1];
342
+ var _s = __read((0, react_1.useState)({ rowList: [], totalRecords: 0, aggregateValues: [] }), 2), value = _s[0], setValue = _s[1];
343
+ var _t = __read((0, react_1.useState)(undefined), 2), expandedRows = _t[0], setExpandedRows = _t[1];
344
+ var _u = __read((0, react_1.useState)(false), 2), loading = _u[0], setLoading = _u[1];
345
+ var _v = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.pagingFirst), 0), 2), first = _v[0], setFirst = _v[1];
346
+ var _w = __read((0, react_1.useState)(props.paginator ? props.rows : undefined), 2), rowsLocal = _w[0], setRowsLocal = _w[1];
329
347
  // "filters" have special initialState function different from that used in useXStateSession
330
348
  var filtersInitialStateFunction = function () {
331
349
  var filtersInit = XUtils_1.XUtils.getValueFromStorage(getStateKey(XStateKeySuffix.filters), null);
@@ -339,19 +357,23 @@ var XLazyDataTable = function (props) {
339
357
  }
340
358
  return filtersInit;
341
359
  };
342
- 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 _x = __read((0, useXStateSessionBase_1.useXStateSessionBase)(getStateKey(XStateKeySuffix.filters), filtersInitialStateFunction), 2), filters = _x[0], setFilters = _x[1]; // filtrovanie na "controlled manner" (moze sa sem nainicializovat nejaka hodnota)
343
361
  var initFtsInputValue = props.fullTextSearch ? createInitFtsInputValue() : undefined;
344
- var _k = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.ftsInputValue), initFtsInputValue), 2), ftsInputValue = _k[0], setFtsInputValue = _k[1];
345
- var _l = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.optionalCustomFilter), undefined), 2), optionalCustomFilter = _l[0], setOptionalCustomFilter = _l[1];
346
- 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];
347
- var _o = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.multiSortMeta), XUtilsCommon_1.XUtilsCommon.createMultiSortMeta(props.sortField)), 2), multiSortMeta = _o[0], setMultiSortMeta = _o[1];
348
- var _p = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.selectedRow), null), 2), selectedRow = _p[0], setSelectedRow = _p[1];
349
- 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
350
- var _r = __read((0, react_1.useState)({ dialogOpened: false }), 2), exportRowsDialogState = _r[0], setExportRowsDialogState = _r[1];
362
+ var _y = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.ftsInputValue), initFtsInputValue), 2), ftsInputValue = _y[0], setFtsInputValue = _y[1];
363
+ var _z = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.optionalCustomFilter), undefined), 2), optionalCustomFilter = _z[0], setOptionalCustomFilter = _z[1];
364
+ var _0 = __read((_b = props.multilineSwitchValue) !== null && _b !== void 0 ? _b : (0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.multilineSwitchValue), props.multilineSwitchInitValue), 2), multilineSwitchValue = _0[0], setMultilineSwitchValue = _0[1];
365
+ var _1 = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.multiSortMeta), XUtilsCommon_1.XUtilsCommon.createMultiSortMeta(props.sortField)), 2), multiSortMeta = _1[0], setMultiSortMeta = _1[1];
366
+ var _2 = __read((0, useXStateSession_1.useXStateSession)(getStateKey(XStateKeySuffix.selectedRow), null), 2), selectedRow = _2[0], setSelectedRow = _2[1];
367
+ /**
368
+ * @deprecated was used to reread data after save/cancel of the form when using XFormNavigator (deprecated)
369
+ */
370
+ var _3 = __read((0, react_1.useState)(false), 2), dataLoaded = _3[0], setDataLoaded = _3[1]; // priznak kde si zapiseme, ci uz sme nacitali data
371
+ var _4 = __read((0, react_1.useState)({ dialogOpened: false }), 2), exportRowsDialogState = _4[0], setExportRowsDialogState = _4[1];
351
372
  //const [exportRowsDialogRowCount, setExportRowsDialogRowCount] = useState<number>(); // param pre dialog
352
- 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)
353
- var _t = __read((0, react_1.useState)(ftsInputValue), 2), ftsInputValueAfterFiltering = _t[0], setFtsInputValueAfterFiltering = _t[1]; // tak isto ako filtersAfterFiltering
354
- var _u = __read((0, react_1.useState)(optionalCustomFilter), 2), optionalCustomFilterAfterFiltering = _u[0], setOptionalCustomFilterAfterFiltering = _u[1]; // tak isto ako filtersAfterFiltering
373
+ var _5 = __read((0, react_1.useState)(filters), 2), filtersAfterFiltering = _5[0], setFiltersAfterFiltering = _5[1]; // sem si odkladame stav filtra po kliknuti na button Filter (chceme exportovat presne to co vidno vyfiltrovane)
374
+ var _6 = __read((0, react_1.useState)(ftsInputValue), 2), ftsInputValueAfterFiltering = _6[0], setFtsInputValueAfterFiltering = _6[1]; // tak isto ako filtersAfterFiltering
375
+ var _7 = __read((0, react_1.useState)(optionalCustomFilter), 2), optionalCustomFilterAfterFiltering = _7[0], setOptionalCustomFilterAfterFiltering = _7[1]; // tak isto ako filtersAfterFiltering
376
+ var _8 = __read((0, react_1.useState)({ opened: false }), 2), formDialogState = _8[0], setFormDialogState = _8[1];
355
377
  // parameter [] zabezpeci ze sa metoda zavola len po prvom renderingu (a nie po kazdej zmene stavu (zavolani setNieco()))
356
378
  (0, react_1.useEffect)(function () {
357
379
  // jednoduchy sposob - nepouzivame parameter props.displayed a priznak dataLoaded
@@ -378,6 +400,10 @@ var XLazyDataTable = function (props) {
378
400
  }
379
401
  }
380
402
  }); // eslint-disable-line react-hooks/exhaustive-deps
403
+ (0, react_1.useImperativeHandle)(ref, function () { return ({
404
+ reread: reread,
405
+ setupExpandedRows: function () { return setupExpandedRows(value, multilineSwitchValue); }
406
+ }); });
381
407
  // TODO - preco je to tu? presunut dole ak sa da...
382
408
  var dataKey = props.dataKey !== undefined ? props.dataKey : XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(props.entity).idField;
383
409
  var onPage = function (event) { return __awaiter(void 0, void 0, void 0, function () {
@@ -463,6 +489,10 @@ var XLazyDataTable = function (props) {
463
489
  findParam.multiSortMeta = multiSortMetaLocal;
464
490
  loadDataBase(findParam);
465
491
  };
492
+ // API function
493
+ var reread = function () {
494
+ loadData();
495
+ };
466
496
  var loadData = function () { return __awaiter(void 0, void 0, void 0, function () {
467
497
  return __generator(this, function (_a) {
468
498
  switch (_a.label) {
@@ -483,7 +513,7 @@ var XLazyDataTable = function (props) {
483
513
  return {
484
514
  resultType: FindParam_1.ResultType.RowCountAndPagedRows,
485
515
  first: first,
486
- rows: rows,
516
+ rows: rowsLocal,
487
517
  filters: filters,
488
518
  fullTextSearch: createXFullTextSearch(ftsInputValue),
489
519
  customFilterItems: createXCustomFilterItems(customFilterItems, optionalCustomFilter),
@@ -724,51 +754,92 @@ var XLazyDataTable = function (props) {
724
754
  onRowDoubleClickBase(event.data);
725
755
  };
726
756
  var onRowDoubleClickBase = function (row) {
727
- if (props.onEdit !== undefined && props.searchBrowseParams === undefined) {
728
- props.onEdit(row);
757
+ if (props.searchBrowseParams === undefined) {
758
+ editRow(row);
729
759
  }
730
- else if (props.searchBrowseParams !== undefined) {
760
+ else {
731
761
  props.searchBrowseParams.onChoose(row);
732
762
  }
733
763
  };
734
764
  var onClickAddRow = function () {
735
765
  //console.log("zavolany onClickAddRow");
736
- if (props.onAddRow !== undefined) {
737
- props.onAddRow(filters);
766
+ if (typeof props.onAddRow === 'function') {
767
+ props.onAddRow(filters, openFormForInsert);
768
+ }
769
+ else if (props.editForm !== undefined && props.onAddRow !== false) {
770
+ openFormForInsert();
738
771
  }
739
772
  };
740
- var onClickEdit = function () {
741
- //console.log("zavolany onClickEdit");
773
+ var openFormForInsert = function (initValues, onSaveOrCancel, form) {
774
+ if (props.editForm === undefined && form === undefined) {
775
+ throw "No form declared. XLazyDataTable.editForm is undefined and also form in call of the method openFormForInsert is undefined.";
776
+ }
777
+ setFormDialogState({
778
+ opened: true,
779
+ id: undefined,
780
+ initValues: initValues,
781
+ onSaveOrCancel: onSaveOrCancel !== null && onSaveOrCancel !== void 0 ? onSaveOrCancel : editRowOnSaveOrCancel,
782
+ form: form !== null && form !== void 0 ? form : props.editForm
783
+ });
784
+ };
785
+ var onClickEditRow = function () {
786
+ //console.log("zavolany onClickEditRow");
742
787
  if (selectedRow !== null) {
743
- if (props.onEdit !== undefined) {
744
- props.onEdit(selectedRow);
745
- }
788
+ editRow(selectedRow);
746
789
  }
747
790
  else {
748
791
  alert((0, XLocale_1.xLocaleOption)('pleaseSelectRow'));
749
792
  }
750
793
  };
794
+ var editRow = function (row) {
795
+ if (typeof props.onEdit === 'function') {
796
+ props.onEdit(row, openFormForUpdate);
797
+ }
798
+ else if (props.editForm !== undefined && props.onEdit !== false) {
799
+ openFormForUpdate(row[dataKey]);
800
+ }
801
+ };
802
+ var openFormForUpdate = function (id, onSaveOrCancel, form) {
803
+ if (props.editForm === undefined && form === undefined) {
804
+ throw "No form declared. XLazyDataTable.editForm is undefined and also form in call of the method openFormForUpdate is undefined.";
805
+ }
806
+ setFormDialogState({
807
+ opened: true,
808
+ id: id,
809
+ initValues: undefined,
810
+ onSaveOrCancel: onSaveOrCancel !== null && onSaveOrCancel !== void 0 ? onSaveOrCancel : editRowOnSaveOrCancel,
811
+ form: form !== null && form !== void 0 ? form : props.editForm
812
+ });
813
+ };
814
+ var editRowOnSaveOrCancel = function (object, objectChange) {
815
+ if (object !== null) {
816
+ // save was pressed, reread from DB
817
+ loadData();
818
+ }
819
+ // if object === null, then cancel was pressed, we do nothing, we just close the dialog
820
+ setFormDialogState({ opened: false });
821
+ };
751
822
  var onClickRemoveRow = function () { return __awaiter(void 0, void 0, void 0, function () {
752
- var reread, e_9, e_10;
823
+ var reread_1, e_9, e_10;
753
824
  return __generator(this, function (_a) {
754
825
  switch (_a.label) {
755
826
  case 0:
756
827
  if (!(selectedRow !== null)) return [3 /*break*/, 11];
757
828
  if (!(props.removeRow instanceof Function)) return [3 /*break*/, 5];
758
- reread = true;
829
+ reread_1 = true;
759
830
  _a.label = 1;
760
831
  case 1:
761
832
  _a.trys.push([1, 3, , 4]);
762
833
  return [4 /*yield*/, props.removeRow(selectedRow)];
763
834
  case 2:
764
- reread = _a.sent();
835
+ reread_1 = _a.sent();
765
836
  return [3 /*break*/, 4];
766
837
  case 3:
767
838
  e_9 = _a.sent();
768
839
  XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'), e_9);
769
840
  return [3 /*break*/, 4];
770
841
  case 4:
771
- if (reread) {
842
+ if (reread_1) {
772
843
  loadData();
773
844
  if (props.onRemoveRow) {
774
845
  props.onRemoveRow(selectedRow, XUtils_1.OperationType.Remove);
@@ -821,7 +892,7 @@ var XLazyDataTable = function (props) {
821
892
  findParam = {
822
893
  resultType: FindParam_1.ResultType.OnlyRowCount,
823
894
  first: first,
824
- rows: rows,
895
+ rows: rowsLocal,
825
896
  filters: filtersAfterFiltering,
826
897
  fullTextSearch: createXFullTextSearch(ftsInputValueAfterFiltering),
827
898
  customFilterItems: createXCustomFilterItems(customFilterItems, optionalCustomFilterAfterFiltering),
@@ -1041,19 +1112,19 @@ var XLazyDataTable = function (props) {
1041
1112
  };
1042
1113
  // ak mame scrollWidth/scrollHeight = viewport (default), vyratame scrollWidth/scrollHeight tak aby tabulka "sadla" do okna (viewport-u)
1043
1114
  var isMobile = XUtils_1.XUtils.isMobile();
1044
- var scrollWidth = undefined; // vypnute horizontalne scrollovanie
1045
- var scrollHeight = undefined; // vypnute vertikalne scrollovanie
1115
+ var scrollWidthLocal = undefined; // vypnute horizontalne scrollovanie
1116
+ var scrollHeightLocal = undefined; // vypnute vertikalne scrollovanie
1046
1117
  if (props.scrollable) {
1047
1118
  if (props.scrollWidth !== "none") {
1048
- scrollWidth = props.scrollWidth;
1049
- if (scrollWidth === "viewport") {
1050
- 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
1119
+ scrollWidthLocal = props.scrollWidth;
1120
+ if (scrollWidthLocal === "viewport") {
1121
+ 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
1051
1122
  // mobil - padding 0.5rem body element
1052
1123
  }
1053
1124
  }
1054
1125
  if (props.scrollHeight !== "none") {
1055
- scrollHeight = props.scrollHeight;
1056
- if (scrollHeight === "viewport") {
1126
+ scrollHeightLocal = props.scrollHeight;
1127
+ if (scrollHeightLocal === "viewport") {
1057
1128
  // vypocet je priblizny, robeny na mobil, desktop bude mat mozno iny
1058
1129
  //const headerHeight = XUtils.toPX0('12.7rem');
1059
1130
  //let footerHeight = XUtils.toPX0('3.7rem') + XUtils.toPX0('3rem'); // table footer (paging) + buttons Add row, Edit, ...
@@ -1090,13 +1161,13 @@ var XLazyDataTable = function (props) {
1090
1161
  if (props.formFooterHeight !== undefined) {
1091
1162
  headerFooterHeight += XUtils_1.XUtils.toPX0(XUtils_1.XUtils.processGridBreakpoints(props.formFooterHeight));
1092
1163
  }
1093
- scrollHeight = "calc(".concat(viewHeight, " - ").concat(headerFooterHeight, "px)");
1164
+ scrollHeightLocal = "calc(".concat(viewHeight, " - ").concat(headerFooterHeight, "px)");
1094
1165
  }
1095
1166
  }
1096
1167
  }
1097
1168
  var style = {};
1098
- if (scrollWidth !== undefined) {
1099
- style.width = scrollWidth;
1169
+ if (scrollWidthLocal !== undefined) {
1170
+ style.width = scrollWidthLocal;
1100
1171
  }
1101
1172
  if (props.shrinkWidth) {
1102
1173
  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
@@ -1391,35 +1462,20 @@ var XLazyDataTable = function (props) {
1391
1462
  props.headerBodyRight,
1392
1463
  props.label && !isMobile ? react_1.default.createElement("div", { className: "x-lazy-datatable-label-right-compensation" }) : null),
1393
1464
  react_1.default.createElement("div", { className: "flex justify-content-center" },
1394
- 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)),
1465
+ 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)),
1395
1466
  react_1.default.createElement("div", { className: "flex justify-content-center" },
1396
- 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,
1397
- 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,
1398
- 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,
1467
+ (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,
1468
+ (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,
1469
+ (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,
1399
1470
  exportRows ? react_1.default.createElement(XButton_1.XButton, { key: "exportRows", icon: "pi pi-file-export", label: (0, XLocale_1.xLocaleOption)('exportRows'), onClick: onClickExport }) : null,
1400
- props.docTemplates && !isMobile && props.searchBrowseParams === undefined ? react_1.default.createElement(XDocTemplateButton_1.XDocTemplateButton, { key: "docTemplates", entity: props.entity, rowId: selectedRow ? selectedRow[xEntity.idField] : undefined, docTemplates: typeof props.docTemplates === 'function' ? props.docTemplates : undefined }) : null,
1471
+ 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,
1401
1472
  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,
1402
1473
  props.appButtons && props.searchBrowseParams === undefined,
1403
1474
  props.searchBrowseParams !== undefined ? react_1.default.createElement(XButton_1.XButton, { key: "choose", label: (0, XLocale_1.xLocaleOption)('chooseRow'), onClick: onClickChoose }) : null,
1475
+ props.editForm != undefined ? react_1.default.createElement(XFormDialog_1.XFormDialog, { key: "formDialog", dialogState: formDialogState }) : null,
1404
1476
  exportRows ? react_1.default.createElement(XExportRowsDialog_1.XExportRowsDialog, { key: "exportRowsDialog", dialogState: exportRowsDialogState, hideDialog: function () { return setExportRowsDialogState({ dialogOpened: false }); } }) : null),
1405
1477
  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">) */));
1406
- };
1407
- exports.XLazyDataTable = XLazyDataTable;
1408
- exports.XLazyDataTable.defaultProps = {
1409
- paginator: true,
1410
- rows: 10,
1411
- filterDisplay: "row",
1412
- autoFilter: false,
1413
- showFilterButtons: true,
1414
- fullTextSearch: true,
1415
- multilineSwitch: false,
1416
- multilineSwitchInitValue: "allLines",
1417
- multilineSwitchFewLinesCount: 2,
1418
- scrollable: true,
1419
- scrollWidth: 'viewport',
1420
- scrollHeight: 'viewport',
1421
- shrinkWidth: true
1422
- };
1478
+ });
1423
1479
  // TODO - XLazyColumn neni idealny nazov, lepsi je XColumn (ale zatial nechame XLazyColumn)
1424
1480
  var XLazyColumn = function (props) {
1425
1481
  // nevadi ze tu nic nevraciame, field a header vieme precitat a zvysok by sme aj tak zahodili lebo vytvarame novy element
@@ -8,6 +8,8 @@ import { DataTableSortMeta } from "primereact/datatable";
8
8
  import { XObject } from "./XObject";
9
9
  import { XTableFieldReadOnlyProp } from "./XFormDataTable2";
10
10
  import { SelectItem } from "primereact/selectitem";
11
+ import { XLazyDataTableRef } from "./XLazyDataTable/XLazyDataTable";
12
+ import { XOnSaveOrCancelProp } from "./XFormBase";
11
13
  export declare enum OperationType {
12
14
  None = 0,
13
15
  Insert = 1,
@@ -117,4 +119,8 @@ export declare class XUtils {
117
119
  static isLocalhost(): boolean;
118
120
  static isNewVersion(): Promise<boolean>;
119
121
  static reload(): void;
122
+ /**
123
+ * @deprecated returns onSaveOrCancel method used when opening form from browse when using XFormNavigator (deprecated)
124
+ */
125
+ static onSaveOrCancelNavigator(openForm: (newFormElement: JSX.Element | null) => void, xLazyDataTableRef: React.RefObject<XLazyDataTableRef>): XOnSaveOrCancelProp;
120
126
  }
@@ -105,7 +105,9 @@ var XUtils = /** @class */ (function () {
105
105
  // extra small displays (podla https://www.w3schools.com/howto/howto_css_media_query_breakpoints.asp)
106
106
  // mozno tu treba dat (window.screen.width * window.devicePixelRatio)
107
107
  // bolo 600 ($sm = 576 (primeflex)) - len ak bol mobil na vysku, 768 ma byt aj pre mobil na sirku
108
- return typeof window !== 'undefined' && window.screen.availWidth < 768; // $sm = 576 (primeflex)
108
+ //return typeof window !== 'undefined' && window.screen.availWidth < 768; // $sm = 576 (primeflex)
109
+ // blblo mi window.screen.availWidth (vracalo 1920 v mobile mode v browseri)
110
+ return XUtils.getViewWidth() < 768;
109
111
  };
110
112
  XUtils.mobileCssSuffix = function () {
111
113
  return XUtils.isMobile() ? '-mobile' : '';
@@ -170,7 +172,9 @@ var XUtils = /** @class */ (function () {
170
172
  var breakpointsToFind;
171
173
  var availWidth;
172
174
  if (typeof window !== 'undefined') {
173
- availWidth = window.screen.availWidth; // pouzivame availWidth, nie width, availWidth odratava napr. taskbar
175
+ //availWidth = window.screen.availWidth; // pouzivame availWidth, nie width, availWidth odratava napr. taskbar
176
+ // blblo mi window.screen.availWidth (vracalo 1920 v mobile mode v browseri) - mozno by tu malo byt window.outerWidth
177
+ availWidth = XUtils.getViewWidth();
174
178
  if (availWidth < 576) {
175
179
  breakpointsToFind = ['xs:'];
176
180
  }
@@ -864,6 +868,20 @@ var XUtils = /** @class */ (function () {
864
868
  // warning - if user has typed some data in form, the data will be lost
865
869
  window.location.reload();
866
870
  };
871
+ /**
872
+ * @deprecated returns onSaveOrCancel method used when opening form from browse when using XFormNavigator (deprecated)
873
+ */
874
+ XUtils.onSaveOrCancelNavigator = function (openForm, xLazyDataTableRef) {
875
+ return function (object, objectChange) {
876
+ var _a;
877
+ // close form and display the previous form (it should be browse)
878
+ openForm(null);
879
+ if (object !== null) {
880
+ // save was pressed, reread from DB
881
+ (_a = xLazyDataTableRef.current) === null || _a === void 0 ? void 0 : _a.reread();
882
+ }
883
+ };
884
+ };
867
885
  XUtils.dropdownEmptyOptionValue = " ";
868
886
  XUtils.xBackendUrl = undefined;
869
887
  // nacachovany XToken - na rozlicnych miestach potrebujeme vediet uzivatela
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@michalrakus/x-react-web-lib",
3
- "version": "1.35.0",
3
+ "version": "1.35.2",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "clean": "rimraf lib",