@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.
@@ -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(XFormDataTable2_1.XFormDataTable2, { form: this, assocField: "columnMetaList", label: "Column list" },
48
- react_1.default.createElement(XFormDataTable2_1.XFormColumn, { field: "idXColumnMeta", header: "ID", readOnly: true }),
49
- react_1.default.createElement(XFormDataTable2_1.XFormColumn, { field: "field", header: "Field", width: "17rem" }),
50
- react_1.default.createElement(XFormDataTable2_1.XFormColumn, { field: "header", header: "Header", width: "17rem" }),
51
- react_1.default.createElement(XFormDataTable2_1.XFormColumn, { field: "align", header: "Align" }),
52
- react_1.default.createElement(XFormDataTable2_1.XFormColumn, { field: "dropdownInFilter", header: "Dropdown in filter" }),
53
- react_1.default.createElement(XFormDataTable2_1.XFormColumn, { field: "width", header: "Width" }),
54
- react_1.default.createElement(XFormDataTable2_1.XFormColumn, { field: "columnOrder", header: "Column order" })),
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(XButton_1.XButton, { label: "Export", onClick: onExport })));
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
- scrollWidth = this.props.scrollWidth;
312
- scrollHeight = this.props.scrollHeight;
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
- return react_1.default.createElement("div", { key: index, style: { display: display, maxWidth: "100%" } }, formElementCloned);
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
- rows?: number;
16
+ paginator: boolean;
17
+ rows: number;
17
18
  scrollable: boolean;
18
- scrollWidth?: string;
19
- scrollHeight?: string;
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.rows !== undefined ? props.rows : 10), 2), rows = _d[0], setRows = _d[1];
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 nemame scrollWidth/scrollHeight zadane, vyratame scrollWidth/scrollHeight tak aby tabulka "sadla" okna (viewport-u)
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
- scrollWidth = props.scrollWidth;
496
- if (scrollWidth === undefined || scrollWidth === "default") {
497
- scrollWidth = 'calc(100vw - 1.4rem)'; // 20px okraje
498
- }
499
- scrollHeight = props.scrollHeight;
500
- if (scrollHeight === undefined || scrollHeight === "default") {
501
- // vypocet je priblizny, robeny na mobil, desktop bude mat mozno iny
502
- //const headerHeight = XUtils.toPX0('12.7rem');
503
- //let footerHeight = XUtils.toPX0('3.7rem') + XUtils.toPX0('3rem'); // table footer (paging) + buttons Add row, Edit, ...
504
- // na desktope mi nechce odpocitat vysku taskbar-u od window.screen.availHeight, tak to poriesime takymto hack-om:
505
- // if (!XUtils.isMobile()) {
506
- // footerHeight += XUtils.toPX0('6rem'); // priblizna vyska taskbaru (ak mam 2 rady buttonov)
507
- // }
508
- var headerFooterHeight = 344.35 - XUtils_1.XUtils.toPX0('4.43rem'); // experimentalne zistena vyska header/footer (body - table body) bez formFooterHeight
509
- // este pridame vysku linkov na zdrojaky, ak treba
510
- if (props.formFooterHeight !== undefined) {
511
- headerFooterHeight += XUtils_1.XUtils.toPX0(XUtils_1.XUtils.processGridBreakpoints(props.formFooterHeight));
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: true, 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)),
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(XExportRowsDialog_1.XExportRowsDialog, { dialogOpened: exportRowsDialogOpened, rowCount: exportRowsDialogRowCount, onHideDialog: exportRowsDialogOnHide }),
632
- props.searchTableParams !== undefined ? react_1.default.createElement(XButton_1.XButton, { label: "Choose", onClick: onClickChoose }) : null)));
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", null,
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"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@michalrakus/x-react-web-lib",
3
- "version": "0.24.0",
3
+ "version": "0.25.0",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "clean": "rimraf lib",