@michalrakus/x-react-web-lib 1.18.0 → 1.20.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.
Files changed (57) hide show
  1. package/XEditor.d.ts +3 -0
  2. package/XEditor.js +5 -0
  3. package/XEditorBase.d.ts +3 -0
  4. package/XEditorBase.js +5 -0
  5. package/XExportRowsDialog.d.ts +1 -1
  6. package/XExportRowsDialog.js +1 -1
  7. package/XHtmlRenderer.d.ts +3 -0
  8. package/XHtmlRenderer.js +5 -0
  9. package/XLazyDataTable.d.ts +1 -1
  10. package/XLazyDataTable.js +1 -1
  11. package/XMultilineRenderer.d.ts +3 -0
  12. package/XMultilineRenderer.js +5 -0
  13. package/gulpfile.js +7 -2
  14. package/lib/administration/XBrowseMetaBrowse.d.ts +1 -1
  15. package/lib/administration/XBrowseMetaBrowse.js +1 -1
  16. package/lib/administration/XUserBrowse.d.ts +1 -1
  17. package/lib/administration/XUserBrowse.js +1 -1
  18. package/lib/components/XAutoComplete.d.ts +11 -9
  19. package/lib/components/XAutoComplete.js +7 -78
  20. package/lib/components/XAutoCompleteBase.d.ts +42 -7
  21. package/lib/components/XAutoCompleteBase.js +342 -45
  22. package/lib/components/XAutoCompleteDT.d.ts +14 -8
  23. package/lib/components/XAutoCompleteDT.js +3 -69
  24. package/lib/components/XEditBrowse.js +1 -1
  25. package/lib/components/XEditor.d.ts +15 -0
  26. package/lib/components/XEditor.js +64 -0
  27. package/lib/components/XEditorBase.d.ts +9 -0
  28. package/lib/components/XEditorBase.js +91 -0
  29. package/lib/components/XFormBase.d.ts +1 -0
  30. package/lib/components/XFormBase.js +19 -4
  31. package/lib/components/XFormDataTable2.js +1 -1
  32. package/lib/components/XInputTextareaBase.js +3 -4
  33. package/lib/components/{XExportRowsDialog.d.ts → XLazyDataTable/XExportRowsDialog.d.ts} +1 -1
  34. package/lib/components/{XExportRowsDialog.js → XLazyDataTable/XExportRowsDialog.js} +5 -5
  35. package/lib/components/XLazyDataTable/XHtmlRenderer.d.ts +7 -0
  36. package/lib/components/XLazyDataTable/XHtmlRenderer.js +78 -0
  37. package/lib/components/{XLazyDataTable.d.ts → XLazyDataTable/XLazyDataTable.d.ts} +20 -8
  38. package/lib/components/{XLazyDataTable.js → XLazyDataTable/XLazyDataTable.js} +62 -36
  39. package/lib/components/XLazyDataTable/XMultilineRenderer.d.ts +8 -0
  40. package/lib/components/XLazyDataTable/XMultilineRenderer.js +80 -0
  41. package/lib/components/XLazyDataTable/XMultilineSwitch.d.ts +7 -0
  42. package/lib/components/XLazyDataTable/XMultilineSwitch.js +20 -0
  43. package/lib/components/XSearchBrowseParams.d.ts +2 -2
  44. package/lib/components/XSearchButton.js +2 -2
  45. package/lib/components/XSearchButtonDT.js +2 -2
  46. package/lib/components/XUtils.d.ts +4 -0
  47. package/lib/components/XUtils.js +51 -11
  48. package/lib/components/XUtilsMetadata.d.ts +1 -1
  49. package/lib/serverApi/FindParam.d.ts +12 -2
  50. package/lib/serverApi/FindParam.js +3 -2
  51. package/lib/serverApi/XUtilsCommon.d.ts +2 -0
  52. package/lib/serverApi/XUtilsCommon.js +37 -1
  53. package/lib/serverApi/XUtilsMetadataCommon.d.ts +1 -0
  54. package/lib/serverApi/XUtilsMetadataCommon.js +16 -0
  55. package/lib/serverApi/x-lib-api.d.ts +6 -0
  56. package/lib/serverApi/x-lib-api.js +3 -0
  57. package/package.json +2 -1
@@ -96,28 +96,40 @@ var __read = (this && this.__read) || function (o, n) {
96
96
  }
97
97
  return ar;
98
98
  };
99
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
100
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
101
+ if (ar || !(i in from)) {
102
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
103
+ ar[i] = from[i];
104
+ }
105
+ }
106
+ return to.concat(ar || Array.prototype.slice.call(from));
107
+ };
99
108
  Object.defineProperty(exports, "__esModule", { value: true });
100
109
  exports.XLazyColumn = exports.XLazyDataTable = void 0;
101
110
  var react_1 = __importStar(require("react"));
102
111
  var datatable_1 = require("primereact/datatable");
103
112
  var column_1 = require("primereact/column");
104
- var XButton_1 = require("./XButton");
105
- var XUtils_1 = require("./XUtils");
106
- var XUtilsMetadata_1 = require("./XUtilsMetadata");
107
- var XDropdownDTFilter_1 = require("./XDropdownDTFilter");
108
- var XUtilsConversions_1 = require("../serverApi/XUtilsConversions");
109
- var FindParam_1 = require("../serverApi/FindParam");
110
- var XButtonIconSmall_1 = require("./XButtonIconSmall");
113
+ var XButton_1 = require("../XButton");
114
+ var XUtils_1 = require("../XUtils");
115
+ var XUtilsMetadata_1 = require("../XUtilsMetadata");
116
+ var XDropdownDTFilter_1 = require("../XDropdownDTFilter");
117
+ var XUtilsConversions_1 = require("../../serverApi/XUtilsConversions");
118
+ var FindParam_1 = require("../../serverApi/FindParam");
119
+ var XButtonIconSmall_1 = require("../XButtonIconSmall");
111
120
  var tristatecheckbox_1 = require("primereact/tristatecheckbox");
112
- var XUtilsCommon_1 = require("../serverApi/XUtilsCommon");
121
+ var XUtilsCommon_1 = require("../../serverApi/XUtilsCommon");
113
122
  var XExportRowsDialog_1 = require("./XExportRowsDialog");
114
123
  var api_1 = require("primereact/api");
115
- var XCalendar_1 = require("./XCalendar");
116
- var XInputDecimalBase_1 = require("./XInputDecimalBase");
117
- var XLocale_1 = require("./XLocale");
118
- var XFtsInput_1 = require("./XFtsInput");
119
- var XUtilsMetadataCommon_1 = require("../serverApi/XUtilsMetadataCommon");
120
- var inputswitch_1 = require("primereact/inputswitch");
124
+ var XCalendar_1 = require("../XCalendar");
125
+ var XInputDecimalBase_1 = require("../XInputDecimalBase");
126
+ var XLocale_1 = require("../XLocale");
127
+ var XFtsInput_1 = require("../XFtsInput");
128
+ var XUtilsMetadataCommon_1 = require("../../serverApi/XUtilsMetadataCommon");
129
+ var editor_1 = require("primereact/editor");
130
+ var XMultilineSwitch_1 = require("./XMultilineSwitch");
131
+ var XMultilineRenderer_1 = require("./XMultilineRenderer");
132
+ var XHtmlRenderer_1 = require("./XHtmlRenderer");
121
133
  var XLazyDataTable = function (props) {
122
134
  var _a;
123
135
  // must be here, is used in createInitFilters()
@@ -220,15 +232,15 @@ var XLazyDataTable = function (props) {
220
232
  filtersInit[displayFieldFilter.field] = createFilterItem(props.filterDisplay, displayFieldFilter.constraint);
221
233
  }
222
234
  // ak mame props.searchBrowseParams.customFilterFunction, pridame filter
223
- if (props.searchBrowseParams.customFilterFunction) {
224
- customFilterItems = XUtils_1.XUtils.filterAnd(customFilterItems, props.searchBrowseParams.customFilterFunction());
235
+ if (props.searchBrowseParams.customFilter) {
236
+ customFilterItems = XUtils_1.XUtils.filterAnd(customFilterItems, XUtils_1.XUtils.evalFilter(props.searchBrowseParams.customFilter));
225
237
  }
226
238
  }
227
239
  var _f = __read((0, react_1.useState)(filtersInit), 2), filters = _f[0], setFilters = _f[1]; // filtrovanie na "controlled manner" (moze sa sem nainicializovat nejaka hodnota)
228
240
  var initFtsInputValue = props.fullTextSearch ? createInitFtsInputValue() : undefined;
229
241
  var _g = __read((0, react_1.useState)(initFtsInputValue), 2), ftsInputValue = _g[0], setFtsInputValue = _g[1];
230
- var _h = __read((0, react_1.useState)(true), 2), multiLineSwitchValue = _h[0], setMultiLineSwitchValue = _h[1];
231
- var _j = __read((0, react_1.useState)(props.sortField ? [{ field: props.sortField, order: 1 }] : []), 2), multiSortMeta = _j[0], setMultiSortMeta = _j[1];
242
+ var _h = __read((0, react_1.useState)(props.multilineSwitchInitValue), 2), multilineSwitchValue = _h[0], setMultilineSwitchValue = _h[1];
243
+ var _j = __read((0, react_1.useState)(XUtils_1.XUtils.createMultiSortMeta(props.sortField)), 2), multiSortMeta = _j[0], setMultiSortMeta = _j[1];
232
244
  var _k = __read((0, react_1.useState)(null), 2), selectedRow = _k[0], setSelectedRow = _k[1];
233
245
  var _l = __read((_a = props.dataLoadedState) !== null && _a !== void 0 ? _a : (0, react_1.useState)(false), 2), dataLoaded = _l[0], setDataLoaded = _l[1]; // priznak kde si zapiseme, ci uz sme nacitali data
234
246
  var _m = __read((0, react_1.useState)(false), 2), exportRowsDialogOpened = _m[0], setExportRowsDialogOpened = _m[1];
@@ -335,6 +347,7 @@ var XLazyDataTable = function (props) {
335
347
  xFullTextSearch = {
336
348
  fields: Array.isArray(props.fullTextSearch) ? props.fullTextSearch : undefined,
337
349
  value: ftsInputValue.value,
350
+ splitValue: true,
338
351
  matchMode: ftsInputValue.matchMode
339
352
  };
340
353
  }
@@ -359,6 +372,9 @@ var XLazyDataTable = function (props) {
359
372
  }
360
373
  finally { if (e_3) throw e_3.error; }
361
374
  }
375
+ if (props.fields) {
376
+ fields.push.apply(fields, __spreadArray([], __read(props.fields), false));
377
+ }
362
378
  return fields;
363
379
  };
364
380
  var getHeaders = function () {
@@ -383,6 +399,10 @@ var XLazyDataTable = function (props) {
383
399
  }
384
400
  return headers;
385
401
  };
402
+ var hasContentTypeHtml = function () {
403
+ var columns = props.children;
404
+ return columns.some(function (column) { return column.props.contentType === "html"; });
405
+ };
386
406
  var onSelectionChange = function (event) {
387
407
  //console.log("zavolany onSelectionChange");
388
408
  //console.log(event.value);
@@ -604,23 +624,26 @@ var XLazyDataTable = function (props) {
604
624
  }
605
625
  return betweenFilter;
606
626
  };
607
- var valueAsUI = function (value, xField) {
627
+ var valueAsUI = function (value, xField, contentType) {
608
628
  var valueResult;
609
629
  if (xField.type === "boolean") {
610
630
  // TODO - efektivnejsie by bolo renderovat len prislusne ikonky
611
631
  valueResult = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: value, disabled: true });
612
632
  }
613
633
  else {
614
- // ine typy - convertValue vrati string
615
- // mame zapnutu konverziu fromModel, lebo z json-u nam prichadzaju objekty typu string (napr. pri datumoch)
616
- valueResult = (0, XUtilsConversions_1.convertValue)(xField, value, true, XUtilsConversions_1.AsUIType.Form);
617
- // ak mame viacriadkovy text a zapnuty multiLineSwitch (defaultne je zapnuty aj ked nie je zobrazeny)
618
- if (multiLineSwitchValue) {
619
- if (xField.type === "string" && typeof valueResult === "string" && valueResult) {
620
- var lines = valueResult.split(XUtilsCommon_1.XUtilsCommon.newLine);
621
- if (lines.length >= 2) {
622
- var elemList = lines.map(function (value, index) { return react_1.default.createElement("div", { key: index }, value); });
623
- valueResult = react_1.default.createElement("div", null, elemList);
634
+ if (contentType === "html") {
635
+ // value should be always string (xField.type === "string")
636
+ valueResult = react_1.default.createElement(XHtmlRenderer_1.XHtmlRenderer, { htmlValue: value, renderType: multilineSwitchValue, fewLinesCount: props.multilineSwitchFewLinesCount });
637
+ }
638
+ else {
639
+ // ine typy - convertValue vrati string
640
+ // mame zapnutu konverziu fromModel, lebo z json-u nam prichadzaju objekty typu string (napr. pri datumoch)
641
+ valueResult = (0, XUtilsConversions_1.convertValue)(xField, value, true, XUtilsConversions_1.AsUIType.Form);
642
+ // ak mame viacriadkovy text a multilineSwitch nastaveny na viac ako 1 riadok (defaultne je nastaveny na "allLines") pouzijeme XMultilineRenderer
643
+ if (contentType === "multiline" && multilineSwitchValue !== "singleLine") {
644
+ if (xField.type === "string" && typeof valueResult === "string" && valueResult) {
645
+ var lines = valueResult.split(XUtilsCommon_1.XUtilsCommon.newLine);
646
+ valueResult = react_1.default.createElement(XMultilineRenderer_1.XMultilineRenderer, { valueList: lines, renderType: multilineSwitchValue, fewLinesCount: props.multilineSwitchFewLinesCount, multilineContent: true });
624
647
  }
625
648
  }
626
649
  }
@@ -631,11 +654,11 @@ var XLazyDataTable = function (props) {
631
654
  var bodyValue;
632
655
  var rowDataValue = XUtilsCommon_1.XUtilsCommon.getValueOrValueListByPath(rowData, columnProps.field);
633
656
  if (Array.isArray(rowDataValue)) {
634
- var elemList = rowDataValue.map(function (value, index) { return react_1.default.createElement("div", { key: index }, valueAsUI(value, xField)); });
635
- bodyValue = react_1.default.createElement("div", null, elemList);
657
+ var elemList = rowDataValue.map(function (value) { return valueAsUI(value, xField, columnProps.contentType); });
658
+ bodyValue = react_1.default.createElement(XMultilineRenderer_1.XMultilineRenderer, { valueList: elemList, renderType: multilineSwitchValue, fewLinesCount: props.multilineSwitchFewLinesCount });
636
659
  }
637
660
  else {
638
- bodyValue = valueAsUI(rowDataValue, xField);
661
+ bodyValue = valueAsUI(rowDataValue, xField, columnProps.contentType);
639
662
  }
640
663
  return bodyValue;
641
664
  };
@@ -885,9 +908,9 @@ var XLazyDataTable = function (props) {
885
908
  ftsInputValue ? react_1.default.createElement(XFtsInput_1.XFtsInput, { value: ftsInputValue, onChange: function (value) { return setFtsInputValue(value); } }) : null,
886
909
  react_1.default.createElement(XButton_1.XButton, { key: "filter", label: (0, XLocale_1.xLocaleOption)('filter'), onClick: onClickFilter }),
887
910
  react_1.default.createElement(XButton_1.XButton, { key: "clearFilter", label: (0, XLocale_1.xLocaleOption)('clearFilter'), onClick: onClickClearFilter }),
888
- props.multiLineSwitch ? react_1.default.createElement(inputswitch_1.InputSwitch, { checked: multiLineSwitchValue, onChange: function (e) { return setMultiLineSwitchValue(e.value); }, className: "m-1" }) : null),
911
+ props.multilineSwitch ? react_1.default.createElement(XMultilineSwitch_1.XMultilineSwitch, { value: multilineSwitchValue, onChange: function (value) { return setMultilineSwitchValue(value); }, className: "m-1" }) : null),
889
912
  react_1.default.createElement("div", { className: "flex justify-content-center" },
890
- 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, 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)),
913
+ 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)),
891
914
  react_1.default.createElement("div", { className: "flex justify-content-center" },
892
915
  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,
893
916
  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,
@@ -896,7 +919,8 @@ var XLazyDataTable = function (props) {
896
919
  props.appButtonsForRow ? 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); } }); }) : null,
897
920
  props.appButtons,
898
921
  props.searchBrowseParams !== undefined ? react_1.default.createElement(XButton_1.XButton, { key: "choose", label: (0, XLocale_1.xLocaleOption)('chooseRow'), onClick: onClickChoose }) : null,
899
- exportRows ? react_1.default.createElement(XExportRowsDialog_1.XExportRowsDialog, { key: "exportRowsDialog", dialogOpened: exportRowsDialogOpened, hideDialog: function () { return setExportRowsDialogOpened(false); }, rowCount: exportRowsDialogRowCount, exportParams: createExportParams }) : null)));
922
+ exportRows ? react_1.default.createElement(XExportRowsDialog_1.XExportRowsDialog, { key: "exportRowsDialog", dialogOpened: exportRowsDialogOpened, hideDialog: function () { return setExportRowsDialogOpened(false); }, rowCount: exportRowsDialogRowCount, exportParams: createExportParams }) : null),
923
+ 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">) */));
900
924
  };
901
925
  exports.XLazyDataTable = XLazyDataTable;
902
926
  exports.XLazyDataTable.defaultProps = {
@@ -904,7 +928,9 @@ exports.XLazyDataTable.defaultProps = {
904
928
  rows: 10,
905
929
  filterDisplay: "row",
906
930
  fullTextSearch: true,
907
- multiLineSwitch: false,
931
+ multilineSwitch: false,
932
+ multilineSwitchInitValue: "allLines",
933
+ multilineSwitchFewLinesCount: 2,
908
934
  scrollable: true,
909
935
  scrollWidth: 'viewport',
910
936
  scrollHeight: 'viewport',
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { XMultilineRenderType } from "./XLazyDataTable";
3
+ export declare const XMultilineRenderer: (props: {
4
+ valueList: React.ReactNode[];
5
+ renderType: XMultilineRenderType;
6
+ fewLinesCount: number;
7
+ multilineContent?: boolean;
8
+ }) => JSX.Element;
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __read = (this && this.__read) || function (o, n) {
26
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
27
+ if (!m) return o;
28
+ var i = m.call(o), r, ar = [], e;
29
+ try {
30
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
31
+ }
32
+ catch (error) { e = { error: error }; }
33
+ finally {
34
+ try {
35
+ if (r && !r.done && (m = i["return"])) m.call(i);
36
+ }
37
+ finally { if (e) throw e.error; }
38
+ }
39
+ return ar;
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.XMultilineRenderer = void 0;
43
+ var react_1 = __importStar(require("react"));
44
+ var button_1 = require("primereact/button");
45
+ var XMultilineRenderer = function (props) {
46
+ // used only for props.renderType === "fewLines"
47
+ var _a = __read((0, react_1.useState)(false), 2), showAllLines = _a[0], setShowAllLines = _a[1];
48
+ var valueResult; // musime vracat element, ak chceme XMultilineRenderer volat priamo cez jsx
49
+ if (props.renderType === "singleLine") {
50
+ // TODO - joinovat elementy
51
+ valueResult = react_1.default.createElement("div", null, props.valueList.join(", ")); // pouziva sa hlavne pre oneToMany asociacie
52
+ }
53
+ else {
54
+ var valueListLocal = props.valueList;
55
+ if (props.renderType === "fewLines" && !showAllLines) {
56
+ valueListLocal = valueListLocal.slice(0, props.fewLinesCount);
57
+ }
58
+ var elemList = valueListLocal.map(function (value, index) { return react_1.default.createElement("div", { key: index }, value); });
59
+ if (props.renderType === "fewLines") {
60
+ if (props.valueList.length > props.fewLinesCount) {
61
+ // prepiseme posledny element v zozname - pridame mu button
62
+ var elemListLastIndex = elemList.length - 1;
63
+ elemList[elemListLastIndex] =
64
+ react_1.default.createElement("div", { key: elemListLastIndex },
65
+ valueListLocal[elemListLastIndex],
66
+ react_1.default.createElement(button_1.Button, { icon: showAllLines ? "pi pi-angle-double-left" : "pi pi-angle-double-right", onClick: function () { return setShowAllLines(!showAllLines); }, className: "x-button-multiline-expand-collapse" }));
67
+ // ak by bol nejaky problem s tym hore tak treba pouzit toto:
68
+ // elemList[elemListLastIndex] =
69
+ // <div className="flex flex-row flex-wrap">
70
+ // <div key={elemListLastIndex}>{valueListLocal[elemListLastIndex]}</div>
71
+ // <Button icon={showAllLines ? "pi pi-angle-double-left" : "pi pi-angle-double-right"} onClick={() => setShowAllLines(!showAllLines)}
72
+ // className="x-button-multiline-expand-collapse"/>
73
+ // </div>;
74
+ }
75
+ }
76
+ valueResult = react_1.default.createElement("div", { className: props.multilineContent ? "x-multiline-content" : undefined }, elemList);
77
+ }
78
+ return valueResult;
79
+ };
80
+ exports.XMultilineRenderer = XMultilineRenderer;
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import { XMultilineRenderType } from "./XLazyDataTable";
3
+ export declare const XMultilineSwitch: (props: {
4
+ value: XMultilineRenderType;
5
+ onChange: (value: XMultilineRenderType) => void;
6
+ className?: string | undefined;
7
+ }) => JSX.Element;
@@ -0,0 +1,20 @@
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.XMultilineSwitch = void 0;
7
+ var react_1 = __importDefault(require("react"));
8
+ var selectbutton_1 = require("primereact/selectbutton");
9
+ var XMultilineSwitch = function (props) {
10
+ var options = [
11
+ { icon: 'pi pi-minus', value: 'singleLine' },
12
+ { icon: 'pi pi-bars', value: 'fewLines' },
13
+ { icon: 'pi pi-align-justify', value: 'allLines' }
14
+ ];
15
+ var itemTemplate = function (option) {
16
+ return react_1.default.createElement("i", { className: option.icon });
17
+ };
18
+ return (react_1.default.createElement(selectbutton_1.SelectButton, { value: props.value, onChange: function (e) { return props.onChange(e.value); }, options: options, optionValue: "value", itemTemplate: itemTemplate, className: props.className }));
19
+ };
20
+ exports.XMultilineSwitch = XMultilineSwitch;
@@ -1,5 +1,5 @@
1
1
  import { DataTableFilterMetaData } from "primereact/datatable";
2
- import { XCustomFilter } from "../serverApi/FindParam";
2
+ import { XFilterOrFunction } from "./XAutoCompleteBase";
3
3
  export interface XFieldFilter {
4
4
  field: string;
5
5
  constraint: DataTableFilterMetaData;
@@ -7,5 +7,5 @@ export interface XFieldFilter {
7
7
  export interface XSearchBrowseParams {
8
8
  onChoose: (chosenRow: any) => void;
9
9
  displayFieldFilter?: XFieldFilter;
10
- customFilterFunction?: () => XCustomFilter | undefined;
10
+ customFilter?: XFilterOrFunction;
11
11
  }
@@ -203,8 +203,8 @@ var XSearchButton = /** @class */ (function (_super) {
203
203
  var createSearchBrowseParams = function () {
204
204
  return {
205
205
  onChoose: onChoose,
206
- displayFieldFilter: (inputChanged ? { field: props.displayField, constraint: { value: inputValueState, matchMode: "startsWith" } } : undefined),
207
- customFilterFunction: function () { return _this.getFilterBase(_this.props.filter); }
206
+ displayFieldFilter: (inputChanged ? { field: props.displayField, constraint: { value: inputValueState, matchMode: "contains" } } : undefined),
207
+ customFilter: function () { return _this.getFilterBase(_this.props.filter); }
208
208
  };
209
209
  };
210
210
  // vypocitame inputValue
@@ -184,8 +184,8 @@ var XSearchButtonDT = function (props) {
184
184
  react_1.default.createElement(dialog_1.Dialog, { visible: dialogOpened, onHide: onHide }, react_1.default.cloneElement(props.searchBrowse, {
185
185
  searchBrowseParams: {
186
186
  onChoose: onChoose,
187
- displayFieldFilter: (inputChanged ? { field: props.displayField, constraint: { value: inputValueState, matchMode: "startsWith" } } : undefined),
188
- customFilterFunction: function () { return undefined; } // TODO - dorobit
187
+ displayFieldFilter: (inputChanged ? { field: props.displayField, constraint: { value: inputValueState, matchMode: "contains" } } : undefined),
188
+ customFilter: undefined // TODO - dorobit
189
189
  }
190
190
  } /*, props.searchBrowse.children*/))));
191
191
  };
@@ -7,6 +7,7 @@ import { XCustomFilter, XCustomFilterItem } from "../serverApi/FindParam";
7
7
  import { DataTableSortMeta } from "primereact/datatable";
8
8
  import { XObject } from "./XObject";
9
9
  import { XTableFieldReadOnlyProp } from "./XFormDataTable2";
10
+ import { XFilterOrFunction } from "./XAutoCompleteBase";
10
11
  export declare enum OperationType {
11
12
  None = 0,
12
13
  Insert = 1,
@@ -54,6 +55,7 @@ export declare class XUtils {
54
55
  static getAppForm(entity: string, formId?: string): any;
55
56
  static fetchMany(path: string, value: any, usePublicToken?: boolean | XToken): Promise<any[]>;
56
57
  static fetchRows(entity: string, customFilter?: XCustomFilter | undefined, sortField?: string | DataTableSortMeta[] | undefined, fields?: string[]): Promise<any[]>;
58
+ static fetchRowCount(entity: string, customFilter?: XCustomFilter | undefined): Promise<number>;
57
59
  static fetchOne(path: string, value: any, usePublicToken?: boolean | XToken): Promise<any>;
58
60
  static fetchString(path: string, value: any): Promise<string>;
59
61
  static fetch(path: string, value: any, usePublicToken?: boolean | XToken): Promise<any>;
@@ -108,8 +110,10 @@ export declare class XUtils {
108
110
  static getErrorMessage(xError: XError): string | undefined;
109
111
  static normalizeString(value: string): string;
110
112
  static createCustomFilterItems(customFilter: XCustomFilter | undefined): XCustomFilterItem[] | undefined;
113
+ static createMultiSortMeta(sortField: string | DataTableSortMeta[] | undefined): DataTableSortMeta[] | undefined;
111
114
  static filterAnd(...filters: (XCustomFilter | undefined)[]): XCustomFilterItem[] | undefined;
112
115
  static filterIdIn(idField: string, idList: number[]): XCustomFilter;
116
+ static evalFilter(filter: XFilterOrFunction | undefined): XCustomFilter | undefined;
113
117
  static isTableRowInserted(tableRow: any): boolean;
114
118
  static xViewStatus(xViewStatusOrBoolean: XViewStatusOrBoolean): XViewStatus;
115
119
  }
@@ -272,20 +272,11 @@ var XUtils = /** @class */ (function () {
272
272
  // pomocna metodka pouzivajuca lazyDataTable service
273
273
  XUtils.fetchRows = function (entity, customFilter, sortField, fields) {
274
274
  return __awaiter(this, void 0, void 0, function () {
275
- var multiSortMeta, findParam, rowList;
275
+ var findParam, rowList;
276
276
  return __generator(this, function (_a) {
277
277
  switch (_a.label) {
278
278
  case 0:
279
- multiSortMeta = undefined;
280
- if (sortField) {
281
- if (Array.isArray(sortField)) {
282
- multiSortMeta = sortField;
283
- }
284
- else {
285
- multiSortMeta = [{ field: sortField, order: 1 }];
286
- }
287
- }
288
- findParam = { resultType: FindParam_1.ResultType.AllRows, entity: entity, customFilterItems: XUtils.createCustomFilterItems(customFilter), multiSortMeta: multiSortMeta, fields: fields };
279
+ findParam = { resultType: FindParam_1.ResultType.AllRows, entity: entity, customFilterItems: XUtils.createCustomFilterItems(customFilter), multiSortMeta: XUtils.createMultiSortMeta(sortField), fields: fields };
289
280
  return [4 /*yield*/, XUtils.fetchOne('lazyDataTableFindRows', findParam)];
290
281
  case 1:
291
282
  rowList = (_a.sent()).rowList;
@@ -294,6 +285,22 @@ var XUtils = /** @class */ (function () {
294
285
  });
295
286
  });
296
287
  };
288
+ // pomocna metodka pouzivajuca lazyDataTable service
289
+ XUtils.fetchRowCount = function (entity, customFilter) {
290
+ return __awaiter(this, void 0, void 0, function () {
291
+ var findParam, totalRecords;
292
+ return __generator(this, function (_a) {
293
+ switch (_a.label) {
294
+ case 0:
295
+ findParam = { resultType: FindParam_1.ResultType.OnlyRowCount, entity: entity, customFilterItems: XUtils.createCustomFilterItems(customFilter) };
296
+ return [4 /*yield*/, XUtils.fetchOne('lazyDataTableFindRows', findParam)];
297
+ case 1:
298
+ totalRecords = (_a.sent()).totalRecords;
299
+ return [2 /*return*/, totalRecords];
300
+ }
301
+ });
302
+ });
303
+ };
297
304
  XUtils.fetchOne = function (path, value, usePublicToken) {
298
305
  return XUtils.fetch(path, value, usePublicToken);
299
306
  };
@@ -701,6 +708,28 @@ var XUtils = /** @class */ (function () {
701
708
  }
702
709
  return customFilterItems;
703
710
  };
711
+ // pomocna metodka - konvertuje sortField -> DataTableSortMeta[]
712
+ XUtils.createMultiSortMeta = function (sortField) {
713
+ var multiSortMeta = undefined;
714
+ if (sortField) {
715
+ if (Array.isArray(sortField)) {
716
+ multiSortMeta = sortField;
717
+ }
718
+ else {
719
+ // default order is asc, supported is also value in form "<column name> desc"
720
+ var order = 1;
721
+ var fieldAndOrder = sortField.split(' ');
722
+ if (fieldAndOrder.length === 2) {
723
+ sortField = fieldAndOrder[0];
724
+ if (fieldAndOrder[1].toLowerCase() === "desc") {
725
+ order = -1;
726
+ }
727
+ }
728
+ multiSortMeta = [{ field: sortField, order: order }];
729
+ }
730
+ }
731
+ return multiSortMeta;
732
+ };
704
733
  // pomocna metodka
705
734
  XUtils.filterAnd = function () {
706
735
  var e_7, _a;
@@ -736,6 +765,17 @@ var XUtils = /** @class */ (function () {
736
765
  return { where: "[".concat(idField, "] IN (:...idList)"), params: { "idList": idList.length > 0 ? idList : [0] } };
737
766
  };
738
767
  // pomocna metodka
768
+ XUtils.evalFilter = function (filter) {
769
+ var customFilter = undefined;
770
+ if (typeof filter === 'object') {
771
+ customFilter = filter;
772
+ }
773
+ if (typeof filter === 'function') {
774
+ customFilter = filter();
775
+ }
776
+ return customFilter;
777
+ };
778
+ // pomocna metodka
739
779
  XUtils.isTableRowInserted = function (tableRow) {
740
780
  var _a;
741
781
  return (_a = tableRow.__x_generatedRowId) !== null && _a !== void 0 ? _a : false; // specialny priznak, ze sme vygenerovali id-cko
@@ -1,6 +1,6 @@
1
1
  import { XField } from "../serverApi/XEntityMetadata";
2
2
  import { XBrowseMeta } from "../serverApi/XBrowseMetadata";
3
- import { XBetweenFilterProp } from "./XLazyDataTable";
3
+ import { XBetweenFilterProp } from "./XLazyDataTable/XLazyDataTable";
4
4
  export declare class XUtilsMetadata {
5
5
  private static xBrowseMetaMap;
6
6
  static fetchAndSetXEntityMap(): Promise<any>;
@@ -1,8 +1,9 @@
1
1
  import { DataTableFilterMeta, DataTableSortMeta } from "primereact/datatable";
2
2
  export declare enum ResultType {
3
3
  OnlyRowCount = 0,
4
- RowCountAndPagedRows = 1,
5
- AllRows = 2
4
+ OnlyPagedRows = 1,
5
+ RowCountAndPagedRows = 2,
6
+ AllRows = 3
6
7
  }
7
8
  export interface XParams {
8
9
  [key: string]: any;
@@ -15,6 +16,7 @@ export type XCustomFilter = XCustomFilterItem | XCustomFilterItem[];
15
16
  export interface XFullTextSearch {
16
17
  fields?: string[];
17
18
  value: string;
19
+ splitValue: boolean;
18
20
  matchMode: 'startsWith' | 'contains' | 'endsWith' | 'equals';
19
21
  }
20
22
  export declare enum XAggregateType {
@@ -39,3 +41,11 @@ export interface FindParam {
39
41
  fields?: string[];
40
42
  aggregateItems?: XAggregateItem[];
41
43
  }
44
+ export interface XLazyAutoCompleteSuggestionsRequest {
45
+ maxRows: number;
46
+ fullTextSearch?: XFullTextSearch;
47
+ entity: string;
48
+ filterItems?: XCustomFilterItem[];
49
+ multiSortMeta?: DataTableSortMeta[];
50
+ fields?: string[];
51
+ }
@@ -18,8 +18,9 @@ exports.XAggregateType = exports.ResultType = void 0;
18
18
  var ResultType;
19
19
  (function (ResultType) {
20
20
  ResultType[ResultType["OnlyRowCount"] = 0] = "OnlyRowCount";
21
- ResultType[ResultType["RowCountAndPagedRows"] = 1] = "RowCountAndPagedRows";
22
- ResultType[ResultType["AllRows"] = 2] = "AllRows";
21
+ ResultType[ResultType["OnlyPagedRows"] = 1] = "OnlyPagedRows";
22
+ ResultType[ResultType["RowCountAndPagedRows"] = 2] = "RowCountAndPagedRows";
23
+ ResultType[ResultType["AllRows"] = 3] = "AllRows";
23
24
  })(ResultType = exports.ResultType || (exports.ResultType = {}));
24
25
  var XAggregateType;
25
26
  (function (XAggregateType) {
@@ -8,7 +8,9 @@ export declare class XUtilsCommon {
8
8
  static getPathToAssoc(path: string): string;
9
9
  static getPathToAssocAndField(path: string): [string | null, string];
10
10
  static isSingleField(path: string): boolean;
11
+ static getPrefixAndField(path: string): [string | null, string];
11
12
  static objectAsJSON(value: any): string;
13
+ static arrayCreateMap<ID, T>(array: T[], idField: string): Map<ID, T>;
12
14
  static getDayName(date: Date | null | undefined): string | undefined;
13
15
  static dateAddDays(date: Date | null, days: number): Date | null;
14
16
  static findFirstMatch(pattern: RegExp, value: string): string | null;
@@ -157,6 +157,17 @@ var XUtilsCommon = /** @class */ (function () {
157
157
  XUtilsCommon.isSingleField = function (path) {
158
158
  return path.indexOf(".") === -1;
159
159
  };
160
+ XUtilsCommon.getPrefixAndField = function (path) {
161
+ var posDot = path.indexOf(":");
162
+ if (posDot === -1) {
163
+ return [null, path];
164
+ }
165
+ else {
166
+ var prefix = path.substring(0, posDot);
167
+ var pathOnly = path.substring(posDot + 1);
168
+ return [prefix, pathOnly];
169
+ }
170
+ };
160
171
  XUtilsCommon.objectAsJSON = function (value) {
161
172
  // sem treba dat nejaku pre nas vhodnu serializaciu
162
173
  // zatial provizorne robene cez antipatern - modifikaciu prototype funcii primitivnych typov
@@ -179,6 +190,26 @@ var XUtilsCommon = /** @class */ (function () {
179
190
  Date.prototype.toJSON = dateToJSONOriginal;
180
191
  return json;
181
192
  };
193
+ XUtilsCommon.arrayCreateMap = function (array, idField) {
194
+ var e_2, _a;
195
+ var idRowMap = new Map();
196
+ try {
197
+ for (var array_1 = __values(array), array_1_1 = array_1.next(); !array_1_1.done; array_1_1 = array_1.next()) {
198
+ var row = array_1_1.value;
199
+ if (row) {
200
+ idRowMap.set(row[idField], row);
201
+ }
202
+ }
203
+ }
204
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
205
+ finally {
206
+ try {
207
+ if (array_1_1 && !array_1_1.done && (_a = array_1.return)) _a.call(array_1);
208
+ }
209
+ finally { if (e_2) throw e_2.error; }
210
+ }
211
+ return idRowMap;
212
+ };
182
213
  XUtilsCommon.getDayName = function (date) {
183
214
  var days = ['nedeľa', 'pondelok', 'utorok', 'streda', 'štvrtok', 'piatok', 'sobota'];
184
215
  return date ? days[date.getDay()] : undefined;
@@ -201,7 +232,12 @@ var XUtilsCommon = /** @class */ (function () {
201
232
  };
202
233
  XUtilsCommon.today = function () {
203
234
  var today = new Date();
204
- today.setHours(0, 0, 0, 0);
235
+ // vynulujeme casovu zlozku
236
+ // poznamka: Date vzdy obsahuje aj casovu zlozku. Nase konverzne funkcie dateFromModel a dateFromUI pouzivaju konverziu new Date('YYYY-MM-DD')
237
+ // a tato konverzia vytvara datum s GMT/UTC/Z casom 00:00:00 (stredoeuropsky 00:01:00 - akokeby sme zadavali new Date('YYYY-MM-DDT00:00:00Z'))
238
+ //today.setHours(0, 0, 0, 0); // nastavi cas 00:00:00 v aktualnej timezone (stredoeuropsky 00:00:00, GMT 23:00:00)
239
+ // - potom nam nefunguje porovnavanie s datumami vytvorenymi cez funkcie dateFromModel a dateFromUI
240
+ today.setUTCHours(0, 0, 0, 0);
205
241
  return today;
206
242
  };
207
243
  // vrati true ak sa string sklada iba z cislic, moze mat + alebo - na zaciatku
@@ -11,6 +11,7 @@ export declare class XUtilsMetadataCommon {
11
11
  static getXEntity(entity: string): XEntity;
12
12
  static getXFieldBase(xEntity: XEntity, field: string): XField | undefined;
13
13
  static getXField(xEntity: XEntity, field: string): XField;
14
+ static getXFieldByPathBase(xEntity: XEntity, path: string): XField | undefined;
14
15
  static getXFieldByPath(xEntity: XEntity, path: string): XField;
15
16
  static getXFieldByPathStr(entity: string, path: string): XField;
16
17
  static getXAssocBase(xEntity: XEntity, assocField: string): XAssoc | undefined;
@@ -64,6 +64,22 @@ var XUtilsMetadataCommon = /** @class */ (function () {
64
64
  }
65
65
  return xField;
66
66
  };
67
+ XUtilsMetadataCommon.getXFieldByPathBase = function (xEntity, path) {
68
+ var _a = __read(XUtilsCommon_1.XUtilsCommon.getFieldAndRestPath(path), 2), field = _a[0], restPath = _a[1];
69
+ if (restPath === null) {
70
+ return XUtilsMetadataCommon.getXFieldBase(xEntity, field);
71
+ }
72
+ else {
73
+ var xAssoc = XUtilsMetadataCommon.getXAssocBase(xEntity, field);
74
+ if (xAssoc) {
75
+ var xAssocEntity = XUtilsMetadataCommon.getXEntity(xAssoc.entityName);
76
+ return XUtilsMetadataCommon.getXFieldByPathBase(xAssocEntity, restPath);
77
+ }
78
+ else {
79
+ return undefined;
80
+ }
81
+ }
82
+ };
67
83
  XUtilsMetadataCommon.getXFieldByPath = function (xEntity, path) {
68
84
  var _a = __read(XUtilsCommon_1.XUtilsCommon.getFieldAndRestPath(path), 2), field = _a[0], restPath = _a[1];
69
85
  if (restPath === null) {
@@ -0,0 +1,6 @@
1
+ export interface XGetSequenceValueRequest {
2
+ name: string;
3
+ }
4
+ export interface XGetSequenceValueResponse {
5
+ value: number;
6
+ }