@michalrakus/x-react-web-lib 1.8.0 → 1.9.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 (152) hide show
  1. package/README.md +3 -3
  2. package/gulpfile.js +82 -82
  3. package/lib/administration/XBrowseMetaBrowse.d.ts +2 -2
  4. package/lib/administration/XBrowseMetaBrowse.js +21 -21
  5. package/lib/administration/XBrowseMetaForm.d.ts +5 -5
  6. package/lib/administration/XBrowseMetaForm.js +63 -63
  7. package/lib/administration/XUserBrowse.d.ts +2 -2
  8. package/lib/administration/XUserBrowse.js +88 -87
  9. package/lib/administration/XUserForm.d.ts +9 -9
  10. package/lib/administration/XUserForm.js +195 -194
  11. package/lib/components/SearchTableParams.d.ts +11 -11
  12. package/lib/components/SearchTableParams.js +2 -2
  13. package/lib/components/SourceCodeLinkEntity.d.ts +4 -4
  14. package/lib/components/SourceCodeLinkEntity.js +14 -14
  15. package/lib/components/XAutoComplete.d.ts +36 -36
  16. package/lib/components/XAutoComplete.js +155 -155
  17. package/lib/components/XAutoCompleteBase.d.ts +45 -45
  18. package/lib/components/XAutoCompleteBase.js +371 -371
  19. package/lib/components/XAutoCompleteDT.d.ts +33 -33
  20. package/lib/components/XAutoCompleteDT.js +140 -140
  21. package/lib/components/XBrowse.d.ts +33 -33
  22. package/lib/components/XBrowse.js +360 -360
  23. package/lib/components/XButton.d.ts +9 -9
  24. package/lib/components/XButton.js +13 -13
  25. package/lib/components/XButtonIconMedium.d.ts +9 -9
  26. package/lib/components/XButtonIconMedium.js +13 -13
  27. package/lib/components/XButtonIconNarrow.d.ts +10 -10
  28. package/lib/components/XButtonIconNarrow.js +25 -25
  29. package/lib/components/XButtonIconSmall.d.ts +9 -9
  30. package/lib/components/XButtonIconSmall.js +13 -13
  31. package/lib/components/XCalendar.d.ts +8 -8
  32. package/lib/components/XCalendar.js +27 -27
  33. package/lib/components/XChangePasswordForm.d.ts +5 -5
  34. package/lib/components/XChangePasswordForm.js +160 -160
  35. package/lib/components/XCheckbox.d.ts +8 -8
  36. package/lib/components/XCheckbox.js +57 -57
  37. package/lib/components/XCheckboxDT.d.ts +10 -10
  38. package/lib/components/XCheckboxDT.js +46 -46
  39. package/lib/components/XDataTable.d.ts +11 -11
  40. package/lib/components/XDataTable.js +197 -197
  41. package/lib/components/XDropdown.d.ts +18 -18
  42. package/lib/components/XDropdown.js +57 -57
  43. package/lib/components/XDropdownDT.d.ts +13 -13
  44. package/lib/components/XDropdownDT.js +128 -128
  45. package/lib/components/XDropdownDTFilter.d.ts +7 -7
  46. package/lib/components/XDropdownDTFilter.js +121 -121
  47. package/lib/components/XDropdownForEntity.d.ts +25 -25
  48. package/lib/components/XDropdownForEntity.js +149 -149
  49. package/lib/components/XDropdownFormDTFilter.d.ts +7 -7
  50. package/lib/components/XDropdownFormDTFilter.js +121 -121
  51. package/lib/components/XEditColumnDialog.d.ts +13 -13
  52. package/lib/components/XEditColumnDialog.js +112 -112
  53. package/lib/components/XEnvVars.d.ts +15 -12
  54. package/lib/components/XEnvVars.js +23 -20
  55. package/lib/components/XErrors.d.ts +12 -12
  56. package/lib/components/XErrors.js +2 -2
  57. package/lib/components/XExportRowsDialog.d.ts +15 -15
  58. package/lib/components/XExportRowsDialog.js +184 -184
  59. package/lib/components/XFieldChangeEvent.d.ts +11 -11
  60. package/lib/components/XFieldChangeEvent.js +2 -2
  61. package/lib/components/XFieldSelector.d.ts +7 -7
  62. package/lib/components/XFieldSelector.js +113 -113
  63. package/lib/components/XFormBase.d.ts +59 -59
  64. package/lib/components/XFormBase.js +526 -526
  65. package/lib/components/XFormBaseModif.d.ts +5 -5
  66. package/lib/components/XFormBaseModif.js +33 -33
  67. package/lib/components/XFormBaseT.d.ts +4 -4
  68. package/lib/components/XFormBaseT.js +31 -31
  69. package/lib/components/XFormComponent.d.ts +40 -40
  70. package/lib/components/XFormComponent.js +177 -177
  71. package/lib/components/XFormComponentDT.d.ts +30 -30
  72. package/lib/components/XFormComponentDT.js +145 -145
  73. package/lib/components/XFormDataTable2.d.ts +143 -143
  74. package/lib/components/XFormDataTable2.js +686 -686
  75. package/lib/components/XFormFooter.d.ts +6 -6
  76. package/lib/components/XFormFooter.js +19 -19
  77. package/lib/components/XFormNavigator3.d.ts +12 -12
  78. package/lib/components/XFormNavigator3.js +130 -130
  79. package/lib/components/XHolders.d.ts +7 -7
  80. package/lib/components/XHolders.js +15 -15
  81. package/lib/components/XInput.d.ts +13 -13
  82. package/lib/components/XInput.js +38 -38
  83. package/lib/components/XInputDT.d.ts +11 -11
  84. package/lib/components/XInputDT.js +37 -37
  85. package/lib/components/XInputDate.d.ts +13 -13
  86. package/lib/components/XInputDate.js +63 -63
  87. package/lib/components/XInputDateDT.d.ts +10 -10
  88. package/lib/components/XInputDateDT.js +55 -55
  89. package/lib/components/XInputDecimal.d.ts +15 -15
  90. package/lib/components/XInputDecimal.js +78 -78
  91. package/lib/components/XInputDecimalBase.d.ts +12 -12
  92. package/lib/components/XInputDecimalBase.js +18 -18
  93. package/lib/components/XInputDecimalDT.d.ts +11 -11
  94. package/lib/components/XInputDecimalDT.js +74 -74
  95. package/lib/components/XInputFileList.d.ts +36 -36
  96. package/lib/components/XInputFileList.js +251 -251
  97. package/lib/components/XInputText.d.ts +12 -12
  98. package/lib/components/XInputText.js +69 -69
  99. package/lib/components/XInputTextDT.d.ts +9 -9
  100. package/lib/components/XInputTextDT.js +42 -42
  101. package/lib/components/XInputTextarea.d.ts +18 -18
  102. package/lib/components/XInputTextarea.js +85 -85
  103. package/lib/components/XLazyDataTable.d.ts +78 -78
  104. package/lib/components/XLazyDataTable.js +885 -885
  105. package/lib/components/XLocale.d.ts +26 -26
  106. package/lib/components/XLocale.js +59 -59
  107. package/lib/components/XLoginDialog.d.ts +8 -8
  108. package/lib/components/XLoginDialog.js +21 -21
  109. package/lib/components/XLoginForm.d.ts +7 -7
  110. package/lib/components/XLoginForm.js +128 -128
  111. package/lib/components/XObject.d.ts +3 -3
  112. package/lib/components/XObject.js +2 -2
  113. package/lib/components/XResponseError.d.ts +11 -11
  114. package/lib/components/XResponseError.js +32 -32
  115. package/lib/components/XSearchButton.d.ts +26 -26
  116. package/lib/components/XSearchButton.js +225 -225
  117. package/lib/components/XSearchButtonDT.d.ts +12 -12
  118. package/lib/components/XSearchButtonDT.js +188 -188
  119. package/lib/components/XSearchButtonOld.d.ts +13 -13
  120. package/lib/components/XSearchButtonOld.js +212 -212
  121. package/lib/components/XToOneAssocButton.d.ts +8 -8
  122. package/lib/components/XToOneAssocButton.js +30 -30
  123. package/lib/components/XToken.d.ts +6 -6
  124. package/lib/components/XToken.js +2 -2
  125. package/lib/components/XUtils.d.ts +74 -74
  126. package/lib/components/XUtils.js +627 -627
  127. package/lib/components/XUtilsConversions.d.ts +12 -12
  128. package/lib/components/XUtilsConversions.js +125 -125
  129. package/lib/components/XUtilsMetadata.d.ts +39 -39
  130. package/lib/components/XUtilsMetadata.js +452 -452
  131. package/lib/components/locale/x-en.json +26 -26
  132. package/lib/components/useXToken.d.ts +2 -2
  133. package/lib/components/useXToken.js +44 -44
  134. package/lib/serverApi/ExportImportParam.d.ts +51 -51
  135. package/lib/serverApi/ExportImportParam.js +34 -34
  136. package/lib/serverApi/FindParam.d.ts +34 -34
  137. package/lib/serverApi/FindParam.js +30 -30
  138. package/lib/serverApi/FindResult.d.ts +8 -8
  139. package/lib/serverApi/FindResult.js +2 -2
  140. package/lib/serverApi/XBrowseMetadata.d.ts +19 -19
  141. package/lib/serverApi/XBrowseMetadata.js +2 -2
  142. package/lib/serverApi/XEntityMetadata.d.ts +35 -35
  143. package/lib/serverApi/XEntityMetadata.js +2 -2
  144. package/lib/serverApi/XFileJsonField.d.ts +6 -6
  145. package/lib/serverApi/XFileJsonField.js +2 -2
  146. package/lib/serverApi/XUser.d.ts +8 -7
  147. package/lib/serverApi/XUser.js +2 -2
  148. package/lib/serverApi/XUserAuthenticationIfc.d.ts +9 -9
  149. package/lib/serverApi/XUserAuthenticationIfc.js +2 -2
  150. package/lib/serverApi/XUtilsCommon.d.ts +13 -13
  151. package/lib/serverApi/XUtilsCommon.js +110 -110
  152. package/package.json +1 -1
@@ -1,885 +1,885 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- var desc = Object.getOwnPropertyDescriptor(m, k);
16
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
- desc = { enumerable: true, get: function() { return m[k]; } };
18
- }
19
- Object.defineProperty(o, k2, desc);
20
- }) : (function(o, m, k, k2) {
21
- if (k2 === undefined) k2 = k;
22
- o[k2] = m[k];
23
- }));
24
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
- Object.defineProperty(o, "default", { enumerable: true, value: v });
26
- }) : function(o, v) {
27
- o["default"] = v;
28
- });
29
- var __importStar = (this && this.__importStar) || function (mod) {
30
- if (mod && mod.__esModule) return mod;
31
- var result = {};
32
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
- __setModuleDefault(result, mod);
34
- return result;
35
- };
36
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
- return new (P || (P = Promise))(function (resolve, reject) {
39
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
- step((generator = generator.apply(thisArg, _arguments || [])).next());
43
- });
44
- };
45
- var __generator = (this && this.__generator) || function (thisArg, body) {
46
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
47
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
48
- function verb(n) { return function (v) { return step([n, v]); }; }
49
- function step(op) {
50
- if (f) throw new TypeError("Generator is already executing.");
51
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
52
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
53
- if (y = 0, t) op = [op[0] & 2, t.value];
54
- switch (op[0]) {
55
- case 0: case 1: t = op; break;
56
- case 4: _.label++; return { value: op[1], done: false };
57
- case 5: _.label++; y = op[1]; op = [0]; continue;
58
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
59
- default:
60
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
61
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
62
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
63
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
64
- if (t[2]) _.ops.pop();
65
- _.trys.pop(); continue;
66
- }
67
- op = body.call(thisArg, _);
68
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
69
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
- }
71
- };
72
- var __values = (this && this.__values) || function(o) {
73
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
74
- if (m) return m.call(o);
75
- if (o && typeof o.length === "number") return {
76
- next: function () {
77
- if (o && i >= o.length) o = void 0;
78
- return { value: o && o[i++], done: !o };
79
- }
80
- };
81
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
82
- };
83
- var __read = (this && this.__read) || function (o, n) {
84
- var m = typeof Symbol === "function" && o[Symbol.iterator];
85
- if (!m) return o;
86
- var i = m.call(o), r, ar = [], e;
87
- try {
88
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
89
- }
90
- catch (error) { e = { error: error }; }
91
- finally {
92
- try {
93
- if (r && !r.done && (m = i["return"])) m.call(i);
94
- }
95
- finally { if (e) throw e.error; }
96
- }
97
- return ar;
98
- };
99
- Object.defineProperty(exports, "__esModule", { value: true });
100
- exports.XLazyColumn = exports.XLazyDataTable = void 0;
101
- var react_1 = __importStar(require("react"));
102
- var datatable_1 = require("primereact/datatable");
103
- 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("./XUtilsConversions");
109
- var FindParam_1 = require("../serverApi/FindParam");
110
- var XButtonIconSmall_1 = require("./XButtonIconSmall");
111
- var tristatecheckbox_1 = require("primereact/tristatecheckbox");
112
- var XUtilsCommon_1 = require("../serverApi/XUtilsCommon");
113
- var XExportRowsDialog_1 = require("./XExportRowsDialog");
114
- 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 XLazyDataTable = function (props) {
119
- var _a;
120
- // must be here, is used in createInitFilters()
121
- var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(props.entity);
122
- var createAggregateItems = function () {
123
- var e_1, _a;
124
- var aggregateItems = [];
125
- var columns = props.children;
126
- try {
127
- for (var columns_1 = __values(columns), columns_1_1 = columns_1.next(); !columns_1_1.done; columns_1_1 = columns_1.next()) {
128
- var column = columns_1_1.value;
129
- var xLazyColumn = column; // nevedel som to krajsie...
130
- if (xLazyColumn.props.aggregateType) {
131
- aggregateItems.push({ field: xLazyColumn.props.field, aggregateType: xLazyColumn.props.aggregateType });
132
- }
133
- }
134
- }
135
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
136
- finally {
137
- try {
138
- if (columns_1_1 && !columns_1_1.done && (_a = columns_1.return)) _a.call(columns_1);
139
- }
140
- finally { if (e_1) throw e_1.error; }
141
- }
142
- return aggregateItems;
143
- };
144
- var createInitFilters = function () {
145
- var e_2, _a;
146
- var initFilters = {};
147
- //let columns = dataTableEl.current.props.children; - does not work
148
- var columns = props.children;
149
- try {
150
- for (var columns_2 = __values(columns), columns_2_1 = columns_2.next(); !columns_2_1.done; columns_2_1 = columns_2.next()) {
151
- var column = columns_2_1.value;
152
- var xLazyColumn = column; // nevedel som to krajsie...
153
- var field = xLazyColumn.props.field;
154
- var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, field);
155
- // TODO column.props.dropdownInFilter - pre "menu" by bolo fajn mat zoznam "enumov"
156
- var filterMatchMode = getFilterMatchMode(xField);
157
- initFilters[field] = createFilterItem(props.filterDisplay, { value: null, matchMode: filterMatchMode });
158
- }
159
- }
160
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
161
- finally {
162
- try {
163
- if (columns_2_1 && !columns_2_1.done && (_a = columns_2.return)) _a.call(columns_2);
164
- }
165
- finally { if (e_2) throw e_2.error; }
166
- }
167
- return initFilters;
168
- };
169
- var getFilterMatchMode = function (xField) {
170
- var filterMatchMode;
171
- if (xField.type === "string") {
172
- filterMatchMode = api_1.FilterMatchMode.STARTS_WITH;
173
- }
174
- // zatial vsetky ostatne EQUALS
175
- else if (xField.type === "decimal" || xField.type === "number" || xField.type === "date" || xField.type === "datetime" || xField.type === "boolean") {
176
- filterMatchMode = api_1.FilterMatchMode.EQUALS;
177
- }
178
- else {
179
- throw "XField ".concat(xField.name, ": unknown xField.type = ").concat(xField.type);
180
- }
181
- return filterMatchMode;
182
- };
183
- var createFilterItem = function (filterDisplay, constraint) {
184
- var filterItem;
185
- if (filterDisplay === "menu") {
186
- // DataTableOperatorFilterMetaData: operator + filter values
187
- filterItem = {
188
- operator: api_1.FilterOperator.OR,
189
- constraints: [constraint]
190
- };
191
- }
192
- else {
193
- // props.filterDisplay === "row"
194
- // DataTableFilterMetaData: filter value
195
- filterItem = constraint;
196
- }
197
- return filterItem;
198
- };
199
- // premenne platne pre cely component (obdoba member premennych v class-e)
200
- var dataTableEl = (0, react_1.useRef)(null);
201
- var customFilter = props.customFilter;
202
- var aggregateItems = createAggregateItems();
203
- var _b = __read((0, react_1.useState)({ rowList: [], totalRecords: 0, aggregateValues: [] }), 2), value = _b[0], setValue = _b[1];
204
- var _c = __read((0, react_1.useState)(false), 2), loading = _c[0], setLoading = _c[1];
205
- var _d = __read((0, react_1.useState)(0), 2), first = _d[0], setFirst = _d[1];
206
- var _e = __read((0, react_1.useState)(props.paginator ? props.rows : undefined), 2), rows = _e[0], setRows = _e[1];
207
- var filtersInit = createInitFilters();
208
- if (props.filters) {
209
- filtersInit = __assign(__assign({}, filtersInit), props.filters); // items from props.filters will replace existing items in filtersInit
210
- }
211
- if (props.searchTableParams !== undefined) {
212
- var displayFieldFilter = props.searchTableParams.displayFieldFilter;
213
- if (displayFieldFilter !== undefined) {
214
- filtersInit[displayFieldFilter.field] = createFilterItem(props.filterDisplay, displayFieldFilter.constraint);
215
- }
216
- // ak mame props.searchTableParams.customFilter, pridame ho
217
- customFilter = XUtils_1.XUtils.filterAnd(customFilter, props.searchTableParams.customFilter);
218
- }
219
- 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)
220
- var _g = __read((0, react_1.useState)(props.sortField ? [{ field: props.sortField, order: 1 }] : []), 2), multiSortMeta = _g[0], setMultiSortMeta = _g[1];
221
- var _h = __read((0, react_1.useState)(null), 2), selectedRow = _h[0], setSelectedRow = _h[1];
222
- var _j = __read((_a = props.dataLoadedState) !== null && _a !== void 0 ? _a : (0, react_1.useState)(false), 2), dataLoaded = _j[0], setDataLoaded = _j[1]; // priznak kde si zapiseme, ci uz sme nacitali data
223
- var _k = __read((0, react_1.useState)(false), 2), exportRowsDialogOpened = _k[0], setExportRowsDialogOpened = _k[1];
224
- var _l = __read((0, react_1.useState)(), 2), exportRowsDialogRowCount = _l[0], setExportRowsDialogRowCount = _l[1]; // param pre dialog
225
- var _m = __read((0, react_1.useState)(filtersInit), 2), filtersAfterFiltering = _m[0], setFiltersAfterFiltering = _m[1]; // sem si odkladame stav filtra po kliknuti na button Filter (chceme exportovat presne to co vidno vyfiltrovane)
226
- // parameter [] zabezpeci ze sa metoda zavola len po prvom renderingu (a nie po kazdej zmene stavu (zavolani setNieco()))
227
- (0, react_1.useEffect)(function () {
228
- // jednoduchy sposob - nepouzivame parameter props.displayed a priznak dataLoaded
229
- if (props.displayed === undefined) {
230
- loadData();
231
- //console.log("XLazyDataTable - data loaded (simple)");
232
- }
233
- }, []); // eslint-disable-line react-hooks/exhaustive-deps
234
- (0, react_1.useEffect)(function () {
235
- // sposob pozivany pri XFormNavigator (potrebujeme refreshnut data pri navrate z formulara)
236
- if (props.displayed !== undefined) {
237
- if (props.displayed) {
238
- if (!dataLoaded) {
239
- loadData();
240
- //console.log("XLazyDataTable - data loaded (used displayed)");
241
- setDataLoaded(true);
242
- }
243
- }
244
- else {
245
- // dataTable je skryta - ked sa na nu vratime, chceme mat priznak dataLoaded nastaveny na false, aby sme videli cerstve data
246
- if (dataLoaded) {
247
- setDataLoaded(false);
248
- }
249
- }
250
- }
251
- }); // eslint-disable-line react-hooks/exhaustive-deps
252
- // TODO - preco je to tu? presunut dole ak sa da...
253
- var dataKey = props.dataKey !== undefined ? props.dataKey : XUtilsMetadata_1.XUtilsMetadata.getXEntity(props.entity).idField;
254
- var onPage = function (event) { return __awaiter(void 0, void 0, void 0, function () {
255
- return __generator(this, function (_a) {
256
- //console.log("zavolany onPage");
257
- setFirst(event.first);
258
- loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: event.first, rows: rows, filters: filters, customFilter: customFilter, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
259
- return [2 /*return*/];
260
- });
261
- }); };
262
- var onFilter = function (event) {
263
- //console.log("zavolany onFilter - this.state.filters = " + JSON.stringify(filters));
264
- //console.log("zavolany onFilter - event.filters = " + JSON.stringify(event.filters));
265
- // tymto zavolanim sa zapise znak zapisany klavesnicou do inputu filtra (ak prikaz zakomentujeme, input filtra zostane prazdny)
266
- setFilters(event.filters);
267
- };
268
- var onSort = function (event) {
269
- //console.log("zavolany onSort - this.state.multiSortMeta = " + JSON.stringify(multiSortMeta));
270
- //console.log("zavolany onSort - event.multiSortMeta = " + JSON.stringify(event.multiSortMeta));
271
- setMultiSortMeta(event.multiSortMeta);
272
- loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: first, rows: rows, filters: filters, customFilter: customFilter, multiSortMeta: event.multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
273
- };
274
- var onClickFilter = function () {
275
- //console.log("zavolany onClickFilter");
276
- loadData();
277
- };
278
- var onClickClearFilter = function () {
279
- // najjednoduchsi sposob - pomeni aj pripadne nastavene matchMode hodnoty
280
- var filtersInit = createInitFilters();
281
- setFilters(filtersInit);
282
- };
283
- var loadData = function () {
284
- loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: first, rows: rows, filters: filters, customFilter: customFilter, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
285
- };
286
- var loadDataBase = function (findParam) { return __awaiter(void 0, void 0, void 0, function () {
287
- var findResult;
288
- return __generator(this, function (_a) {
289
- switch (_a.label) {
290
- case 0:
291
- //console.log("zavolany loadDataBase - startIndex = " + findParam.first + ", endIndex = " + ((findParam.first ?? 0) + (findParam.rows ?? 0)) + ", filters = " + JSON.stringify(findParam.filters) + ", multiSortMeta = " + JSON.stringify(findParam.multiSortMeta) + ", fields = " + JSON.stringify(findParam.fields));
292
- setLoading(true);
293
- return [4 /*yield*/, findByFilter(findParam)];
294
- case 1:
295
- findResult = _a.sent();
296
- setValue(findResult);
297
- setLoading(false);
298
- // odlozime si filter hodnoty pre pripadny export - deep cloning vyzera ze netreba
299
- setFiltersAfterFiltering(filters);
300
- return [2 /*return*/];
301
- }
302
- });
303
- }); };
304
- var findByFilter = function (findParam) { return __awaiter(void 0, void 0, void 0, function () {
305
- var findResult;
306
- return __generator(this, function (_a) {
307
- switch (_a.label) {
308
- case 0: return [4 /*yield*/, XUtils_1.XUtils.fetchOne('lazyDataTableFindRows', findParam)];
309
- case 1:
310
- findResult = _a.sent();
311
- findResult.totalRecords = parseInt(findResult.totalRecords);
312
- return [2 /*return*/, findResult];
313
- }
314
- });
315
- }); };
316
- var getFields = function () {
317
- // krasne zobrazi cely objekt!
318
- //console.log(dataTableEl.current);
319
- var e_3, _a;
320
- var fields = [];
321
- var columns = dataTableEl.current.props.children;
322
- try {
323
- for (var columns_3 = __values(columns), columns_3_1 = columns_3.next(); !columns_3_1.done; columns_3_1 = columns_3.next()) {
324
- var column = columns_3_1.value;
325
- fields.push(column.props.field);
326
- }
327
- }
328
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
329
- finally {
330
- try {
331
- if (columns_3_1 && !columns_3_1.done && (_a = columns_3.return)) _a.call(columns_3);
332
- }
333
- finally { if (e_3) throw e_3.error; }
334
- }
335
- return fields;
336
- };
337
- var getHeaders = function () {
338
- // krasne zobrazi cely objekt!
339
- //console.log(dataTableEl.current);
340
- var e_4, _a;
341
- var headers = [];
342
- var columns = dataTableEl.current.props.children;
343
- try {
344
- for (var columns_4 = __values(columns), columns_4_1 = columns_4.next(); !columns_4_1.done; columns_4_1 = columns_4.next()) {
345
- var column = columns_4_1.value;
346
- // pozor! headers tahame z primereact DataTable a napr. pri editacii nemusi byt v atribute header string
347
- headers.push(column.props.header);
348
- }
349
- }
350
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
351
- finally {
352
- try {
353
- if (columns_4_1 && !columns_4_1.done && (_a = columns_4.return)) _a.call(columns_4);
354
- }
355
- finally { if (e_4) throw e_4.error; }
356
- }
357
- return headers;
358
- };
359
- var onSelectionChange = function (event) {
360
- //console.log("zavolany onSelectionChange");
361
- //console.log(event.value);
362
- setSelectedRow(event.value);
363
- };
364
- var onRowDoubleClick = function (event) {
365
- //console.log("zavolany onRowDoubleClick");
366
- //console.log(event.data);
367
- if (props.onEdit !== undefined) {
368
- props.onEdit(event.data);
369
- }
370
- else if (props.searchTableParams !== undefined) {
371
- props.searchTableParams.onChoose(event.data);
372
- }
373
- };
374
- var onClickAddRow = function () {
375
- //console.log("zavolany onClickAddRow");
376
- if (props.onAddRow !== undefined) {
377
- props.onAddRow();
378
- }
379
- };
380
- var onClickEdit = function () {
381
- //console.log("zavolany onClickEdit");
382
- if (selectedRow !== null) {
383
- if (props.onEdit !== undefined) {
384
- props.onEdit(selectedRow);
385
- }
386
- }
387
- else {
388
- alert((0, XLocale_1.xLocaleOption)('pleaseSelectRow'));
389
- }
390
- };
391
- var onClickRemoveRow = function () { return __awaiter(void 0, void 0, void 0, function () {
392
- var reread, e_5, e_6;
393
- return __generator(this, function (_a) {
394
- switch (_a.label) {
395
- case 0:
396
- if (!(selectedRow !== null)) return [3 /*break*/, 11];
397
- if (!(props.removeRow instanceof Function)) return [3 /*break*/, 5];
398
- reread = true;
399
- _a.label = 1;
400
- case 1:
401
- _a.trys.push([1, 3, , 4]);
402
- return [4 /*yield*/, props.removeRow(selectedRow)];
403
- case 2:
404
- reread = _a.sent();
405
- return [3 /*break*/, 4];
406
- case 3:
407
- e_5 = _a.sent();
408
- XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'), e_5);
409
- return [3 /*break*/, 4];
410
- case 4:
411
- if (reread) {
412
- loadData();
413
- if (props.onRemoveRow) {
414
- props.onRemoveRow(selectedRow, XUtils_1.OperationType.Remove);
415
- }
416
- }
417
- return [3 /*break*/, 10];
418
- case 5:
419
- if (!window.confirm((0, XLocale_1.xLocaleOption)('removeRowConfirm'))) return [3 /*break*/, 10];
420
- _a.label = 6;
421
- case 6:
422
- _a.trys.push([6, 8, , 9]);
423
- // poznamka: vdaka await bude loadData() bezat az po dobehnuti requestu removeRow
424
- return [4 /*yield*/, XUtils_1.XUtils.removeRow(props.entity, selectedRow)];
425
- case 7:
426
- // poznamka: vdaka await bude loadData() bezat az po dobehnuti requestu removeRow
427
- _a.sent();
428
- return [3 /*break*/, 9];
429
- case 8:
430
- e_6 = _a.sent();
431
- XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'), e_6);
432
- return [3 /*break*/, 9];
433
- case 9:
434
- loadData();
435
- if (props.onRemoveRow) {
436
- props.onRemoveRow(selectedRow, XUtils_1.OperationType.Remove);
437
- }
438
- _a.label = 10;
439
- case 10: return [3 /*break*/, 12];
440
- case 11:
441
- alert((0, XLocale_1.xLocaleOption)('pleaseSelectRow'));
442
- _a.label = 12;
443
- case 12: return [2 /*return*/];
444
- }
445
- });
446
- }); };
447
- var onClickExport = function () { return __awaiter(void 0, void 0, void 0, function () {
448
- var findParam, findResult;
449
- return __generator(this, function (_a) {
450
- switch (_a.label) {
451
- case 0:
452
- findParam = { resultType: FindParam_1.ResultType.OnlyRowCount, first: first, rows: rows, filters: filtersAfterFiltering, customFilter: customFilter, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems };
453
- return [4 /*yield*/, findByFilter(findParam)];
454
- case 1:
455
- findResult = _a.sent();
456
- //setLoading(false);
457
- setExportRowsDialogRowCount(findResult.totalRecords); // param pre dialog
458
- setExportRowsDialogOpened(true);
459
- return [2 /*return*/];
460
- }
461
- });
462
- }); };
463
- var createExportParams = function () {
464
- var queryParam = { filters: filtersAfterFiltering, customFilter: customFilter, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields() };
465
- return {
466
- path: "x-lazy-data-table-export",
467
- queryParam: queryParam,
468
- headers: getHeaders(),
469
- fileName: "".concat(props.entity)
470
- };
471
- };
472
- var onClickChoose = function () {
473
- //console.log("zavolany onClickChoose");
474
- if (selectedRow !== null) {
475
- if (props.searchTableParams !== undefined) {
476
- props.searchTableParams.onChoose(selectedRow);
477
- }
478
- }
479
- else {
480
- console.log("Nie je vyselectovany ziaden zaznam.");
481
- }
482
- };
483
- // ****** dropdown vo filtri ********
484
- // pouziva sa len pre simple filtrovanie (filterDisplay="row")
485
- var onDropdownFilterChange = function (field, displayValue) {
486
- var filterValue = displayValue !== XUtils_1.XUtils.dropdownEmptyOptionValue ? displayValue : null;
487
- setFilterValue(field, filterValue, api_1.FilterMatchMode.EQUALS);
488
- };
489
- var getDropdownFilterValue = function (field) {
490
- var filterValue = getFilterValue(field);
491
- return filterValue !== null ? filterValue : XUtils_1.XUtils.dropdownEmptyOptionValue;
492
- };
493
- // ****** vseobecne metodky pre set/get do/z filtra ********
494
- // zatial funguje len pre simple filtrovanie (filterDisplay="row")
495
- // vseobecna specialna metodka pouzvana pri custom filtri (XLazyColumn.filterElement)
496
- var setFilterItem = function (field, filterItem) {
497
- filters[field] = filterItem;
498
- // neskusal som, ci treba aj toto klonovat ale pravdepodobne hej
499
- var filtersCloned = __assign({}, filters);
500
- setFilters(filtersCloned);
501
- };
502
- // vseobecna specialna metodka pouzvana pri custom filtri (XLazyColumn.filterElement)
503
- var getFilterItem = function (field) {
504
- return filters[field];
505
- };
506
- // vseobecna metodka - nastavi hodnotu do filtra
507
- // ak je matchMode === undefined, tak zachova povodnu hodnotu matchMode
508
- var setFilterValue = function (field, value, matchMode) {
509
- var filterValue = filters[field]; // funguje len pre filterDisplay="row"
510
- filterValue.value = value;
511
- if (matchMode !== undefined) {
512
- filterValue.matchMode = matchMode;
513
- }
514
- // treba klonovat, inac react nezobrazi zmenenu hodnotu
515
- var filtersCloned = __assign({}, filters);
516
- setFilters(filtersCloned);
517
- };
518
- // vseobecna metodka - precita hodnotu z filtra (vrati napr. typ Date | null)
519
- var getFilterValue = function (field) {
520
- var filterValue = filters[field]; // funguje len pre filterDisplay="row"
521
- return filterValue.value;
522
- };
523
- // ****** vseobecne metodky pre set/get do/z filtra - pre betweenFilter ********
524
- // do DataTableFilterMetaData.value ulozime dvojprvkove pole [value1, value2]
525
- // na backende spracujeme toto dvojprvkove pole
526
- var setFilterValue1 = function (field, value) {
527
- // na zaciatku (po inicializacii lazy table) je filterValue = null
528
- var filterValue = getFilterValue(field);
529
- if (filterValue !== null) {
530
- filterValue[0] = value;
531
- }
532
- else {
533
- filterValue = [value, null];
534
- }
535
- setFilterValue(field, filterValue, api_1.FilterMatchMode.BETWEEN);
536
- };
537
- var setFilterValue2 = function (field, value) {
538
- // na zaciatku (po inicializacii lazy table) je filterValue = null
539
- var filterValue = getFilterValue(field);
540
- if (filterValue !== null) {
541
- filterValue[1] = value;
542
- }
543
- else {
544
- filterValue = [null, value];
545
- }
546
- setFilterValue(field, filterValue, api_1.FilterMatchMode.BETWEEN);
547
- };
548
- var getFilterValue1 = function (field) {
549
- return getFilterValue1or2(field, 0);
550
- };
551
- var getFilterValue2 = function (field) {
552
- return getFilterValue1or2(field, 1);
553
- };
554
- var getFilterValue1or2 = function (field, index) {
555
- var filterValue = getFilterValue(field);
556
- return filterValue !== null ? filterValue[index] : null;
557
- };
558
- var getBetweenFilter = function (columnBetweenFilter, tableBetweenFilter) {
559
- var betweenFilter = undefined;
560
- // columnBetweenFilter has higher prio than tableBetweenFilter
561
- if (columnBetweenFilter !== undefined) {
562
- if (columnBetweenFilter === "row" || columnBetweenFilter === "column") {
563
- betweenFilter = columnBetweenFilter;
564
- }
565
- // for "noBetween" stays betweenFilter = undefined (simple filter used)
566
- }
567
- else {
568
- betweenFilter = tableBetweenFilter; // betweenFilter from XLazyDataTable property
569
- }
570
- return betweenFilter;
571
- };
572
- var bodyTemplate = function (columnProps, rowData, xField) {
573
- var rowDataValue = XUtilsCommon_1.XUtilsCommon.getValueByPath(rowData, columnProps.field);
574
- var bodyValue = '';
575
- if (xField.type === "decimal") {
576
- // tuto zatial hack, mal by vzdy prist number
577
- var numberValue = null;
578
- if (typeof rowDataValue === 'string') {
579
- numberValue = parseFloat(rowDataValue);
580
- }
581
- else if (typeof rowDataValue === 'number') {
582
- numberValue = rowDataValue;
583
- }
584
- bodyValue = (0, XUtilsConversions_1.numberAsUI)(numberValue, xField.scale);
585
- }
586
- else if (xField.type === "date") {
587
- // tuto zatial hack, mal by prist Date
588
- var dateValue = null;
589
- if (typeof rowDataValue === 'string') {
590
- dateValue = new Date(rowDataValue);
591
- }
592
- else if (typeof rowDataValue === 'object' && rowDataValue instanceof Date) {
593
- dateValue = rowDataValue;
594
- }
595
- bodyValue = (0, XUtilsConversions_1.dateAsUI)(dateValue);
596
- }
597
- else if (xField.type === "datetime") {
598
- // tuto zatial hack, mal by prist Date
599
- var dateValue = null;
600
- if (typeof rowDataValue === 'string') {
601
- dateValue = new Date(rowDataValue);
602
- }
603
- else if (typeof rowDataValue === 'object' && rowDataValue instanceof Date) {
604
- dateValue = rowDataValue;
605
- }
606
- bodyValue = (0, XUtilsConversions_1.datetimeAsUI)(dateValue);
607
- }
608
- else if (xField.type === "boolean") {
609
- // TODO - efektivnejsie by bolo renderovat len prislusne ikonky
610
- bodyValue = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: rowDataValue, disabled: true });
611
- }
612
- return bodyValue;
613
- };
614
- // ak mame scrollWidth/scrollHeight = viewport (default), vyratame scrollWidth/scrollHeight tak aby tabulka "sadla" do okna (viewport-u)
615
- var scrollWidth = undefined; // vypnute horizontalne scrollovanie
616
- var scrollHeight = undefined; // vypnute vertikalne scrollovanie
617
- if (props.scrollable) {
618
- if (props.scrollWidth !== "none") {
619
- scrollWidth = props.scrollWidth;
620
- if (scrollWidth === "viewport") {
621
- scrollWidth = 'calc(100vw - 1.4rem)'; // 20px okraje
622
- }
623
- }
624
- if (props.scrollHeight !== "none") {
625
- scrollHeight = props.scrollHeight;
626
- if (scrollHeight === "viewport") {
627
- // vypocet je priblizny, robeny na mobil, desktop bude mat mozno iny
628
- //const headerHeight = XUtils.toPX0('12.7rem');
629
- //let footerHeight = XUtils.toPX0('3.7rem') + XUtils.toPX0('3rem'); // table footer (paging) + buttons Add row, Edit, ...
630
- // na desktope mi nechce odpocitat vysku taskbar-u od window.screen.availHeight, tak to poriesime takymto hack-om:
631
- // if (!XUtils.isMobile()) {
632
- // footerHeight += XUtils.toPX0('6rem'); // priblizna vyska taskbaru (ak mam 2 rady buttonov)
633
- // }
634
- var viewHeight = void 0;
635
- var headerFooterHeight = void 0;
636
- if (props.searchTableParams === undefined) {
637
- // sme v standardnom formulari
638
- viewHeight = '100vh';
639
- // experimentalne zistena vyska header/footer
640
- // da sa vyratat ako vysku body (celej stranky) - vyska div-u ktory sa scrolluje (div na ktorom je style="max-height: calc(100vh - 266.42px);)
641
- // (treba odratat vysku paginatora a formFooterHeight (lebo tie sa odratavaju nizsie))
642
- headerFooterHeight = XUtils_1.XUtils.toPX0('10.89rem');
643
- }
644
- else {
645
- // sme v dialogu
646
- if (XUtils_1.XUtils.isMobile()) {
647
- viewHeight = '98vh'; // .p-dialog pre mobil ma max-height: 98%
648
- headerFooterHeight = XUtils_1.XUtils.toPX0('12.03rem'); // rucne zratane
649
- }
650
- else {
651
- viewHeight = '90vh'; // .p-dialog pre desktop ma max-height: 90%
652
- headerFooterHeight = XUtils_1.XUtils.toPX0('13.03rem'); // rucne zratane (desktop ma vecsi margin dole na dialogu)
653
- }
654
- }
655
- // pridame vysku paging-u, ak treba
656
- if (props.paginator) {
657
- headerFooterHeight += XUtils_1.XUtils.toPX0('3.71rem');
658
- }
659
- // este pridame vysku linkov na zdrojaky, ak treba
660
- if (props.formFooterHeight !== undefined) {
661
- headerFooterHeight += XUtils_1.XUtils.toPX0(XUtils_1.XUtils.processGridBreakpoints(props.formFooterHeight));
662
- }
663
- scrollHeight = "calc(".concat(viewHeight, " - ").concat(headerFooterHeight, "px)");
664
- }
665
- }
666
- }
667
- var style = {};
668
- if (scrollWidth !== undefined) {
669
- style.width = scrollWidth;
670
- }
671
- if (props.shrinkWidth) {
672
- style.maxWidth = 'min-content'; // ak nic nedame (nechame auto), tak (v pripade ak nebudeme mat horizontalny scrollbar) natiahne tabulku na celu sirku stranky, co nechceme
673
- }
674
- // pri prechode z Primereact 6.x na 9.x sa tableLayout zmenil z fixed na auto a nefungovalo nastavenie sirok stlpcov - docasne teda takto
675
- var tableStyle = { tableLayout: 'fixed' };
676
- if (props.width !== undefined) {
677
- var width = props.width;
678
- if (!isNaN(Number(width))) { // if width is number
679
- width = width + 'rem';
680
- }
681
- tableStyle = __assign(__assign({}, tableStyle), { width: width });
682
- }
683
- // check
684
- if ((props.editMode === true || props.editMode === false) && props.editModeHandlers === undefined) {
685
- throw "XLazyDataTable: for props.editMode = true/false, props.editModeHandlers must be defined.";
686
- }
687
- // pouzivame paginatorLeft aj paginatorRight (aj prazdny) pouzivame, aby bol default paginator v strede (bez paginatorLeft je default paginator presunuty dolava a naopak)
688
- // sirku div-ov este nastavujeme v css na 10rem
689
- var paginatorLeft = react_1.default.createElement("div", null,
690
- (0, XLocale_1.xLocaleOption)('totalRecords'),
691
- ": ",
692
- value.totalRecords);
693
- var paginatorRight = react_1.default.createElement("div", null);
694
- if (props.editMode === true) {
695
- paginatorRight = react_1.default.createElement("div", null,
696
- 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" }),
697
- 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" }));
698
- }
699
- else if (props.editMode === false) {
700
- paginatorRight = react_1.default.createElement("div", null,
701
- 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" }));
702
- }
703
- // else - editMode is undefined - browse is not editable
704
- // export pre search button-y zatial vypneme
705
- var exportRows = (props.searchTableParams === undefined);
706
- // pre lepsiu citatelnost vytvarame stlpce uz tu
707
- var columnElemList = react_1.default.Children.map(props.children, function (child) {
708
- // ak chceme zmenit child element, tak treba bud vytvorit novy alebo vyklonovat
709
- // priklad je na https://soshace.com/building-react-components-using-children-props-and-context-api/
710
- // (vzdy musime robit manipulacie so stlpcom, lebo potrebujeme pridat filter={true} sortable={true}
711
- var childColumn = child; // nevedel som to krajsie...
712
- var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, childColumn.props.field);
713
- // *********** header ***********
714
- var headerLabel = childColumn.props.header !== undefined ? childColumn.props.header : childColumn.props.field;
715
- var header;
716
- if (props.editMode === true) {
717
- header = react_1.default.createElement("div", null,
718
- react_1.default.createElement("div", null,
719
- react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-plus", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onAddColumn(childColumn.props.field); }, tooltip: "Add column" }),
720
- 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.onEditColumn(childColumn.props.field); }, tooltip: "Edit column" }),
721
- react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-trash", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onRemoveColumn(childColumn.props.field); }, tooltip: "Remove column" })),
722
- react_1.default.createElement("div", null,
723
- react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-chevron-left", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onMoveColumnLeft(childColumn.props.field); }, tooltip: "Move column left" }),
724
- react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-chevron-right", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onMoveColumnRight(childColumn.props.field); }, tooltip: "Move column right" })),
725
- react_1.default.createElement("div", null, headerLabel));
726
- }
727
- else {
728
- header = headerLabel;
729
- }
730
- // *********** filterElement ***********
731
- var betweenFilter = undefined;
732
- var filterElement;
733
- if (childColumn.props.filterElement !== undefined) {
734
- filterElement = function (options) {
735
- // compilator sa stazoval ze childColumn.props.filterElement moze byt undefined, preto som pridal "!"
736
- return childColumn.props.filterElement({ getFilterItem: getFilterItem, setFilterItem: setFilterItem, options: options });
737
- };
738
- }
739
- else {
740
- if (xField.type === "boolean") {
741
- var checkboxValue = getFilterValue(childColumn.props.field);
742
- filterElement = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: checkboxValue, onChange: function (e) { return setFilterValue(childColumn.props.field, e.value, api_1.FilterMatchMode.EQUALS); } });
743
- }
744
- else if (childColumn.props.dropdownInFilter) {
745
- var dropdownValue = getDropdownFilterValue(childColumn.props.field);
746
- filterElement = react_1.default.createElement(XDropdownDTFilter_1.XDropdownDTFilter, { entity: props.entity, path: childColumn.props.field, value: dropdownValue, onValueChange: onDropdownFilterChange });
747
- }
748
- else if (xField.type === "date" || xField.type === "datetime") {
749
- betweenFilter = getBetweenFilter(childColumn.props.betweenFilter, props.betweenFilter);
750
- if (betweenFilter !== undefined) {
751
- // display: 'flex' umiestni XCalendar elementy vedla seba
752
- filterElement =
753
- react_1.default.createElement("div", { style: betweenFilter === "row" ? { display: 'flex' } : undefined },
754
- react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value); }, datetime: xField.type === "datetime" }),
755
- react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value); }, datetime: xField.type === "datetime" }));
756
- }
757
- else {
758
- var dateValue = getFilterValue(childColumn.props.field);
759
- filterElement = react_1.default.createElement(XCalendar_1.XCalendar, { value: dateValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value); }, datetime: xField.type === "datetime" });
760
- }
761
- }
762
- else if (xField.type === "decimal" || xField.type === "number") {
763
- var params = XUtilsMetadata_1.XUtilsMetadata.getParamsForInputNumber(xField);
764
- betweenFilter = getBetweenFilter(childColumn.props.betweenFilter, props.betweenFilter);
765
- if (betweenFilter !== undefined) {
766
- // display: 'flex' umiestni input elementy pod seba (betweenFilter = "column") resp. vedla seba (betweenFilter = "row")
767
- filterElement =
768
- react_1.default.createElement("div", { style: { display: 'flex', flexDirection: betweenFilter } },
769
- react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value); } }, params)),
770
- react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value); } }, params)));
771
- }
772
- else {
773
- var numberValue = getFilterValue(childColumn.props.field);
774
- filterElement = react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: numberValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value); } }, params));
775
- }
776
- }
777
- }
778
- // ************** dataType **************
779
- // depending on the dataType of the column, suitable match modes are displayed in filter
780
- var dataType = undefined;
781
- if (xField.type === "decimal" || xField.type === "number") {
782
- dataType = "numeric";
783
- }
784
- else if (xField.type === "date" || xField.type === "datetime") {
785
- dataType = "date";
786
- }
787
- // *********** showFilterMenu ***********
788
- var showFilterMenu;
789
- if (childColumn.props.showFilterMenu !== undefined) {
790
- showFilterMenu = childColumn.props.showFilterMenu;
791
- }
792
- else {
793
- showFilterMenu = true; // default
794
- if (props.filterDisplay === "row") {
795
- if (xField.type === "boolean" || childColumn.props.dropdownInFilter || betweenFilter !== undefined) {
796
- showFilterMenu = false;
797
- }
798
- }
799
- }
800
- // *********** showClearButton ***********
801
- // pre filterDisplay = "row" nechceme clear button, chceme setrit miesto
802
- var showClearButton = props.filterDisplay === "menu";
803
- // *********** body ***********
804
- var body;
805
- if (childColumn.props.body !== undefined) {
806
- body = childColumn.props.body;
807
- }
808
- // TODO - mozno by bolo dobre vytvarat body pre kazdy typ fieldu, nech je to vsetko konzistentne
809
- else if (xField.type === "decimal" || xField.type === "date" || xField.type === "datetime" || xField.type === "boolean") {
810
- body = function (rowData) { return bodyTemplate(childColumn.props, rowData, xField); };
811
- }
812
- // *********** width/headerStyle ***********
813
- var width = XUtils_1.XUtils.processPropWidth(childColumn.props.width);
814
- if (width === undefined || width === "default") {
815
- // TODO - if filter not used at all, then buttons flags should be false
816
- var filterMenuInFilterRow = props.filterDisplay === "row" && showFilterMenu;
817
- var filterButtonInHeader = props.filterDisplay === "menu";
818
- width = XUtilsMetadata_1.XUtilsMetadata.computeColumnWidth(xField, betweenFilter, filterMenuInFilterRow, undefined, headerLabel, true, filterButtonInHeader);
819
- }
820
- var headerStyle = {};
821
- if (width !== undefined) {
822
- headerStyle = { width: width };
823
- }
824
- // *********** align ***********
825
- var align = undefined; // default undefined (left)
826
- if (childColumn.props.align !== undefined && childColumn.props.align !== null) {
827
- align = childColumn.props.align;
828
- }
829
- else {
830
- // decimal defaultne zarovnavame doprava
831
- if (xField.type === "decimal") {
832
- align = "right";
833
- }
834
- else if (xField.type === "boolean") {
835
- align = "center";
836
- }
837
- }
838
- // *********** footer ***********
839
- var footer = undefined;
840
- if (childColumn.props.aggregateType && value.aggregateValues) {
841
- var aggregateValue = value.aggregateValues[childColumn.props.field];
842
- if (aggregateValue !== undefined && aggregateValue !== null) {
843
- if (xField.type === "decimal" || xField.type === "number") {
844
- // v json subore su stringy (cislo v ""), konvertujeme aby sme zmenili 123.45 na 123,45
845
- aggregateValue = (0, XUtilsConversions_1.numberAsUI)((0, XUtilsConversions_1.numberFromModel)(aggregateValue), xField.scale);
846
- }
847
- }
848
- else {
849
- aggregateValue = ""; // nemame este nacitane data
850
- }
851
- footer = aggregateValue;
852
- }
853
- return react_1.default.createElement(column_1.Column, { field: childColumn.props.field, header: header, footer: footer, filter: true, sortable: true, filterElement: filterElement, dataType: dataType, showFilterMenu: showFilterMenu, showClearButton: showClearButton, body: body, headerStyle: headerStyle, align: align });
854
- });
855
- return (react_1.default.createElement("div", null,
856
- react_1.default.createElement("div", { className: "flex justify-content-center" },
857
- react_1.default.createElement(XButton_1.XButton, { key: "filter", label: (0, XLocale_1.xLocaleOption)('filter'), onClick: onClickFilter }),
858
- react_1.default.createElement(XButton_1.XButton, { key: "clearFilter", label: (0, XLocale_1.xLocaleOption)('clearFilter'), onClick: onClickClearFilter })),
859
- react_1.default.createElement("div", { className: "flex justify-content-center" },
860
- 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)),
861
- react_1.default.createElement("div", { className: "flex justify-content-center" },
862
- props.onAddRow !== undefined ? react_1.default.createElement(XButton_1.XButton, { key: "addRow", icon: "pi pi-plus", label: (0, XLocale_1.xLocaleOption)('addRow'), onClick: onClickAddRow }) : null,
863
- props.onEdit !== undefined ? react_1.default.createElement(XButton_1.XButton, { key: "editRow", icon: "pi pi-pencil", label: (0, XLocale_1.xLocaleOption)('editRow'), onClick: onClickEdit }) : null,
864
- props.removeRow !== undefined && props.removeRow !== false ? react_1.default.createElement(XButton_1.XButton, { key: "removeRow", icon: "pi pi-times", label: (0, XLocale_1.xLocaleOption)('removeRow'), onClick: onClickRemoveRow }) : null,
865
- exportRows ? react_1.default.createElement(XButton_1.XButton, { key: "exportRows", icon: "pi pi-file-export", label: (0, XLocale_1.xLocaleOption)('exportRows'), onClick: onClickExport }) : null,
866
- props.appButtons,
867
- props.searchTableParams !== undefined ? react_1.default.createElement(XButton_1.XButton, { key: "choose", label: (0, XLocale_1.xLocaleOption)('chooseRow'), onClick: onClickChoose }) : null,
868
- exportRows ? react_1.default.createElement(XExportRowsDialog_1.XExportRowsDialog, { key: "exportRowsDialog", dialogOpened: exportRowsDialogOpened, hideDialog: function () { return setExportRowsDialogOpened(false); }, rowCount: exportRowsDialogRowCount, exportParams: createExportParams }) : null)));
869
- };
870
- exports.XLazyDataTable = XLazyDataTable;
871
- exports.XLazyDataTable.defaultProps = {
872
- paginator: true,
873
- rows: 10,
874
- filterDisplay: "row",
875
- scrollable: true,
876
- scrollWidth: 'viewport',
877
- scrollHeight: 'viewport',
878
- shrinkWidth: true
879
- };
880
- // TODO - XLazyColumn neni idealny nazov, lepsi je XColumn (ale zatial nechame XLazyColumn)
881
- var XLazyColumn = function (props) {
882
- // nevadi ze tu nic nevraciame, field a header vieme precitat a zvysok by sme aj tak zahodili lebo vytvarame novy element
883
- return (null);
884
- };
885
- exports.XLazyColumn = XLazyColumn;
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
+ return new (P || (P = Promise))(function (resolve, reject) {
39
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
43
+ });
44
+ };
45
+ var __generator = (this && this.__generator) || function (thisArg, body) {
46
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
47
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
48
+ function verb(n) { return function (v) { return step([n, v]); }; }
49
+ function step(op) {
50
+ if (f) throw new TypeError("Generator is already executing.");
51
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
52
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
53
+ if (y = 0, t) op = [op[0] & 2, t.value];
54
+ switch (op[0]) {
55
+ case 0: case 1: t = op; break;
56
+ case 4: _.label++; return { value: op[1], done: false };
57
+ case 5: _.label++; y = op[1]; op = [0]; continue;
58
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
59
+ default:
60
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
61
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
62
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
63
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
64
+ if (t[2]) _.ops.pop();
65
+ _.trys.pop(); continue;
66
+ }
67
+ op = body.call(thisArg, _);
68
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
69
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
+ }
71
+ };
72
+ var __values = (this && this.__values) || function(o) {
73
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
74
+ if (m) return m.call(o);
75
+ if (o && typeof o.length === "number") return {
76
+ next: function () {
77
+ if (o && i >= o.length) o = void 0;
78
+ return { value: o && o[i++], done: !o };
79
+ }
80
+ };
81
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
82
+ };
83
+ var __read = (this && this.__read) || function (o, n) {
84
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
85
+ if (!m) return o;
86
+ var i = m.call(o), r, ar = [], e;
87
+ try {
88
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
89
+ }
90
+ catch (error) { e = { error: error }; }
91
+ finally {
92
+ try {
93
+ if (r && !r.done && (m = i["return"])) m.call(i);
94
+ }
95
+ finally { if (e) throw e.error; }
96
+ }
97
+ return ar;
98
+ };
99
+ Object.defineProperty(exports, "__esModule", { value: true });
100
+ exports.XLazyColumn = exports.XLazyDataTable = void 0;
101
+ var react_1 = __importStar(require("react"));
102
+ var datatable_1 = require("primereact/datatable");
103
+ 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("./XUtilsConversions");
109
+ var FindParam_1 = require("../serverApi/FindParam");
110
+ var XButtonIconSmall_1 = require("./XButtonIconSmall");
111
+ var tristatecheckbox_1 = require("primereact/tristatecheckbox");
112
+ var XUtilsCommon_1 = require("../serverApi/XUtilsCommon");
113
+ var XExportRowsDialog_1 = require("./XExportRowsDialog");
114
+ 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 XLazyDataTable = function (props) {
119
+ var _a;
120
+ // must be here, is used in createInitFilters()
121
+ var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(props.entity);
122
+ var createAggregateItems = function () {
123
+ var e_1, _a;
124
+ var aggregateItems = [];
125
+ var columns = props.children;
126
+ try {
127
+ for (var columns_1 = __values(columns), columns_1_1 = columns_1.next(); !columns_1_1.done; columns_1_1 = columns_1.next()) {
128
+ var column = columns_1_1.value;
129
+ var xLazyColumn = column; // nevedel som to krajsie...
130
+ if (xLazyColumn.props.aggregateType) {
131
+ aggregateItems.push({ field: xLazyColumn.props.field, aggregateType: xLazyColumn.props.aggregateType });
132
+ }
133
+ }
134
+ }
135
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
136
+ finally {
137
+ try {
138
+ if (columns_1_1 && !columns_1_1.done && (_a = columns_1.return)) _a.call(columns_1);
139
+ }
140
+ finally { if (e_1) throw e_1.error; }
141
+ }
142
+ return aggregateItems;
143
+ };
144
+ var createInitFilters = function () {
145
+ var e_2, _a;
146
+ var initFilters = {};
147
+ //let columns = dataTableEl.current.props.children; - does not work
148
+ var columns = props.children;
149
+ try {
150
+ for (var columns_2 = __values(columns), columns_2_1 = columns_2.next(); !columns_2_1.done; columns_2_1 = columns_2.next()) {
151
+ var column = columns_2_1.value;
152
+ var xLazyColumn = column; // nevedel som to krajsie...
153
+ var field = xLazyColumn.props.field;
154
+ var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, field);
155
+ // TODO column.props.dropdownInFilter - pre "menu" by bolo fajn mat zoznam "enumov"
156
+ var filterMatchMode = getFilterMatchMode(xField);
157
+ initFilters[field] = createFilterItem(props.filterDisplay, { value: null, matchMode: filterMatchMode });
158
+ }
159
+ }
160
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
161
+ finally {
162
+ try {
163
+ if (columns_2_1 && !columns_2_1.done && (_a = columns_2.return)) _a.call(columns_2);
164
+ }
165
+ finally { if (e_2) throw e_2.error; }
166
+ }
167
+ return initFilters;
168
+ };
169
+ var getFilterMatchMode = function (xField) {
170
+ var filterMatchMode;
171
+ if (xField.type === "string") {
172
+ filterMatchMode = api_1.FilterMatchMode.STARTS_WITH;
173
+ }
174
+ // zatial vsetky ostatne EQUALS
175
+ else if (xField.type === "decimal" || xField.type === "number" || xField.type === "date" || xField.type === "datetime" || xField.type === "boolean") {
176
+ filterMatchMode = api_1.FilterMatchMode.EQUALS;
177
+ }
178
+ else {
179
+ throw "XField ".concat(xField.name, ": unknown xField.type = ").concat(xField.type);
180
+ }
181
+ return filterMatchMode;
182
+ };
183
+ var createFilterItem = function (filterDisplay, constraint) {
184
+ var filterItem;
185
+ if (filterDisplay === "menu") {
186
+ // DataTableOperatorFilterMetaData: operator + filter values
187
+ filterItem = {
188
+ operator: api_1.FilterOperator.OR,
189
+ constraints: [constraint]
190
+ };
191
+ }
192
+ else {
193
+ // props.filterDisplay === "row"
194
+ // DataTableFilterMetaData: filter value
195
+ filterItem = constraint;
196
+ }
197
+ return filterItem;
198
+ };
199
+ // premenne platne pre cely component (obdoba member premennych v class-e)
200
+ var dataTableEl = (0, react_1.useRef)(null);
201
+ var customFilter = props.customFilter;
202
+ var aggregateItems = createAggregateItems();
203
+ var _b = __read((0, react_1.useState)({ rowList: [], totalRecords: 0, aggregateValues: [] }), 2), value = _b[0], setValue = _b[1];
204
+ var _c = __read((0, react_1.useState)(false), 2), loading = _c[0], setLoading = _c[1];
205
+ var _d = __read((0, react_1.useState)(0), 2), first = _d[0], setFirst = _d[1];
206
+ var _e = __read((0, react_1.useState)(props.paginator ? props.rows : undefined), 2), rows = _e[0], setRows = _e[1];
207
+ var filtersInit = createInitFilters();
208
+ if (props.filters) {
209
+ filtersInit = __assign(__assign({}, filtersInit), props.filters); // items from props.filters will replace existing items in filtersInit
210
+ }
211
+ if (props.searchTableParams !== undefined) {
212
+ var displayFieldFilter = props.searchTableParams.displayFieldFilter;
213
+ if (displayFieldFilter !== undefined) {
214
+ filtersInit[displayFieldFilter.field] = createFilterItem(props.filterDisplay, displayFieldFilter.constraint);
215
+ }
216
+ // ak mame props.searchTableParams.customFilter, pridame ho
217
+ customFilter = XUtils_1.XUtils.filterAnd(customFilter, props.searchTableParams.customFilter);
218
+ }
219
+ 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)
220
+ var _g = __read((0, react_1.useState)(props.sortField ? [{ field: props.sortField, order: 1 }] : []), 2), multiSortMeta = _g[0], setMultiSortMeta = _g[1];
221
+ var _h = __read((0, react_1.useState)(null), 2), selectedRow = _h[0], setSelectedRow = _h[1];
222
+ var _j = __read((_a = props.dataLoadedState) !== null && _a !== void 0 ? _a : (0, react_1.useState)(false), 2), dataLoaded = _j[0], setDataLoaded = _j[1]; // priznak kde si zapiseme, ci uz sme nacitali data
223
+ var _k = __read((0, react_1.useState)(false), 2), exportRowsDialogOpened = _k[0], setExportRowsDialogOpened = _k[1];
224
+ var _l = __read((0, react_1.useState)(), 2), exportRowsDialogRowCount = _l[0], setExportRowsDialogRowCount = _l[1]; // param pre dialog
225
+ var _m = __read((0, react_1.useState)(filtersInit), 2), filtersAfterFiltering = _m[0], setFiltersAfterFiltering = _m[1]; // sem si odkladame stav filtra po kliknuti na button Filter (chceme exportovat presne to co vidno vyfiltrovane)
226
+ // parameter [] zabezpeci ze sa metoda zavola len po prvom renderingu (a nie po kazdej zmene stavu (zavolani setNieco()))
227
+ (0, react_1.useEffect)(function () {
228
+ // jednoduchy sposob - nepouzivame parameter props.displayed a priznak dataLoaded
229
+ if (props.displayed === undefined) {
230
+ loadData();
231
+ //console.log("XLazyDataTable - data loaded (simple)");
232
+ }
233
+ }, []); // eslint-disable-line react-hooks/exhaustive-deps
234
+ (0, react_1.useEffect)(function () {
235
+ // sposob pozivany pri XFormNavigator (potrebujeme refreshnut data pri navrate z formulara)
236
+ if (props.displayed !== undefined) {
237
+ if (props.displayed) {
238
+ if (!dataLoaded) {
239
+ loadData();
240
+ //console.log("XLazyDataTable - data loaded (used displayed)");
241
+ setDataLoaded(true);
242
+ }
243
+ }
244
+ else {
245
+ // dataTable je skryta - ked sa na nu vratime, chceme mat priznak dataLoaded nastaveny na false, aby sme videli cerstve data
246
+ if (dataLoaded) {
247
+ setDataLoaded(false);
248
+ }
249
+ }
250
+ }
251
+ }); // eslint-disable-line react-hooks/exhaustive-deps
252
+ // TODO - preco je to tu? presunut dole ak sa da...
253
+ var dataKey = props.dataKey !== undefined ? props.dataKey : XUtilsMetadata_1.XUtilsMetadata.getXEntity(props.entity).idField;
254
+ var onPage = function (event) { return __awaiter(void 0, void 0, void 0, function () {
255
+ return __generator(this, function (_a) {
256
+ //console.log("zavolany onPage");
257
+ setFirst(event.first);
258
+ loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: event.first, rows: rows, filters: filters, customFilter: customFilter, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
259
+ return [2 /*return*/];
260
+ });
261
+ }); };
262
+ var onFilter = function (event) {
263
+ //console.log("zavolany onFilter - this.state.filters = " + JSON.stringify(filters));
264
+ //console.log("zavolany onFilter - event.filters = " + JSON.stringify(event.filters));
265
+ // tymto zavolanim sa zapise znak zapisany klavesnicou do inputu filtra (ak prikaz zakomentujeme, input filtra zostane prazdny)
266
+ setFilters(event.filters);
267
+ };
268
+ var onSort = function (event) {
269
+ //console.log("zavolany onSort - this.state.multiSortMeta = " + JSON.stringify(multiSortMeta));
270
+ //console.log("zavolany onSort - event.multiSortMeta = " + JSON.stringify(event.multiSortMeta));
271
+ setMultiSortMeta(event.multiSortMeta);
272
+ loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: first, rows: rows, filters: filters, customFilter: customFilter, multiSortMeta: event.multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
273
+ };
274
+ var onClickFilter = function () {
275
+ //console.log("zavolany onClickFilter");
276
+ loadData();
277
+ };
278
+ var onClickClearFilter = function () {
279
+ // najjednoduchsi sposob - pomeni aj pripadne nastavene matchMode hodnoty
280
+ var filtersInit = createInitFilters();
281
+ setFilters(filtersInit);
282
+ };
283
+ var loadData = function () {
284
+ loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: first, rows: rows, filters: filters, customFilter: customFilter, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
285
+ };
286
+ var loadDataBase = function (findParam) { return __awaiter(void 0, void 0, void 0, function () {
287
+ var findResult;
288
+ return __generator(this, function (_a) {
289
+ switch (_a.label) {
290
+ case 0:
291
+ //console.log("zavolany loadDataBase - startIndex = " + findParam.first + ", endIndex = " + ((findParam.first ?? 0) + (findParam.rows ?? 0)) + ", filters = " + JSON.stringify(findParam.filters) + ", multiSortMeta = " + JSON.stringify(findParam.multiSortMeta) + ", fields = " + JSON.stringify(findParam.fields));
292
+ setLoading(true);
293
+ return [4 /*yield*/, findByFilter(findParam)];
294
+ case 1:
295
+ findResult = _a.sent();
296
+ setValue(findResult);
297
+ setLoading(false);
298
+ // odlozime si filter hodnoty pre pripadny export - deep cloning vyzera ze netreba
299
+ setFiltersAfterFiltering(filters);
300
+ return [2 /*return*/];
301
+ }
302
+ });
303
+ }); };
304
+ var findByFilter = function (findParam) { return __awaiter(void 0, void 0, void 0, function () {
305
+ var findResult;
306
+ return __generator(this, function (_a) {
307
+ switch (_a.label) {
308
+ case 0: return [4 /*yield*/, XUtils_1.XUtils.fetchOne('lazyDataTableFindRows', findParam)];
309
+ case 1:
310
+ findResult = _a.sent();
311
+ findResult.totalRecords = parseInt(findResult.totalRecords);
312
+ return [2 /*return*/, findResult];
313
+ }
314
+ });
315
+ }); };
316
+ var getFields = function () {
317
+ // krasne zobrazi cely objekt!
318
+ //console.log(dataTableEl.current);
319
+ var e_3, _a;
320
+ var fields = [];
321
+ var columns = dataTableEl.current.props.children;
322
+ try {
323
+ for (var columns_3 = __values(columns), columns_3_1 = columns_3.next(); !columns_3_1.done; columns_3_1 = columns_3.next()) {
324
+ var column = columns_3_1.value;
325
+ fields.push(column.props.field);
326
+ }
327
+ }
328
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
329
+ finally {
330
+ try {
331
+ if (columns_3_1 && !columns_3_1.done && (_a = columns_3.return)) _a.call(columns_3);
332
+ }
333
+ finally { if (e_3) throw e_3.error; }
334
+ }
335
+ return fields;
336
+ };
337
+ var getHeaders = function () {
338
+ // krasne zobrazi cely objekt!
339
+ //console.log(dataTableEl.current);
340
+ var e_4, _a;
341
+ var headers = [];
342
+ var columns = dataTableEl.current.props.children;
343
+ try {
344
+ for (var columns_4 = __values(columns), columns_4_1 = columns_4.next(); !columns_4_1.done; columns_4_1 = columns_4.next()) {
345
+ var column = columns_4_1.value;
346
+ // pozor! headers tahame z primereact DataTable a napr. pri editacii nemusi byt v atribute header string
347
+ headers.push(column.props.header);
348
+ }
349
+ }
350
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
351
+ finally {
352
+ try {
353
+ if (columns_4_1 && !columns_4_1.done && (_a = columns_4.return)) _a.call(columns_4);
354
+ }
355
+ finally { if (e_4) throw e_4.error; }
356
+ }
357
+ return headers;
358
+ };
359
+ var onSelectionChange = function (event) {
360
+ //console.log("zavolany onSelectionChange");
361
+ //console.log(event.value);
362
+ setSelectedRow(event.value);
363
+ };
364
+ var onRowDoubleClick = function (event) {
365
+ //console.log("zavolany onRowDoubleClick");
366
+ //console.log(event.data);
367
+ if (props.onEdit !== undefined) {
368
+ props.onEdit(event.data);
369
+ }
370
+ else if (props.searchTableParams !== undefined) {
371
+ props.searchTableParams.onChoose(event.data);
372
+ }
373
+ };
374
+ var onClickAddRow = function () {
375
+ //console.log("zavolany onClickAddRow");
376
+ if (props.onAddRow !== undefined) {
377
+ props.onAddRow();
378
+ }
379
+ };
380
+ var onClickEdit = function () {
381
+ //console.log("zavolany onClickEdit");
382
+ if (selectedRow !== null) {
383
+ if (props.onEdit !== undefined) {
384
+ props.onEdit(selectedRow);
385
+ }
386
+ }
387
+ else {
388
+ alert((0, XLocale_1.xLocaleOption)('pleaseSelectRow'));
389
+ }
390
+ };
391
+ var onClickRemoveRow = function () { return __awaiter(void 0, void 0, void 0, function () {
392
+ var reread, e_5, e_6;
393
+ return __generator(this, function (_a) {
394
+ switch (_a.label) {
395
+ case 0:
396
+ if (!(selectedRow !== null)) return [3 /*break*/, 11];
397
+ if (!(props.removeRow instanceof Function)) return [3 /*break*/, 5];
398
+ reread = true;
399
+ _a.label = 1;
400
+ case 1:
401
+ _a.trys.push([1, 3, , 4]);
402
+ return [4 /*yield*/, props.removeRow(selectedRow)];
403
+ case 2:
404
+ reread = _a.sent();
405
+ return [3 /*break*/, 4];
406
+ case 3:
407
+ e_5 = _a.sent();
408
+ XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'), e_5);
409
+ return [3 /*break*/, 4];
410
+ case 4:
411
+ if (reread) {
412
+ loadData();
413
+ if (props.onRemoveRow) {
414
+ props.onRemoveRow(selectedRow, XUtils_1.OperationType.Remove);
415
+ }
416
+ }
417
+ return [3 /*break*/, 10];
418
+ case 5:
419
+ if (!window.confirm((0, XLocale_1.xLocaleOption)('removeRowConfirm'))) return [3 /*break*/, 10];
420
+ _a.label = 6;
421
+ case 6:
422
+ _a.trys.push([6, 8, , 9]);
423
+ // poznamka: vdaka await bude loadData() bezat az po dobehnuti requestu removeRow
424
+ return [4 /*yield*/, XUtils_1.XUtils.removeRow(props.entity, selectedRow)];
425
+ case 7:
426
+ // poznamka: vdaka await bude loadData() bezat az po dobehnuti requestu removeRow
427
+ _a.sent();
428
+ return [3 /*break*/, 9];
429
+ case 8:
430
+ e_6 = _a.sent();
431
+ XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'), e_6);
432
+ return [3 /*break*/, 9];
433
+ case 9:
434
+ loadData();
435
+ if (props.onRemoveRow) {
436
+ props.onRemoveRow(selectedRow, XUtils_1.OperationType.Remove);
437
+ }
438
+ _a.label = 10;
439
+ case 10: return [3 /*break*/, 12];
440
+ case 11:
441
+ alert((0, XLocale_1.xLocaleOption)('pleaseSelectRow'));
442
+ _a.label = 12;
443
+ case 12: return [2 /*return*/];
444
+ }
445
+ });
446
+ }); };
447
+ var onClickExport = function () { return __awaiter(void 0, void 0, void 0, function () {
448
+ var findParam, findResult;
449
+ return __generator(this, function (_a) {
450
+ switch (_a.label) {
451
+ case 0:
452
+ findParam = { resultType: FindParam_1.ResultType.OnlyRowCount, first: first, rows: rows, filters: filtersAfterFiltering, customFilter: customFilter, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems };
453
+ return [4 /*yield*/, findByFilter(findParam)];
454
+ case 1:
455
+ findResult = _a.sent();
456
+ //setLoading(false);
457
+ setExportRowsDialogRowCount(findResult.totalRecords); // param pre dialog
458
+ setExportRowsDialogOpened(true);
459
+ return [2 /*return*/];
460
+ }
461
+ });
462
+ }); };
463
+ var createExportParams = function () {
464
+ var queryParam = { filters: filtersAfterFiltering, customFilter: customFilter, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields() };
465
+ return {
466
+ path: "x-lazy-data-table-export",
467
+ queryParam: queryParam,
468
+ headers: getHeaders(),
469
+ fileName: "".concat(props.entity)
470
+ };
471
+ };
472
+ var onClickChoose = function () {
473
+ //console.log("zavolany onClickChoose");
474
+ if (selectedRow !== null) {
475
+ if (props.searchTableParams !== undefined) {
476
+ props.searchTableParams.onChoose(selectedRow);
477
+ }
478
+ }
479
+ else {
480
+ console.log("Nie je vyselectovany ziaden zaznam.");
481
+ }
482
+ };
483
+ // ****** dropdown vo filtri ********
484
+ // pouziva sa len pre simple filtrovanie (filterDisplay="row")
485
+ var onDropdownFilterChange = function (field, displayValue) {
486
+ var filterValue = displayValue !== XUtils_1.XUtils.dropdownEmptyOptionValue ? displayValue : null;
487
+ setFilterValue(field, filterValue, api_1.FilterMatchMode.EQUALS);
488
+ };
489
+ var getDropdownFilterValue = function (field) {
490
+ var filterValue = getFilterValue(field);
491
+ return filterValue !== null ? filterValue : XUtils_1.XUtils.dropdownEmptyOptionValue;
492
+ };
493
+ // ****** vseobecne metodky pre set/get do/z filtra ********
494
+ // zatial funguje len pre simple filtrovanie (filterDisplay="row")
495
+ // vseobecna specialna metodka pouzvana pri custom filtri (XLazyColumn.filterElement)
496
+ var setFilterItem = function (field, filterItem) {
497
+ filters[field] = filterItem;
498
+ // neskusal som, ci treba aj toto klonovat ale pravdepodobne hej
499
+ var filtersCloned = __assign({}, filters);
500
+ setFilters(filtersCloned);
501
+ };
502
+ // vseobecna specialna metodka pouzvana pri custom filtri (XLazyColumn.filterElement)
503
+ var getFilterItem = function (field) {
504
+ return filters[field];
505
+ };
506
+ // vseobecna metodka - nastavi hodnotu do filtra
507
+ // ak je matchMode === undefined, tak zachova povodnu hodnotu matchMode
508
+ var setFilterValue = function (field, value, matchMode) {
509
+ var filterValue = filters[field]; // funguje len pre filterDisplay="row"
510
+ filterValue.value = value;
511
+ if (matchMode !== undefined) {
512
+ filterValue.matchMode = matchMode;
513
+ }
514
+ // treba klonovat, inac react nezobrazi zmenenu hodnotu
515
+ var filtersCloned = __assign({}, filters);
516
+ setFilters(filtersCloned);
517
+ };
518
+ // vseobecna metodka - precita hodnotu z filtra (vrati napr. typ Date | null)
519
+ var getFilterValue = function (field) {
520
+ var filterValue = filters[field]; // funguje len pre filterDisplay="row"
521
+ return filterValue.value;
522
+ };
523
+ // ****** vseobecne metodky pre set/get do/z filtra - pre betweenFilter ********
524
+ // do DataTableFilterMetaData.value ulozime dvojprvkove pole [value1, value2]
525
+ // na backende spracujeme toto dvojprvkove pole
526
+ var setFilterValue1 = function (field, value) {
527
+ // na zaciatku (po inicializacii lazy table) je filterValue = null
528
+ var filterValue = getFilterValue(field);
529
+ if (filterValue !== null) {
530
+ filterValue[0] = value;
531
+ }
532
+ else {
533
+ filterValue = [value, null];
534
+ }
535
+ setFilterValue(field, filterValue, api_1.FilterMatchMode.BETWEEN);
536
+ };
537
+ var setFilterValue2 = function (field, value) {
538
+ // na zaciatku (po inicializacii lazy table) je filterValue = null
539
+ var filterValue = getFilterValue(field);
540
+ if (filterValue !== null) {
541
+ filterValue[1] = value;
542
+ }
543
+ else {
544
+ filterValue = [null, value];
545
+ }
546
+ setFilterValue(field, filterValue, api_1.FilterMatchMode.BETWEEN);
547
+ };
548
+ var getFilterValue1 = function (field) {
549
+ return getFilterValue1or2(field, 0);
550
+ };
551
+ var getFilterValue2 = function (field) {
552
+ return getFilterValue1or2(field, 1);
553
+ };
554
+ var getFilterValue1or2 = function (field, index) {
555
+ var filterValue = getFilterValue(field);
556
+ return filterValue !== null ? filterValue[index] : null;
557
+ };
558
+ var getBetweenFilter = function (columnBetweenFilter, tableBetweenFilter) {
559
+ var betweenFilter = undefined;
560
+ // columnBetweenFilter has higher prio than tableBetweenFilter
561
+ if (columnBetweenFilter !== undefined) {
562
+ if (columnBetweenFilter === "row" || columnBetweenFilter === "column") {
563
+ betweenFilter = columnBetweenFilter;
564
+ }
565
+ // for "noBetween" stays betweenFilter = undefined (simple filter used)
566
+ }
567
+ else {
568
+ betweenFilter = tableBetweenFilter; // betweenFilter from XLazyDataTable property
569
+ }
570
+ return betweenFilter;
571
+ };
572
+ var bodyTemplate = function (columnProps, rowData, xField) {
573
+ var rowDataValue = XUtilsCommon_1.XUtilsCommon.getValueByPath(rowData, columnProps.field);
574
+ var bodyValue = '';
575
+ if (xField.type === "decimal") {
576
+ // tuto zatial hack, mal by vzdy prist number
577
+ var numberValue = null;
578
+ if (typeof rowDataValue === 'string') {
579
+ numberValue = parseFloat(rowDataValue);
580
+ }
581
+ else if (typeof rowDataValue === 'number') {
582
+ numberValue = rowDataValue;
583
+ }
584
+ bodyValue = (0, XUtilsConversions_1.numberAsUI)(numberValue, xField.scale);
585
+ }
586
+ else if (xField.type === "date") {
587
+ // tuto zatial hack, mal by prist Date
588
+ var dateValue = null;
589
+ if (typeof rowDataValue === 'string') {
590
+ dateValue = new Date(rowDataValue);
591
+ }
592
+ else if (typeof rowDataValue === 'object' && rowDataValue instanceof Date) {
593
+ dateValue = rowDataValue;
594
+ }
595
+ bodyValue = (0, XUtilsConversions_1.dateAsUI)(dateValue);
596
+ }
597
+ else if (xField.type === "datetime") {
598
+ // tuto zatial hack, mal by prist Date
599
+ var dateValue = null;
600
+ if (typeof rowDataValue === 'string') {
601
+ dateValue = new Date(rowDataValue);
602
+ }
603
+ else if (typeof rowDataValue === 'object' && rowDataValue instanceof Date) {
604
+ dateValue = rowDataValue;
605
+ }
606
+ bodyValue = (0, XUtilsConversions_1.datetimeAsUI)(dateValue);
607
+ }
608
+ else if (xField.type === "boolean") {
609
+ // TODO - efektivnejsie by bolo renderovat len prislusne ikonky
610
+ bodyValue = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: rowDataValue, disabled: true });
611
+ }
612
+ return bodyValue;
613
+ };
614
+ // ak mame scrollWidth/scrollHeight = viewport (default), vyratame scrollWidth/scrollHeight tak aby tabulka "sadla" do okna (viewport-u)
615
+ var scrollWidth = undefined; // vypnute horizontalne scrollovanie
616
+ var scrollHeight = undefined; // vypnute vertikalne scrollovanie
617
+ if (props.scrollable) {
618
+ if (props.scrollWidth !== "none") {
619
+ scrollWidth = props.scrollWidth;
620
+ if (scrollWidth === "viewport") {
621
+ scrollWidth = 'calc(100vw - 1.4rem)'; // 20px okraje
622
+ }
623
+ }
624
+ if (props.scrollHeight !== "none") {
625
+ scrollHeight = props.scrollHeight;
626
+ if (scrollHeight === "viewport") {
627
+ // vypocet je priblizny, robeny na mobil, desktop bude mat mozno iny
628
+ //const headerHeight = XUtils.toPX0('12.7rem');
629
+ //let footerHeight = XUtils.toPX0('3.7rem') + XUtils.toPX0('3rem'); // table footer (paging) + buttons Add row, Edit, ...
630
+ // na desktope mi nechce odpocitat vysku taskbar-u od window.screen.availHeight, tak to poriesime takymto hack-om:
631
+ // if (!XUtils.isMobile()) {
632
+ // footerHeight += XUtils.toPX0('6rem'); // priblizna vyska taskbaru (ak mam 2 rady buttonov)
633
+ // }
634
+ var viewHeight = void 0;
635
+ var headerFooterHeight = void 0;
636
+ if (props.searchTableParams === undefined) {
637
+ // sme v standardnom formulari
638
+ viewHeight = '100vh';
639
+ // experimentalne zistena vyska header/footer
640
+ // da sa vyratat ako vysku body (celej stranky) - vyska div-u ktory sa scrolluje (div na ktorom je style="max-height: calc(100vh - 266.42px);)
641
+ // (treba odratat vysku paginatora a formFooterHeight (lebo tie sa odratavaju nizsie))
642
+ headerFooterHeight = XUtils_1.XUtils.toPX0('10.89rem');
643
+ }
644
+ else {
645
+ // sme v dialogu
646
+ if (XUtils_1.XUtils.isMobile()) {
647
+ viewHeight = '98vh'; // .p-dialog pre mobil ma max-height: 98%
648
+ headerFooterHeight = XUtils_1.XUtils.toPX0('12.03rem'); // rucne zratane
649
+ }
650
+ else {
651
+ viewHeight = '90vh'; // .p-dialog pre desktop ma max-height: 90%
652
+ headerFooterHeight = XUtils_1.XUtils.toPX0('13.03rem'); // rucne zratane (desktop ma vecsi margin dole na dialogu)
653
+ }
654
+ }
655
+ // pridame vysku paging-u, ak treba
656
+ if (props.paginator) {
657
+ headerFooterHeight += XUtils_1.XUtils.toPX0('3.71rem');
658
+ }
659
+ // este pridame vysku linkov na zdrojaky, ak treba
660
+ if (props.formFooterHeight !== undefined) {
661
+ headerFooterHeight += XUtils_1.XUtils.toPX0(XUtils_1.XUtils.processGridBreakpoints(props.formFooterHeight));
662
+ }
663
+ scrollHeight = "calc(".concat(viewHeight, " - ").concat(headerFooterHeight, "px)");
664
+ }
665
+ }
666
+ }
667
+ var style = {};
668
+ if (scrollWidth !== undefined) {
669
+ style.width = scrollWidth;
670
+ }
671
+ if (props.shrinkWidth) {
672
+ style.maxWidth = 'min-content'; // ak nic nedame (nechame auto), tak (v pripade ak nebudeme mat horizontalny scrollbar) natiahne tabulku na celu sirku stranky, co nechceme
673
+ }
674
+ // pri prechode z Primereact 6.x na 9.x sa tableLayout zmenil z fixed na auto a nefungovalo nastavenie sirok stlpcov - docasne teda takto
675
+ var tableStyle = { tableLayout: 'fixed' };
676
+ if (props.width !== undefined) {
677
+ var width = props.width;
678
+ if (!isNaN(Number(width))) { // if width is number
679
+ width = width + 'rem';
680
+ }
681
+ tableStyle = __assign(__assign({}, tableStyle), { width: width });
682
+ }
683
+ // check
684
+ if ((props.editMode === true || props.editMode === false) && props.editModeHandlers === undefined) {
685
+ throw "XLazyDataTable: for props.editMode = true/false, props.editModeHandlers must be defined.";
686
+ }
687
+ // pouzivame paginatorLeft aj paginatorRight (aj prazdny) pouzivame, aby bol default paginator v strede (bez paginatorLeft je default paginator presunuty dolava a naopak)
688
+ // sirku div-ov este nastavujeme v css na 10rem
689
+ var paginatorLeft = react_1.default.createElement("div", null,
690
+ (0, XLocale_1.xLocaleOption)('totalRecords'),
691
+ ": ",
692
+ value.totalRecords);
693
+ var paginatorRight = react_1.default.createElement("div", null);
694
+ if (props.editMode === true) {
695
+ paginatorRight = react_1.default.createElement("div", null,
696
+ 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" }),
697
+ 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" }));
698
+ }
699
+ else if (props.editMode === false) {
700
+ paginatorRight = react_1.default.createElement("div", null,
701
+ 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" }));
702
+ }
703
+ // else - editMode is undefined - browse is not editable
704
+ // export pre search button-y zatial vypneme
705
+ var exportRows = (props.searchTableParams === undefined);
706
+ // pre lepsiu citatelnost vytvarame stlpce uz tu
707
+ var columnElemList = react_1.default.Children.map(props.children, function (child) {
708
+ // ak chceme zmenit child element, tak treba bud vytvorit novy alebo vyklonovat
709
+ // priklad je na https://soshace.com/building-react-components-using-children-props-and-context-api/
710
+ // (vzdy musime robit manipulacie so stlpcom, lebo potrebujeme pridat filter={true} sortable={true}
711
+ var childColumn = child; // nevedel som to krajsie...
712
+ var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, childColumn.props.field);
713
+ // *********** header ***********
714
+ var headerLabel = childColumn.props.header !== undefined ? childColumn.props.header : childColumn.props.field;
715
+ var header;
716
+ if (props.editMode === true) {
717
+ header = react_1.default.createElement("div", null,
718
+ react_1.default.createElement("div", null,
719
+ react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-plus", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onAddColumn(childColumn.props.field); }, tooltip: "Add column" }),
720
+ 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.onEditColumn(childColumn.props.field); }, tooltip: "Edit column" }),
721
+ react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-trash", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onRemoveColumn(childColumn.props.field); }, tooltip: "Remove column" })),
722
+ react_1.default.createElement("div", null,
723
+ react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-chevron-left", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onMoveColumnLeft(childColumn.props.field); }, tooltip: "Move column left" }),
724
+ react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-chevron-right", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onMoveColumnRight(childColumn.props.field); }, tooltip: "Move column right" })),
725
+ react_1.default.createElement("div", null, headerLabel));
726
+ }
727
+ else {
728
+ header = headerLabel;
729
+ }
730
+ // *********** filterElement ***********
731
+ var betweenFilter = undefined;
732
+ var filterElement;
733
+ if (childColumn.props.filterElement !== undefined) {
734
+ filterElement = function (options) {
735
+ // compilator sa stazoval ze childColumn.props.filterElement moze byt undefined, preto som pridal "!"
736
+ return childColumn.props.filterElement({ getFilterItem: getFilterItem, setFilterItem: setFilterItem, options: options });
737
+ };
738
+ }
739
+ else {
740
+ if (xField.type === "boolean") {
741
+ var checkboxValue = getFilterValue(childColumn.props.field);
742
+ filterElement = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: checkboxValue, onChange: function (e) { return setFilterValue(childColumn.props.field, e.value, api_1.FilterMatchMode.EQUALS); } });
743
+ }
744
+ else if (childColumn.props.dropdownInFilter) {
745
+ var dropdownValue = getDropdownFilterValue(childColumn.props.field);
746
+ filterElement = react_1.default.createElement(XDropdownDTFilter_1.XDropdownDTFilter, { entity: props.entity, path: childColumn.props.field, value: dropdownValue, onValueChange: onDropdownFilterChange });
747
+ }
748
+ else if (xField.type === "date" || xField.type === "datetime") {
749
+ betweenFilter = getBetweenFilter(childColumn.props.betweenFilter, props.betweenFilter);
750
+ if (betweenFilter !== undefined) {
751
+ // display: 'flex' umiestni XCalendar elementy vedla seba
752
+ filterElement =
753
+ react_1.default.createElement("div", { style: betweenFilter === "row" ? { display: 'flex' } : undefined },
754
+ react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value); }, datetime: xField.type === "datetime" }),
755
+ react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value); }, datetime: xField.type === "datetime" }));
756
+ }
757
+ else {
758
+ var dateValue = getFilterValue(childColumn.props.field);
759
+ filterElement = react_1.default.createElement(XCalendar_1.XCalendar, { value: dateValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value); }, datetime: xField.type === "datetime" });
760
+ }
761
+ }
762
+ else if (xField.type === "decimal" || xField.type === "number") {
763
+ var params = XUtilsMetadata_1.XUtilsMetadata.getParamsForInputNumber(xField);
764
+ betweenFilter = getBetweenFilter(childColumn.props.betweenFilter, props.betweenFilter);
765
+ if (betweenFilter !== undefined) {
766
+ // display: 'flex' umiestni input elementy pod seba (betweenFilter = "column") resp. vedla seba (betweenFilter = "row")
767
+ filterElement =
768
+ react_1.default.createElement("div", { style: { display: 'flex', flexDirection: betweenFilter } },
769
+ react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value); } }, params)),
770
+ react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value); } }, params)));
771
+ }
772
+ else {
773
+ var numberValue = getFilterValue(childColumn.props.field);
774
+ filterElement = react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: numberValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value); } }, params));
775
+ }
776
+ }
777
+ }
778
+ // ************** dataType **************
779
+ // depending on the dataType of the column, suitable match modes are displayed in filter
780
+ var dataType = undefined;
781
+ if (xField.type === "decimal" || xField.type === "number") {
782
+ dataType = "numeric";
783
+ }
784
+ else if (xField.type === "date" || xField.type === "datetime") {
785
+ dataType = "date";
786
+ }
787
+ // *********** showFilterMenu ***********
788
+ var showFilterMenu;
789
+ if (childColumn.props.showFilterMenu !== undefined) {
790
+ showFilterMenu = childColumn.props.showFilterMenu;
791
+ }
792
+ else {
793
+ showFilterMenu = true; // default
794
+ if (props.filterDisplay === "row") {
795
+ if (xField.type === "boolean" || childColumn.props.dropdownInFilter || betweenFilter !== undefined) {
796
+ showFilterMenu = false;
797
+ }
798
+ }
799
+ }
800
+ // *********** showClearButton ***********
801
+ // pre filterDisplay = "row" nechceme clear button, chceme setrit miesto
802
+ var showClearButton = props.filterDisplay === "menu";
803
+ // *********** body ***********
804
+ var body;
805
+ if (childColumn.props.body !== undefined) {
806
+ body = childColumn.props.body;
807
+ }
808
+ // TODO - mozno by bolo dobre vytvarat body pre kazdy typ fieldu, nech je to vsetko konzistentne
809
+ else if (xField.type === "decimal" || xField.type === "date" || xField.type === "datetime" || xField.type === "boolean") {
810
+ body = function (rowData) { return bodyTemplate(childColumn.props, rowData, xField); };
811
+ }
812
+ // *********** width/headerStyle ***********
813
+ var width = XUtils_1.XUtils.processPropWidth(childColumn.props.width);
814
+ if (width === undefined || width === "default") {
815
+ // TODO - if filter not used at all, then buttons flags should be false
816
+ var filterMenuInFilterRow = props.filterDisplay === "row" && showFilterMenu;
817
+ var filterButtonInHeader = props.filterDisplay === "menu";
818
+ width = XUtilsMetadata_1.XUtilsMetadata.computeColumnWidth(xField, betweenFilter, filterMenuInFilterRow, undefined, headerLabel, true, filterButtonInHeader);
819
+ }
820
+ var headerStyle = {};
821
+ if (width !== undefined) {
822
+ headerStyle = { width: width };
823
+ }
824
+ // *********** align ***********
825
+ var align = undefined; // default undefined (left)
826
+ if (childColumn.props.align !== undefined && childColumn.props.align !== null) {
827
+ align = childColumn.props.align;
828
+ }
829
+ else {
830
+ // decimal defaultne zarovnavame doprava
831
+ if (xField.type === "decimal") {
832
+ align = "right";
833
+ }
834
+ else if (xField.type === "boolean") {
835
+ align = "center";
836
+ }
837
+ }
838
+ // *********** footer ***********
839
+ var footer = undefined;
840
+ if (childColumn.props.aggregateType && value.aggregateValues) {
841
+ var aggregateValue = value.aggregateValues[childColumn.props.field];
842
+ if (aggregateValue !== undefined && aggregateValue !== null) {
843
+ if (xField.type === "decimal" || xField.type === "number") {
844
+ // v json subore su stringy (cislo v ""), konvertujeme aby sme zmenili 123.45 na 123,45
845
+ aggregateValue = (0, XUtilsConversions_1.numberAsUI)((0, XUtilsConversions_1.numberFromModel)(aggregateValue), xField.scale);
846
+ }
847
+ }
848
+ else {
849
+ aggregateValue = ""; // nemame este nacitane data
850
+ }
851
+ footer = aggregateValue;
852
+ }
853
+ return react_1.default.createElement(column_1.Column, { field: childColumn.props.field, header: header, footer: footer, filter: true, sortable: true, filterElement: filterElement, dataType: dataType, showFilterMenu: showFilterMenu, showClearButton: showClearButton, body: body, headerStyle: headerStyle, align: align });
854
+ });
855
+ return (react_1.default.createElement("div", null,
856
+ react_1.default.createElement("div", { className: "flex justify-content-center" },
857
+ react_1.default.createElement(XButton_1.XButton, { key: "filter", label: (0, XLocale_1.xLocaleOption)('filter'), onClick: onClickFilter }),
858
+ react_1.default.createElement(XButton_1.XButton, { key: "clearFilter", label: (0, XLocale_1.xLocaleOption)('clearFilter'), onClick: onClickClearFilter })),
859
+ react_1.default.createElement("div", { className: "flex justify-content-center" },
860
+ 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)),
861
+ react_1.default.createElement("div", { className: "flex justify-content-center" },
862
+ props.onAddRow !== undefined ? react_1.default.createElement(XButton_1.XButton, { key: "addRow", icon: "pi pi-plus", label: (0, XLocale_1.xLocaleOption)('addRow'), onClick: onClickAddRow }) : null,
863
+ props.onEdit !== undefined ? react_1.default.createElement(XButton_1.XButton, { key: "editRow", icon: "pi pi-pencil", label: (0, XLocale_1.xLocaleOption)('editRow'), onClick: onClickEdit }) : null,
864
+ props.removeRow !== undefined && props.removeRow !== false ? react_1.default.createElement(XButton_1.XButton, { key: "removeRow", icon: "pi pi-times", label: (0, XLocale_1.xLocaleOption)('removeRow'), onClick: onClickRemoveRow }) : null,
865
+ exportRows ? react_1.default.createElement(XButton_1.XButton, { key: "exportRows", icon: "pi pi-file-export", label: (0, XLocale_1.xLocaleOption)('exportRows'), onClick: onClickExport }) : null,
866
+ props.appButtons,
867
+ props.searchTableParams !== undefined ? react_1.default.createElement(XButton_1.XButton, { key: "choose", label: (0, XLocale_1.xLocaleOption)('chooseRow'), onClick: onClickChoose }) : null,
868
+ exportRows ? react_1.default.createElement(XExportRowsDialog_1.XExportRowsDialog, { key: "exportRowsDialog", dialogOpened: exportRowsDialogOpened, hideDialog: function () { return setExportRowsDialogOpened(false); }, rowCount: exportRowsDialogRowCount, exportParams: createExportParams }) : null)));
869
+ };
870
+ exports.XLazyDataTable = XLazyDataTable;
871
+ exports.XLazyDataTable.defaultProps = {
872
+ paginator: true,
873
+ rows: 10,
874
+ filterDisplay: "row",
875
+ scrollable: true,
876
+ scrollWidth: 'viewport',
877
+ scrollHeight: 'viewport',
878
+ shrinkWidth: true
879
+ };
880
+ // TODO - XLazyColumn neni idealny nazov, lepsi je XColumn (ale zatial nechame XLazyColumn)
881
+ var XLazyColumn = function (props) {
882
+ // nevadi ze tu nic nevraciame, field a header vieme precitat a zvysok by sme aj tak zahodili lebo vytvarame novy element
883
+ return (null);
884
+ };
885
+ exports.XLazyColumn = XLazyColumn;