@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.
- package/lib/components/XAutoCompleteBase.d.ts +2 -4
- package/lib/components/XAutoCompleteBase.js +21 -22
- package/lib/components/XFormBase.d.ts +1 -0
- package/lib/components/XFormBase.js +14 -4
- package/lib/components/XFormDialog.d.ts +13 -0
- package/lib/components/XFormDialog.js +22 -0
- package/lib/components/XFormNavigator3.d.ts +3 -0
- package/lib/components/XFormNavigator3.js +3 -0
- package/lib/components/XLazyDataTable/XLazyDataTable.d.ts +30 -34
- package/lib/components/XLazyDataTable/XLazyDataTable.js +123 -67
- package/lib/components/XUtils.d.ts +6 -0
- package/lib/components/XUtils.js +20 -2
- package/package.json +1 -1
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
532
|
+
initValues[_this.getFirstField()] = _this.state.inputValueState;
|
|
540
533
|
}
|
|
541
|
-
|
|
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
|
-
|
|
618
|
-
|
|
619
|
-
|
|
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(
|
|
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.
|
|
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
|
-
|
|
465
|
-
|
|
466
|
-
|
|
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
|
|
59
|
-
rows
|
|
60
|
-
filterDisplay
|
|
67
|
+
paginator?: boolean;
|
|
68
|
+
rows?: number;
|
|
69
|
+
filterDisplay?: "menu" | "row";
|
|
61
70
|
betweenFilter?: XBetweenFilterProp;
|
|
62
|
-
autoFilter
|
|
63
|
-
showFilterButtons
|
|
71
|
+
autoFilter?: boolean;
|
|
72
|
+
showFilterButtons?: boolean;
|
|
64
73
|
showExportRows?: boolean;
|
|
65
|
-
scrollable
|
|
66
|
-
scrollWidth
|
|
67
|
-
scrollHeight
|
|
74
|
+
scrollable?: boolean;
|
|
75
|
+
scrollWidth?: string;
|
|
76
|
+
scrollHeight?: string;
|
|
68
77
|
formFooterHeight?: string;
|
|
69
|
-
shrinkWidth
|
|
78
|
+
shrinkWidth?: boolean;
|
|
70
79
|
onResetTable?: () => void;
|
|
71
|
-
|
|
72
|
-
|
|
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
|
|
92
|
+
fullTextSearch?: boolean | string[];
|
|
83
93
|
fields?: string[];
|
|
84
|
-
multilineSwitch
|
|
85
|
-
multilineSwitchInitValue
|
|
86
|
-
multilineSwitchFewLinesCount
|
|
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
|
-
|
|
152
|
-
var
|
|
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
|
|
324
|
-
var
|
|
325
|
-
var
|
|
326
|
-
var
|
|
327
|
-
var
|
|
328
|
-
var
|
|
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
|
|
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
|
|
345
|
-
var
|
|
346
|
-
var
|
|
347
|
-
var
|
|
348
|
-
var
|
|
349
|
-
|
|
350
|
-
|
|
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
|
|
353
|
-
var
|
|
354
|
-
var
|
|
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:
|
|
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.
|
|
728
|
-
|
|
757
|
+
if (props.searchBrowseParams === undefined) {
|
|
758
|
+
editRow(row);
|
|
729
759
|
}
|
|
730
|
-
else
|
|
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
|
|
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
|
|
741
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
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:
|
|
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
|
|
1045
|
-
var
|
|
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
|
-
|
|
1049
|
-
if (
|
|
1050
|
-
|
|
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
|
-
|
|
1056
|
-
if (
|
|
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
|
-
|
|
1164
|
+
scrollHeightLocal = "calc(".concat(viewHeight, " - ").concat(headerFooterHeight, "px)");
|
|
1094
1165
|
}
|
|
1095
1166
|
}
|
|
1096
1167
|
}
|
|
1097
1168
|
var style = {};
|
|
1098
|
-
if (
|
|
1099
|
-
style.width =
|
|
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:
|
|
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:
|
|
1398
|
-
props.removeRow !==
|
|
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[
|
|
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
|
}
|
package/lib/components/XUtils.js
CHANGED
|
@@ -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
|