@michalrakus/x-react-web-lib 1.32.2 → 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.
@@ -558,6 +558,9 @@ var XFormDataTable2 = /** @class */ (function (_super) {
558
558
  if (this.props.scrollable) {
559
559
  if (this.props.scrollWidth !== "none") {
560
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
+ }
561
564
  }
562
565
  if (this.props.scrollHeight !== "none") {
563
566
  scrollHeight = this.props.scrollHeight;
@@ -705,7 +708,8 @@ var XFormDataTable2 = /** @class */ (function (_super) {
705
708
  sortable: false,
706
709
  sortField: "idFieldOnUpdate",
707
710
  scrollable: true,
708
- 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',
709
713
  scrollHeight: '200vh',
710
714
  // tym ze pouzivame 200vh (max-height pre body), tak realne scrollovanie sa zapne az pri velmi vela riadkoch
711
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 = 'calc(100vw - 2.2rem)'; // povodne bolo 1.4rem (20px okraje) ale pri vela stlpcoch vznikal horizontalny scrollbar
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 (XUtils_1.XUtils.isMobile()) {
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 = react_1.default.createElement("div", null,
963
- (0, XLocale_1.xLocaleOption)('totalRecords'),
964
- ": ",
965
- value.totalRecords);
966
- var paginatorRight = react_1.default.createElement("div", null);
967
- if (props.editMode === true) {
968
- paginatorRight = react_1.default.createElement("div", null,
969
- 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" }),
970
- 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" }));
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 if (props.editMode === false) {
973
- paginatorRight = react_1.default.createElement("div", null,
974
- 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" }));
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",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@michalrakus/x-react-web-lib",
3
- "version": "1.32.2",
3
+ "version": "1.32.3",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "clean": "rimraf lib",