@michalrakus/x-react-web-lib 1.32.1 → 1.32.3
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.
|
@@ -548,7 +548,6 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
548
548
|
else if (sortField === "none") {
|
|
549
549
|
sortField = undefined;
|
|
550
550
|
}
|
|
551
|
-
var label = this.props.label !== undefined ? this.props.label : this.props.assocField;
|
|
552
551
|
var readOnly = this.isReadOnly();
|
|
553
552
|
// v bloku function (child) nejde pouzit priamo this, thisLocal uz ide pouzit
|
|
554
553
|
var thisLocal = this;
|
|
@@ -559,6 +558,9 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
559
558
|
if (this.props.scrollable) {
|
|
560
559
|
if (this.props.scrollWidth !== "none") {
|
|
561
560
|
scrollWidth = this.props.scrollWidth;
|
|
561
|
+
if (scrollWidth === "viewport") {
|
|
562
|
+
scrollWidth = "calc(100vw - ".concat(XUtils_1.XUtils.isMobile() ? 1.2 : 2.2, "rem)"); // desktop - povodne bolo 1.4rem (20px okraje) namiesto 2.2 ale pri vela stlpcoch vznikal horizontalny scrollbar
|
|
563
|
+
}
|
|
562
564
|
}
|
|
563
565
|
if (this.props.scrollHeight !== "none") {
|
|
564
566
|
scrollHeight = this.props.scrollHeight;
|
|
@@ -689,8 +691,10 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
689
691
|
removeRowLabel = (_b = this.props.removeRowLabel) !== null && _b !== void 0 ? _b : (0, XLocale_1.xLocaleOption)('removeRow');
|
|
690
692
|
}
|
|
691
693
|
return (react_1.default.createElement("div", null,
|
|
692
|
-
|
|
693
|
-
react_1.default.createElement("
|
|
694
|
+
this.props.label !== undefined ?
|
|
695
|
+
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
696
|
+
react_1.default.createElement("label", null, this.props.label))
|
|
697
|
+
: undefined,
|
|
694
698
|
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
695
699
|
react_1.default.createElement(datatable_1.DataTable, { ref: function (el) { return _this.dt = el; }, value: valueList, dataKey: this.dataKey, paginator: paginator, rows: rows, totalRecords: valueList.length, filterDisplay: filterDisplay, filters: this.state.filters, onFilter: this.onFilter, sortMode: "multiple", removableSort: true, multiSortMeta: sortField !== undefined ? [{ field: sortField, order: 1 }] : undefined, selectionMode: "single", selection: this.state.selectedRow, onSelectionChange: this.onSelectionChange, className: "p-datatable-sm x-form-datatable", resizableColumns: true, columnResizeMode: "expand", tableStyle: tableStyle, scrollable: this.props.scrollable, scrollHeight: scrollHeight, style: style }, columnElemList)),
|
|
696
700
|
this.props.showAddRemoveButtons ?
|
|
@@ -704,7 +708,8 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
704
708
|
sortable: false,
|
|
705
709
|
sortField: "idFieldOnUpdate",
|
|
706
710
|
scrollable: true,
|
|
707
|
-
scrollWidth: '100%',
|
|
711
|
+
//scrollWidth: '100%', // nefungovalo dobre - hodnota '100%' zapne horizontalne scrollovanie, ak je tabulka sirsia ako parent element (a ten by mal byt max 100vw) (hodnota 'auto' (podobna ako '100%') nefunguje dobre)
|
|
712
|
+
scrollWidth: 'viewport',
|
|
708
713
|
scrollHeight: '200vh',
|
|
709
714
|
// tym ze pouzivame 200vh (max-height pre body), tak realne scrollovanie sa zapne az pri velmi vela riadkoch
|
|
710
715
|
shrinkWidth: true,
|
|
@@ -17,6 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
exports.XFtsInput = void 0;
|
|
18
18
|
var react_1 = __importDefault(require("react"));
|
|
19
19
|
var XInputTextBase_1 = require("./XInputTextBase");
|
|
20
|
+
var XUtils_1 = require("./XUtils");
|
|
20
21
|
var XFtsInput = function (props) {
|
|
21
22
|
var onChange = function (value) {
|
|
22
23
|
props.value.value = value;
|
|
@@ -24,6 +25,6 @@ var XFtsInput = function (props) {
|
|
|
24
25
|
};
|
|
25
26
|
// TODO - pridat input na zmenu matchMode
|
|
26
27
|
// we use XInputTextBase - we save onChange calls
|
|
27
|
-
return (react_1.default.createElement(XInputTextBase_1.XInputTextBase, { value: props.value.value, onChange: onChange, style: { height: '2.5rem', width: '17rem' }, className: "m-1" }));
|
|
28
|
+
return (react_1.default.createElement(XInputTextBase_1.XInputTextBase, { value: props.value.value, onChange: onChange, style: { height: '2.5rem', width: XUtils_1.XUtils.isMobile() ? '7rem' : '17rem' }, className: "m-1" }));
|
|
28
29
|
};
|
|
29
30
|
exports.XFtsInput = XFtsInput;
|
|
@@ -44,6 +44,9 @@ export interface XLazyDataTableProps {
|
|
|
44
44
|
rows: number;
|
|
45
45
|
filterDisplay: "menu" | "row";
|
|
46
46
|
betweenFilter?: XBetweenFilterProp;
|
|
47
|
+
autoFilter: boolean;
|
|
48
|
+
showFilterButtons: boolean;
|
|
49
|
+
showExportRows?: boolean;
|
|
47
50
|
scrollable: boolean;
|
|
48
51
|
scrollWidth: string;
|
|
49
52
|
scrollHeight: string;
|
|
@@ -80,6 +83,8 @@ export declare const XLazyDataTable: {
|
|
|
80
83
|
paginator: boolean;
|
|
81
84
|
rows: number;
|
|
82
85
|
filterDisplay: string;
|
|
86
|
+
autoFilter: boolean;
|
|
87
|
+
showFilterButtons: boolean;
|
|
83
88
|
fullTextSearch: boolean;
|
|
84
89
|
multilineSwitch: boolean;
|
|
85
90
|
multilineSwitchInitValue: string;
|
|
@@ -335,10 +335,12 @@ var XLazyDataTable = function (props) {
|
|
|
335
335
|
});
|
|
336
336
|
}); };
|
|
337
337
|
var onFilter = function (event) {
|
|
338
|
+
// pozor! tato metoda sa nevola, odkedy vzdy pouzivame filterElement na elemente Column (mame vo filtri vlastne komponenty ktore priamo volaju setFilters(...))
|
|
338
339
|
//console.log("zavolany onFilter - this.state.filters = " + JSON.stringify(filters));
|
|
339
340
|
//console.log("zavolany onFilter - event.filters = " + JSON.stringify(event.filters));
|
|
340
341
|
// tymto zavolanim sa zapise znak zapisany klavesnicou do inputu filtra (ak prikaz zakomentujeme, input filtra zostane prazdny)
|
|
341
342
|
setFilters(event.filters);
|
|
343
|
+
loadDataBaseIfAutoFilter(event.filters);
|
|
342
344
|
};
|
|
343
345
|
var onSort = function (event) {
|
|
344
346
|
//console.log("zavolany onSort - this.state.multiSortMeta = " + JSON.stringify(multiSortMeta));
|
|
@@ -348,6 +350,13 @@ var XLazyDataTable = function (props) {
|
|
|
348
350
|
findParam.multiSortMeta = event.multiSortMeta; // prepiseme multiSortMeta, lebo je tam stara hodnota (volanie setMultiSortMeta nezmeni multiSortMeta hned)
|
|
349
351
|
loadDataBase(findParam);
|
|
350
352
|
};
|
|
353
|
+
var loadDataBaseIfAutoFilter = function (filters) {
|
|
354
|
+
if (props.autoFilter) {
|
|
355
|
+
var findParam = createFindParam();
|
|
356
|
+
findParam.filters = filters; // prepiseme filters, lebo je tam stara hodnota
|
|
357
|
+
loadDataBase(findParam);
|
|
358
|
+
}
|
|
359
|
+
};
|
|
351
360
|
var onClickFilter = function () {
|
|
352
361
|
//console.log("zavolany onClickFilter");
|
|
353
362
|
loadData();
|
|
@@ -747,6 +756,7 @@ var XLazyDataTable = function (props) {
|
|
|
747
756
|
// neskusal som, ci treba aj toto klonovat ale pravdepodobne hej
|
|
748
757
|
var filtersCloned = __assign({}, filters);
|
|
749
758
|
setFilters(filtersCloned);
|
|
759
|
+
loadDataBaseIfAutoFilter(filtersCloned);
|
|
750
760
|
};
|
|
751
761
|
// vseobecna specialna metodka pouzvana pri custom filtri (XLazyColumn.filterElement)
|
|
752
762
|
var getFilterItem = function (field) {
|
|
@@ -764,6 +774,7 @@ var XLazyDataTable = function (props) {
|
|
|
764
774
|
// treba klonovat, inac react nezobrazi zmenenu hodnotu
|
|
765
775
|
var filtersCloned = __assign({}, filters);
|
|
766
776
|
setFilters(filtersCloned);
|
|
777
|
+
loadDataBaseIfAutoFilter(filtersCloned);
|
|
767
778
|
};
|
|
768
779
|
// vseobecna metodka - precita hodnotu z filtra (vrati napr. typ Date | null)
|
|
769
780
|
var getFilterValue = function (field) {
|
|
@@ -885,13 +896,14 @@ var XLazyDataTable = function (props) {
|
|
|
885
896
|
return bodyValue;
|
|
886
897
|
};
|
|
887
898
|
// ak mame scrollWidth/scrollHeight = viewport (default), vyratame scrollWidth/scrollHeight tak aby tabulka "sadla" do okna (viewport-u)
|
|
899
|
+
var isMobile = XUtils_1.XUtils.isMobile();
|
|
888
900
|
var scrollWidth = undefined; // vypnute horizontalne scrollovanie
|
|
889
901
|
var scrollHeight = undefined; // vypnute vertikalne scrollovanie
|
|
890
902
|
if (props.scrollable) {
|
|
891
903
|
if (props.scrollWidth !== "none") {
|
|
892
904
|
scrollWidth = props.scrollWidth;
|
|
893
905
|
if (scrollWidth === "viewport") {
|
|
894
|
-
scrollWidth =
|
|
906
|
+
scrollWidth = "calc(100vw - ".concat(isMobile ? 1.2 : 2.2, "rem)"); // desktop - povodne bolo 1.4rem (20px okraje) namiesto 2.2 ale pri vela stlpcoch vznikal horizontalny scrollbar
|
|
895
907
|
}
|
|
896
908
|
}
|
|
897
909
|
if (props.scrollHeight !== "none") {
|
|
@@ -916,7 +928,7 @@ var XLazyDataTable = function (props) {
|
|
|
916
928
|
}
|
|
917
929
|
else {
|
|
918
930
|
// sme v dialogu
|
|
919
|
-
if (
|
|
931
|
+
if (isMobile) {
|
|
920
932
|
viewHeight = '98vh'; // .p-dialog pre mobil ma max-height: 98%
|
|
921
933
|
headerFooterHeight = XUtils_1.XUtils.toPX0('12.03rem'); // rucne zratane
|
|
922
934
|
}
|
|
@@ -959,23 +971,46 @@ var XLazyDataTable = function (props) {
|
|
|
959
971
|
}
|
|
960
972
|
// pouzivame paginatorLeft aj paginatorRight (aj prazdny) pouzivame, aby bol default paginator v strede (bez paginatorLeft je default paginator presunuty dolava a naopak)
|
|
961
973
|
// sirku div-ov este nastavujeme v css na 10rem
|
|
962
|
-
var paginatorLeft
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
974
|
+
var paginatorLeft;
|
|
975
|
+
var paginatorRight;
|
|
976
|
+
var pageLinkSize;
|
|
977
|
+
if (!isMobile) {
|
|
978
|
+
paginatorLeft = react_1.default.createElement("div", null,
|
|
979
|
+
(0, XLocale_1.xLocaleOption)('totalRecords'),
|
|
980
|
+
": ",
|
|
981
|
+
value.totalRecords);
|
|
982
|
+
paginatorRight = react_1.default.createElement("div", null);
|
|
983
|
+
pageLinkSize = 5; // default
|
|
984
|
+
if (props.editMode === true) {
|
|
985
|
+
paginatorRight = react_1.default.createElement("div", null,
|
|
986
|
+
react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-save", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onSave(); }, tooltip: "Save form" }),
|
|
987
|
+
react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-times", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onCancel(); }, tooltip: "Cancel editing" }));
|
|
988
|
+
}
|
|
989
|
+
else if (props.editMode === false) {
|
|
990
|
+
paginatorRight = react_1.default.createElement("div", null,
|
|
991
|
+
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" }));
|
|
992
|
+
}
|
|
993
|
+
// else - editMode is undefined - browse is not editable
|
|
994
|
+
}
|
|
995
|
+
else {
|
|
996
|
+
// na mobile setrime miesto
|
|
997
|
+
paginatorLeft = react_1.default.createElement("div", { style: { minWidth: '3rem' } }, value.totalRecords);
|
|
998
|
+
paginatorRight = react_1.default.createElement("div", { style: { minWidth: '3rem' } });
|
|
999
|
+
pageLinkSize = 3;
|
|
1000
|
+
}
|
|
1001
|
+
var exportRows;
|
|
1002
|
+
if (props.searchBrowseParams !== undefined) {
|
|
1003
|
+
// export pre search button-y zatial vypneme
|
|
1004
|
+
exportRows = false;
|
|
1005
|
+
}
|
|
1006
|
+
else if (props.showExportRows !== undefined) {
|
|
1007
|
+
// mame explicitne definovane ci ano alebo nie
|
|
1008
|
+
exportRows = props.showExportRows;
|
|
971
1009
|
}
|
|
972
|
-
else
|
|
973
|
-
|
|
974
|
-
|
|
1010
|
+
else {
|
|
1011
|
+
// len na desktope zobrazime
|
|
1012
|
+
exportRows = !isMobile;
|
|
975
1013
|
}
|
|
976
|
-
// else - editMode is undefined - browse is not editable
|
|
977
|
-
// export pre search button-y zatial vypneme
|
|
978
|
-
var exportRows = (props.searchBrowseParams === undefined);
|
|
979
1014
|
// pre lepsiu citatelnost vytvarame stlpce uz tu
|
|
980
1015
|
var columnElemList = react_1.default.Children.map(props.children.filter(function (child) { return XUtils_1.XUtils.xViewStatus(child.props.columnViewStatus) !== XUtils_1.XViewStatus.Hidden; }), function (child) {
|
|
981
1016
|
// ak chceme zmenit child element, tak treba bud vytvorit novy alebo vyklonovat
|
|
@@ -1182,13 +1217,13 @@ var XLazyDataTable = function (props) {
|
|
|
1182
1217
|
react_1.default.createElement("div", { className: "flex justify-content-center align-items-center" },
|
|
1183
1218
|
props.label ? react_1.default.createElement("div", { className: "x-lazy-datatable-label" }, props.label) : null,
|
|
1184
1219
|
ftsInputValue ? react_1.default.createElement(XFtsInput_1.XFtsInput, { value: ftsInputValue, onChange: function (value) { return setFtsInputValue(value); } }) : null,
|
|
1185
|
-
react_1.default.createElement(XButton_1.XButton, { key: "filter", label: (0, XLocale_1.xLocaleOption)('filter'), onClick: onClickFilter }),
|
|
1186
|
-
react_1.default.createElement(XButton_1.XButton, { key: "clearFilter", label: (0, XLocale_1.xLocaleOption)('clearFilter'), onClick: onClickClearFilter }),
|
|
1220
|
+
props.showFilterButtons ? react_1.default.createElement(XButton_1.XButton, { key: "filter", icon: isMobile ? "pi pi-search" : undefined, label: !isMobile ? (0, XLocale_1.xLocaleOption)('filter') : undefined, onClick: onClickFilter }) : null,
|
|
1221
|
+
props.showFilterButtons ? react_1.default.createElement(XButton_1.XButton, { key: "clearFilter", icon: isMobile ? "pi pi-ban" : undefined, label: !isMobile ? (0, XLocale_1.xLocaleOption)('clearFilter') : undefined, onClick: onClickClearFilter }) : null,
|
|
1187
1222
|
props.optionalCustomFilters ? react_1.default.createElement(XOcfDropdown_1.XOcfDropdown, { optionalCustomFilters: props.optionalCustomFilters, value: optionalCustomFilter, onChange: function (value) { return setOptionalCustomFilter(value); }, className: "m-1" }) : null,
|
|
1188
1223
|
props.multilineSwitch ? react_1.default.createElement(XMultilineSwitch_1.XMultilineSwitch, { value: multilineSwitchValue, onChange: function (value) { return setMultilineSwitchValue(value); }, className: "m-1" }) : null,
|
|
1189
|
-
props.label ? react_1.default.createElement("div", { className: "x-lazy-datatable-label-right-compensation" }) : null),
|
|
1224
|
+
props.label && !isMobile ? react_1.default.createElement("div", { className: "x-lazy-datatable-label-right-compensation" }) : null),
|
|
1190
1225
|
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
1191
|
-
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, 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)),
|
|
1226
|
+
react_1.default.createElement(datatable_1.DataTable, { value: value.rowList, dataKey: dataKey, 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)),
|
|
1192
1227
|
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
1193
1228
|
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,
|
|
1194
1229
|
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,
|
|
@@ -1205,6 +1240,8 @@ exports.XLazyDataTable.defaultProps = {
|
|
|
1205
1240
|
paginator: true,
|
|
1206
1241
|
rows: 10,
|
|
1207
1242
|
filterDisplay: "row",
|
|
1243
|
+
autoFilter: false,
|
|
1244
|
+
showFilterButtons: true,
|
|
1208
1245
|
fullTextSearch: true,
|
|
1209
1246
|
multilineSwitch: false,
|
|
1210
1247
|
multilineSwitchInitValue: "allLines",
|