@michalrakus/x-react-web-lib 0.24.0 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/administration/XBrowseMetaForm.js +9 -8
- package/lib/components/XDropdown.js +2 -1
- package/lib/components/XExportRowsDialog.js +2 -1
- package/lib/components/XFormDataTable2.js +8 -4
- package/lib/components/XFormNavigator3.js +15 -2
- package/lib/components/XLazyDataTable.d.ts +8 -3
- package/lib/components/XLazyDataTable.js +57 -26
- package/lib/components/XLoginForm.js +1 -1
- package/package.json +1 -1
|
@@ -44,14 +44,15 @@ var XBrowseMetaForm = /** @class */ (function (_super) {
|
|
|
44
44
|
react_1.default.createElement(XInputText_1.XInputText, { form: this, field: "entity", label: "Entity", size: 20 }),
|
|
45
45
|
react_1.default.createElement(XInputText_1.XInputText, { form: this, field: "browseId", label: "Browse ID", size: 20 }),
|
|
46
46
|
react_1.default.createElement(XInputDecimal_1.XInputDecimal, { form: this, field: "rows", label: "Rows" }))),
|
|
47
|
-
react_1.default.createElement(
|
|
48
|
-
react_1.default.createElement(XFormDataTable2_1.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
47
|
+
react_1.default.createElement("div", { className: "x-viewport-width" },
|
|
48
|
+
react_1.default.createElement(XFormDataTable2_1.XFormDataTable2, { form: this, assocField: "columnMetaList", label: "Column list" },
|
|
49
|
+
react_1.default.createElement(XFormDataTable2_1.XFormColumn, { field: "idXColumnMeta", header: "ID", readOnly: true }),
|
|
50
|
+
react_1.default.createElement(XFormDataTable2_1.XFormColumn, { field: "field", header: "Field", width: "17rem" }),
|
|
51
|
+
react_1.default.createElement(XFormDataTable2_1.XFormColumn, { field: "header", header: "Header", width: "17rem" }),
|
|
52
|
+
react_1.default.createElement(XFormDataTable2_1.XFormColumn, { field: "align", header: "Align" }),
|
|
53
|
+
react_1.default.createElement(XFormDataTable2_1.XFormColumn, { field: "dropdownInFilter", header: "Dropdown in filter" }),
|
|
54
|
+
react_1.default.createElement(XFormDataTable2_1.XFormColumn, { field: "width", header: "Width" }),
|
|
55
|
+
react_1.default.createElement(XFormDataTable2_1.XFormColumn, { field: "columnOrder", header: "Column order" }))),
|
|
55
56
|
react_1.default.createElement(XFormFooter_1.XFormFooter, { form: this })));
|
|
56
57
|
};
|
|
57
58
|
XBrowseMetaForm = __decorate([
|
|
@@ -150,9 +150,10 @@ var XDropdown = /** @class */ (function (_super) {
|
|
|
150
150
|
// TODO - readOnly implementovat
|
|
151
151
|
// Dropdown setuje do atributu object.assocField asociovany objekt zo zoznamu objektov ktore ziskame podla asociacie
|
|
152
152
|
var assocObject = this.getValueFromObject();
|
|
153
|
+
// appendTo={document.body} appenduje overlay panel na element body - eliminuje "skakanie" formularu na mobile pri kliknuti na dropdown
|
|
153
154
|
return (react_1.default.createElement("div", { className: "field grid" },
|
|
154
155
|
react_1.default.createElement("label", { htmlFor: props.assocField, className: "col-fixed", style: labelStyle }, label),
|
|
155
|
-
react_1.default.createElement(dropdown_1.Dropdown, __assign({ id: props.assocField, optionLabel: props.displayField, value: assocObject, options: options, onChange: onValueChange }, this.getClassNameTooltip()))));
|
|
156
|
+
react_1.default.createElement(dropdown_1.Dropdown, __assign({ appendTo: document.body, id: props.assocField, optionLabel: props.displayField, value: assocObject, options: options, onChange: onValueChange }, this.getClassNameTooltip()))));
|
|
156
157
|
};
|
|
157
158
|
return XDropdown;
|
|
158
159
|
}(XFormComponent_1.XFormComponent));
|
|
@@ -84,6 +84,7 @@ var XExportRowsDialog = function (props) {
|
|
|
84
84
|
react_1.default.createElement("label", { className: "col-fixed", style: { width: '9.3rem' } }, "Export type"),
|
|
85
85
|
react_1.default.createElement(dropdown_1.Dropdown, { value: exportType, options: XUtils_1.XUtils.exportTypeOptions, onChange: function (e) { return setExportType(e.value); } })),
|
|
86
86
|
elem,
|
|
87
|
-
react_1.default.createElement(
|
|
87
|
+
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
88
|
+
react_1.default.createElement(XButton_1.XButton, { label: "Export", onClick: onExport }))));
|
|
88
89
|
};
|
|
89
90
|
exports.XExportRowsDialog = XExportRowsDialog;
|
|
@@ -305,11 +305,15 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
305
305
|
var object = this.props.form.state.object;
|
|
306
306
|
var valueList = object !== null ? object[this.props.assocField] : [];
|
|
307
307
|
var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(this.getEntity());
|
|
308
|
-
var scrollWidth;
|
|
309
|
-
var scrollHeight;
|
|
308
|
+
var scrollWidth = undefined; // vypnute horizontalne scrollovanie
|
|
309
|
+
var scrollHeight = undefined; // vypnute vertikalne scrollovanie
|
|
310
310
|
if (this.props.scrollable) {
|
|
311
|
-
|
|
312
|
-
|
|
311
|
+
if (this.props.scrollWidth !== "none") {
|
|
312
|
+
scrollWidth = this.props.scrollWidth;
|
|
313
|
+
}
|
|
314
|
+
if (this.props.scrollHeight !== "none") {
|
|
315
|
+
scrollHeight = this.props.scrollHeight;
|
|
316
|
+
}
|
|
313
317
|
}
|
|
314
318
|
var style = {};
|
|
315
319
|
if (scrollWidth !== undefined) {
|
|
@@ -86,7 +86,19 @@ var XFormNavigator3 = /** @class */ (function (_super) {
|
|
|
86
86
|
console.log("neocakavana chyba - pole formElements je prazdne");
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
|
-
this.setState({ formElements: formElementsCloned })
|
|
89
|
+
this.setState({ formElements: formElementsCloned }, function () {
|
|
90
|
+
// ked sa na mobile preklikavame medzi formularmi, tak browser drzi nascrollovanu poziciu ale my sa chceme vratit na zaciatok stranky
|
|
91
|
+
// (tento callback sa zavola po refreshnuti stranky)
|
|
92
|
+
// taketo nieco nezafungovalo, neviem preco...
|
|
93
|
+
// setTimeout(function() {
|
|
94
|
+
// window.scrollTo(0,0);
|
|
95
|
+
// }, 100);
|
|
96
|
+
// tak scrollujeme k menu, ktore je v hornej casti
|
|
97
|
+
var menuElem = document.getElementById("menuId");
|
|
98
|
+
if (menuElem !== null) {
|
|
99
|
+
menuElem.scrollIntoView();
|
|
100
|
+
}
|
|
101
|
+
});
|
|
90
102
|
};
|
|
91
103
|
XFormNavigator3.prototype.render = function () {
|
|
92
104
|
var _this = this;
|
|
@@ -100,7 +112,8 @@ var XFormNavigator3 = /** @class */ (function (_super) {
|
|
|
100
112
|
var display = (displayed ? "block" : "none");
|
|
101
113
|
// TODO - neviem ci naisto treba key={index}
|
|
102
114
|
// max-width: 100% - koli chybe ked sa na mobile nezobrazovala lava cast tabulky/formularu (nedalo sa k nej doscrollovat)
|
|
103
|
-
|
|
115
|
+
// poznamka2: tento problem sa vyskytoval v suvislosti s flex-direction: column na .App-form - ten sme zrusili a preto maxWidth (zatial) odstranujeme
|
|
116
|
+
return react_1.default.createElement("div", { key: index, style: { display: display /*, maxWidth: "100%"*/ } }, formElementCloned);
|
|
104
117
|
});
|
|
105
118
|
return (react_1.default.createElement("div", { className: "App-form" }, forms));
|
|
106
119
|
};
|
|
@@ -13,10 +13,11 @@ export interface XEditModeHandlers {
|
|
|
13
13
|
export interface XLazyDataTableProps {
|
|
14
14
|
entity: string;
|
|
15
15
|
dataKey?: string;
|
|
16
|
-
|
|
16
|
+
paginator: boolean;
|
|
17
|
+
rows: number;
|
|
17
18
|
scrollable: boolean;
|
|
18
|
-
scrollWidth
|
|
19
|
-
scrollHeight
|
|
19
|
+
scrollWidth: string;
|
|
20
|
+
scrollHeight: string;
|
|
20
21
|
formFooterHeight?: string;
|
|
21
22
|
shrinkWidth: boolean;
|
|
22
23
|
onAddRow?: () => void;
|
|
@@ -33,7 +34,11 @@ export interface XLazyDataTableProps {
|
|
|
33
34
|
export declare const XLazyDataTable: {
|
|
34
35
|
(props: XLazyDataTableProps): JSX.Element;
|
|
35
36
|
defaultProps: {
|
|
37
|
+
paginator: boolean;
|
|
38
|
+
rows: number;
|
|
36
39
|
scrollable: boolean;
|
|
40
|
+
scrollWidth: string;
|
|
41
|
+
scrollHeight: string;
|
|
37
42
|
shrinkWidth: boolean;
|
|
38
43
|
};
|
|
39
44
|
};
|
|
@@ -112,7 +112,7 @@ var XLazyDataTable = function (props) {
|
|
|
112
112
|
var _a = __read(react_1.useState({ rowList: [], totalRecords: 0 }), 2), value = _a[0], setValue = _a[1];
|
|
113
113
|
var _b = __read(react_1.useState(false), 2), loading = _b[0], setLoading = _b[1];
|
|
114
114
|
var _c = __read(react_1.useState(0), 2), first = _c[0], setFirst = _c[1];
|
|
115
|
-
var _d = __read(react_1.useState(props.
|
|
115
|
+
var _d = __read(react_1.useState(props.paginator ? props.rows : undefined), 2), rows = _d[0], setRows = _d[1];
|
|
116
116
|
var filtersInit = {};
|
|
117
117
|
if (props.searchTableParams !== undefined && props.searchTableParams.filter !== undefined) {
|
|
118
118
|
filtersInit[props.searchTableParams.displayField] = { value: props.searchTableParams.filter, matchMode: "startsWith" };
|
|
@@ -488,29 +488,54 @@ var XLazyDataTable = function (props) {
|
|
|
488
488
|
return bodyValue;
|
|
489
489
|
};
|
|
490
490
|
var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(props.entity);
|
|
491
|
-
// ak
|
|
492
|
-
var scrollWidth;
|
|
493
|
-
var scrollHeight;
|
|
491
|
+
// ak mame scrollWidth/scrollHeight = viewport (default), vyratame scrollWidth/scrollHeight tak aby tabulka "sadla" okna (viewport-u)
|
|
492
|
+
var scrollWidth = undefined; // vypnute horizontalne scrollovanie
|
|
493
|
+
var scrollHeight = undefined; // vypnute vertikalne scrollovanie
|
|
494
494
|
if (props.scrollable) {
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
495
|
+
if (props.scrollWidth !== "none") {
|
|
496
|
+
scrollWidth = props.scrollWidth;
|
|
497
|
+
if (scrollWidth === "viewport") {
|
|
498
|
+
scrollWidth = 'calc(100vw - 1.4rem)'; // 20px okraje
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
if (props.scrollHeight !== "none") {
|
|
502
|
+
scrollHeight = props.scrollHeight;
|
|
503
|
+
if (scrollHeight === "viewport") {
|
|
504
|
+
// vypocet je priblizny, robeny na mobil, desktop bude mat mozno iny
|
|
505
|
+
//const headerHeight = XUtils.toPX0('12.7rem');
|
|
506
|
+
//let footerHeight = XUtils.toPX0('3.7rem') + XUtils.toPX0('3rem'); // table footer (paging) + buttons Add row, Edit, ...
|
|
507
|
+
// na desktope mi nechce odpocitat vysku taskbar-u od window.screen.availHeight, tak to poriesime takymto hack-om:
|
|
508
|
+
// if (!XUtils.isMobile()) {
|
|
509
|
+
// footerHeight += XUtils.toPX0('6rem'); // priblizna vyska taskbaru (ak mam 2 rady buttonov)
|
|
510
|
+
// }
|
|
511
|
+
var viewHeight = void 0;
|
|
512
|
+
var headerFooterHeight = void 0;
|
|
513
|
+
if (props.searchTableParams === undefined) {
|
|
514
|
+
// sme v standardnom formulari
|
|
515
|
+
viewHeight = '100vh';
|
|
516
|
+
headerFooterHeight = XUtils_1.XUtils.toPX0('20.89rem') - XUtils_1.XUtils.toPX0('4.43rem'); // experimentalne zistena vyska header/footer (body - table body) bez formFooterHeight
|
|
517
|
+
}
|
|
518
|
+
else {
|
|
519
|
+
// sme v dialogu
|
|
520
|
+
if (XUtils_1.XUtils.isMobile()) {
|
|
521
|
+
viewHeight = '98vh'; // .p-dialog pre mobil ma max-height: 98%
|
|
522
|
+
headerFooterHeight = XUtils_1.XUtils.toPX0('17.60rem'); // rucne zratane
|
|
523
|
+
}
|
|
524
|
+
else {
|
|
525
|
+
viewHeight = '90vh'; // .p-dialog pre desktop ma max-height: 90%
|
|
526
|
+
headerFooterHeight = XUtils_1.XUtils.toPX0('18.60rem'); // rucne zratane (desktop ma vecsi margin dole na dialogu)
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
// pridame vysku paging-u, ak treba
|
|
530
|
+
if (props.paginator) {
|
|
531
|
+
headerFooterHeight += XUtils_1.XUtils.toPX0('3.71rem');
|
|
532
|
+
}
|
|
533
|
+
// este pridame vysku linkov na zdrojaky, ak treba
|
|
534
|
+
if (props.formFooterHeight !== undefined) {
|
|
535
|
+
headerFooterHeight += XUtils_1.XUtils.toPX0(XUtils_1.XUtils.processGridBreakpoints(props.formFooterHeight));
|
|
536
|
+
}
|
|
537
|
+
scrollHeight = "calc(" + viewHeight + " - " + headerFooterHeight + "px)";
|
|
512
538
|
}
|
|
513
|
-
scrollHeight = "calc(100vh - " + headerFooterHeight + "px)";
|
|
514
539
|
}
|
|
515
540
|
}
|
|
516
541
|
var style = {};
|
|
@@ -545,6 +570,8 @@ var XLazyDataTable = function (props) {
|
|
|
545
570
|
paginatorRight = react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-pencil", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onStart(); }, tooltip: "Edit form" });
|
|
546
571
|
}
|
|
547
572
|
// else -> editMode is undefined - browse is not editable
|
|
573
|
+
// export pre search button-y zatial vypneme
|
|
574
|
+
var exportRows = (props.searchTableParams === undefined);
|
|
548
575
|
// pre lepsiu citatelnost vytvarame stlpce uz tu
|
|
549
576
|
var columnElemList = react_1.default.Children.map(props.children, function (child) {
|
|
550
577
|
// ak chceme zmenit child element, tak treba bud vytvorit novy alebo vyklonovat
|
|
@@ -621,19 +648,23 @@ var XLazyDataTable = function (props) {
|
|
|
621
648
|
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
622
649
|
react_1.default.createElement(XButton_1.XButton, { label: "Filter", onClick: onClickFilter })),
|
|
623
650
|
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
624
|
-
react_1.default.createElement(datatable_1.DataTable, { value: value.rowList, dataKey: dataKey, paginator:
|
|
651
|
+
react_1.default.createElement(datatable_1.DataTable, { value: value.rowList, dataKey: dataKey, paginator: props.paginator, rows: rows, totalRecords: value.totalRecords, lazy: true, first: first, onPage: onPage, loading: loading, filters: filters, onFilter: onFilter, sortMode: "multiple", removableSort: true, multiSortMeta: multiSortMeta, onSort: onSort, selectionMode: "single", selection: selectedRow, onSelectionChange: onSelectionChange, onRowDoubleClick: onRowDoubleClick, 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)),
|
|
625
652
|
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
626
653
|
props.onAddRow !== undefined ? react_1.default.createElement(XButton_1.XButton, { label: "Add row", onClick: onClickAddRow }) : null,
|
|
627
654
|
props.onEdit !== undefined ? react_1.default.createElement(XButton_1.XButton, { label: "Edit", onClick: onClickEdit }) : null,
|
|
628
655
|
props.removeRow !== undefined && props.removeRow !== false ? react_1.default.createElement(XButton_1.XButton, { label: "Remove row", onClick: onClickRemoveRow }) : null,
|
|
629
|
-
react_1.default.createElement(XButton_1.XButton, { label: "Export rows", onClick: onClickExport }),
|
|
656
|
+
exportRows ? react_1.default.createElement(XButton_1.XButton, { label: "Export rows", onClick: onClickExport }) : null,
|
|
630
657
|
props.appButtons,
|
|
631
|
-
react_1.default.createElement(
|
|
632
|
-
|
|
658
|
+
props.searchTableParams !== undefined ? react_1.default.createElement(XButton_1.XButton, { label: "Choose", onClick: onClickChoose }) : null,
|
|
659
|
+
exportRows ? react_1.default.createElement(XExportRowsDialog_1.XExportRowsDialog, { dialogOpened: exportRowsDialogOpened, rowCount: exportRowsDialogRowCount, onHideDialog: exportRowsDialogOnHide }) : null)));
|
|
633
660
|
};
|
|
634
661
|
exports.XLazyDataTable = XLazyDataTable;
|
|
635
662
|
exports.XLazyDataTable.defaultProps = {
|
|
663
|
+
paginator: true,
|
|
664
|
+
rows: 10,
|
|
636
665
|
scrollable: true,
|
|
666
|
+
scrollWidth: 'viewport',
|
|
667
|
+
scrollHeight: 'viewport',
|
|
637
668
|
shrinkWidth: true
|
|
638
669
|
};
|
|
639
670
|
// TODO - XLazyColumn neni idealny nazov, lepsi je XColumn (ale zatial nechame XLazyColumn)
|
|
@@ -111,7 +111,7 @@ var XLoginForm = function (props) {
|
|
|
111
111
|
}
|
|
112
112
|
});
|
|
113
113
|
}); };
|
|
114
|
-
return (react_1.default.createElement("div",
|
|
114
|
+
return (react_1.default.createElement("div", { className: "flex flex-column align-items-center" },
|
|
115
115
|
react_1.default.createElement("h2", null, "Please log in"),
|
|
116
116
|
react_1.default.createElement("div", { className: "field grid" },
|
|
117
117
|
react_1.default.createElement("label", { htmlFor: "userName", className: "col-fixed", style: { width: '10.5rem' } }, "Username"),
|