@michalrakus/x-react-web-lib 1.8.0 → 1.10.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 (162) hide show
  1. package/README.md +3 -3
  2. package/XInputInterval.d.ts +3 -0
  3. package/XInputInterval.js +5 -0
  4. package/XInputIntervalBase.d.ts +3 -0
  5. package/XInputIntervalBase.js +5 -0
  6. package/gulpfile.js +84 -82
  7. package/lib/administration/XBrowseMetaBrowse.d.ts +2 -2
  8. package/lib/administration/XBrowseMetaBrowse.js +21 -21
  9. package/lib/administration/XBrowseMetaForm.d.ts +5 -5
  10. package/lib/administration/XBrowseMetaForm.js +63 -63
  11. package/lib/administration/XUserBrowse.d.ts +2 -2
  12. package/lib/administration/XUserBrowse.js +88 -87
  13. package/lib/administration/XUserForm.d.ts +9 -9
  14. package/lib/administration/XUserForm.js +195 -194
  15. package/lib/components/SearchTableParams.d.ts +11 -11
  16. package/lib/components/SearchTableParams.js +2 -2
  17. package/lib/components/SourceCodeLinkEntity.d.ts +4 -4
  18. package/lib/components/SourceCodeLinkEntity.js +14 -14
  19. package/lib/components/XAutoComplete.d.ts +36 -36
  20. package/lib/components/XAutoComplete.js +155 -155
  21. package/lib/components/XAutoCompleteBase.d.ts +45 -45
  22. package/lib/components/XAutoCompleteBase.js +371 -371
  23. package/lib/components/XAutoCompleteDT.d.ts +33 -33
  24. package/lib/components/XAutoCompleteDT.js +140 -140
  25. package/lib/components/XBrowse.d.ts +33 -33
  26. package/lib/components/XBrowse.js +360 -360
  27. package/lib/components/XButton.d.ts +9 -9
  28. package/lib/components/XButton.js +13 -13
  29. package/lib/components/XButtonIconMedium.d.ts +9 -9
  30. package/lib/components/XButtonIconMedium.js +13 -13
  31. package/lib/components/XButtonIconNarrow.d.ts +10 -10
  32. package/lib/components/XButtonIconNarrow.js +25 -25
  33. package/lib/components/XButtonIconSmall.d.ts +9 -9
  34. package/lib/components/XButtonIconSmall.js +13 -13
  35. package/lib/components/XCalendar.d.ts +9 -8
  36. package/lib/components/XCalendar.js +27 -27
  37. package/lib/components/XChangePasswordForm.d.ts +5 -5
  38. package/lib/components/XChangePasswordForm.js +160 -160
  39. package/lib/components/XCheckbox.d.ts +8 -8
  40. package/lib/components/XCheckbox.js +57 -57
  41. package/lib/components/XCheckboxDT.d.ts +10 -10
  42. package/lib/components/XCheckboxDT.js +46 -46
  43. package/lib/components/XDataTable.d.ts +11 -11
  44. package/lib/components/XDataTable.js +197 -197
  45. package/lib/components/XDropdown.d.ts +18 -18
  46. package/lib/components/XDropdown.js +57 -57
  47. package/lib/components/XDropdownDT.d.ts +16 -13
  48. package/lib/components/XDropdownDT.js +135 -128
  49. package/lib/components/XDropdownDTFilter.d.ts +7 -7
  50. package/lib/components/XDropdownDTFilter.js +121 -121
  51. package/lib/components/XDropdownForEntity.d.ts +26 -25
  52. package/lib/components/XDropdownForEntity.js +151 -149
  53. package/lib/components/XDropdownFormDTFilter.d.ts +7 -7
  54. package/lib/components/XDropdownFormDTFilter.js +121 -121
  55. package/lib/components/XEditColumnDialog.d.ts +13 -13
  56. package/lib/components/XEditColumnDialog.js +112 -112
  57. package/lib/components/XEnvVars.d.ts +15 -12
  58. package/lib/components/XEnvVars.js +23 -20
  59. package/lib/components/XErrors.d.ts +12 -12
  60. package/lib/components/XErrors.js +2 -2
  61. package/lib/components/XExportRowsDialog.d.ts +15 -15
  62. package/lib/components/XExportRowsDialog.js +184 -184
  63. package/lib/components/XFieldChangeEvent.d.ts +11 -11
  64. package/lib/components/XFieldChangeEvent.js +2 -2
  65. package/lib/components/XFieldSelector.d.ts +7 -7
  66. package/lib/components/XFieldSelector.js +113 -113
  67. package/lib/components/XFormBase.d.ts +68 -59
  68. package/lib/components/XFormBase.js +613 -526
  69. package/lib/components/XFormBaseModif.d.ts +5 -5
  70. package/lib/components/XFormBaseModif.js +33 -33
  71. package/lib/components/XFormBaseT.d.ts +4 -4
  72. package/lib/components/XFormBaseT.js +31 -31
  73. package/lib/components/XFormComponent.d.ts +40 -40
  74. package/lib/components/XFormComponent.js +177 -177
  75. package/lib/components/XFormComponentDT.d.ts +30 -30
  76. package/lib/components/XFormComponentDT.js +145 -145
  77. package/lib/components/XFormDataTable2.d.ts +144 -143
  78. package/lib/components/XFormDataTable2.js +679 -686
  79. package/lib/components/XFormFooter.d.ts +6 -6
  80. package/lib/components/XFormFooter.js +19 -19
  81. package/lib/components/XFormNavigator3.d.ts +12 -12
  82. package/lib/components/XFormNavigator3.js +130 -130
  83. package/lib/components/XHolders.d.ts +7 -7
  84. package/lib/components/XHolders.js +15 -15
  85. package/lib/components/XInput.d.ts +13 -13
  86. package/lib/components/XInput.js +38 -38
  87. package/lib/components/XInputDT.d.ts +11 -11
  88. package/lib/components/XInputDT.js +37 -37
  89. package/lib/components/XInputDate.d.ts +13 -13
  90. package/lib/components/XInputDate.js +63 -63
  91. package/lib/components/XInputDateDT.d.ts +10 -10
  92. package/lib/components/XInputDateDT.js +55 -55
  93. package/lib/components/XInputDecimal.d.ts +15 -15
  94. package/lib/components/XInputDecimal.js +78 -78
  95. package/lib/components/XInputDecimalBase.d.ts +12 -12
  96. package/lib/components/XInputDecimalBase.js +18 -18
  97. package/lib/components/XInputDecimalDT.d.ts +11 -11
  98. package/lib/components/XInputDecimalDT.js +74 -74
  99. package/lib/components/XInputFileList.d.ts +36 -36
  100. package/lib/components/XInputFileList.js +251 -251
  101. package/lib/components/XInputInterval.d.ts +14 -0
  102. package/lib/components/XInputInterval.js +56 -0
  103. package/lib/components/XInputIntervalBase.d.ts +10 -0
  104. package/lib/components/XInputIntervalBase.js +97 -0
  105. package/lib/components/XInputIntervalDT.d.ts +11 -0
  106. package/lib/components/XInputIntervalDT.js +43 -0
  107. package/lib/components/XInputText.d.ts +12 -12
  108. package/lib/components/XInputText.js +69 -69
  109. package/lib/components/XInputTextDT.d.ts +9 -9
  110. package/lib/components/XInputTextDT.js +42 -42
  111. package/lib/components/XInputTextarea.d.ts +18 -18
  112. package/lib/components/XInputTextarea.js +85 -85
  113. package/lib/components/XLazyDataTable.d.ts +78 -78
  114. package/lib/components/XLazyDataTable.js +899 -885
  115. package/lib/components/XLocale.d.ts +26 -26
  116. package/lib/components/XLocale.js +59 -59
  117. package/lib/components/XLoginDialog.d.ts +8 -8
  118. package/lib/components/XLoginDialog.js +21 -21
  119. package/lib/components/XLoginForm.d.ts +7 -7
  120. package/lib/components/XLoginForm.js +128 -128
  121. package/lib/components/XObject.d.ts +3 -3
  122. package/lib/components/XObject.js +2 -2
  123. package/lib/components/XResponseError.d.ts +11 -11
  124. package/lib/components/XResponseError.js +32 -32
  125. package/lib/components/XSearchButton.d.ts +26 -26
  126. package/lib/components/XSearchButton.js +225 -225
  127. package/lib/components/XSearchButtonDT.d.ts +12 -12
  128. package/lib/components/XSearchButtonDT.js +188 -188
  129. package/lib/components/XSearchButtonOld.d.ts +13 -13
  130. package/lib/components/XSearchButtonOld.js +212 -212
  131. package/lib/components/XToOneAssocButton.d.ts +8 -8
  132. package/lib/components/XToOneAssocButton.js +30 -30
  133. package/lib/components/XToken.d.ts +6 -6
  134. package/lib/components/XToken.js +2 -2
  135. package/lib/components/XUtils.d.ts +84 -74
  136. package/lib/components/XUtils.js +664 -627
  137. package/lib/components/XUtilsConversions.d.ts +15 -12
  138. package/lib/components/XUtilsConversions.js +177 -125
  139. package/lib/components/XUtilsMetadata.d.ts +39 -39
  140. package/lib/components/XUtilsMetadata.js +452 -452
  141. package/lib/components/locale/x-en.json +26 -26
  142. package/lib/components/useXToken.d.ts +2 -2
  143. package/lib/components/useXToken.js +44 -44
  144. package/lib/serverApi/ExportImportParam.d.ts +51 -51
  145. package/lib/serverApi/ExportImportParam.js +34 -34
  146. package/lib/serverApi/FindParam.d.ts +35 -34
  147. package/lib/serverApi/FindParam.js +30 -30
  148. package/lib/serverApi/FindResult.d.ts +8 -8
  149. package/lib/serverApi/FindResult.js +2 -2
  150. package/lib/serverApi/XBrowseMetadata.d.ts +19 -19
  151. package/lib/serverApi/XBrowseMetadata.js +2 -2
  152. package/lib/serverApi/XEntityMetadata.d.ts +35 -35
  153. package/lib/serverApi/XEntityMetadata.js +2 -2
  154. package/lib/serverApi/XFileJsonField.d.ts +6 -6
  155. package/lib/serverApi/XFileJsonField.js +2 -2
  156. package/lib/serverApi/XUser.d.ts +8 -7
  157. package/lib/serverApi/XUser.js +2 -2
  158. package/lib/serverApi/XUserAuthenticationIfc.d.ts +9 -9
  159. package/lib/serverApi/XUserAuthenticationIfc.js +2 -2
  160. package/lib/serverApi/XUtilsCommon.d.ts +14 -13
  161. package/lib/serverApi/XUtilsCommon.js +180 -110
  162. package/package.json +1 -1
@@ -1,686 +1,679 @@
1
- "use strict";
2
- var __extends = (this && this.__extends) || (function () {
3
- var extendStatics = function (d, b) {
4
- extendStatics = Object.setPrototypeOf ||
5
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
- return extendStatics(d, b);
8
- };
9
- return function (d, b) {
10
- if (typeof b !== "function" && b !== null)
11
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
- extendStatics(d, b);
13
- function __() { this.constructor = d; }
14
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
- };
16
- })();
17
- var __assign = (this && this.__assign) || function () {
18
- __assign = Object.assign || function(t) {
19
- for (var s, i = 1, n = arguments.length; i < n; i++) {
20
- s = arguments[i];
21
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
- t[p] = s[p];
23
- }
24
- return t;
25
- };
26
- return __assign.apply(this, arguments);
27
- };
28
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
29
- if (k2 === undefined) k2 = k;
30
- var desc = Object.getOwnPropertyDescriptor(m, k);
31
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
32
- desc = { enumerable: true, get: function() { return m[k]; } };
33
- }
34
- Object.defineProperty(o, k2, desc);
35
- }) : (function(o, m, k, k2) {
36
- if (k2 === undefined) k2 = k;
37
- o[k2] = m[k];
38
- }));
39
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
40
- Object.defineProperty(o, "default", { enumerable: true, value: v });
41
- }) : function(o, v) {
42
- o["default"] = v;
43
- });
44
- var __importStar = (this && this.__importStar) || function (mod) {
45
- if (mod && mod.__esModule) return mod;
46
- var result = {};
47
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
48
- __setModuleDefault(result, mod);
49
- return result;
50
- };
51
- var __values = (this && this.__values) || function(o) {
52
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
53
- if (m) return m.call(o);
54
- if (o && typeof o.length === "number") return {
55
- next: function () {
56
- if (o && i >= o.length) o = void 0;
57
- return { value: o && o[i++], done: !o };
58
- }
59
- };
60
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
61
- };
62
- Object.defineProperty(exports, "__esModule", { value: true });
63
- exports.XFormSearchButtonColumn = exports.XFormAutoCompleteColumn = exports.XFormDropdownColumn = exports.XFormColumn = exports.XFormDataTable2 = void 0;
64
- var XFormBase_1 = require("./XFormBase");
65
- var react_1 = __importStar(require("react"));
66
- var XDropdownDT_1 = require("./XDropdownDT");
67
- var datatable_1 = require("primereact/datatable");
68
- var column_1 = require("primereact/column");
69
- var XButton_1 = require("./XButton");
70
- var XInputTextDT_1 = require("./XInputTextDT");
71
- var XSearchButtonDT_1 = require("./XSearchButtonDT");
72
- var XUtilsMetadata_1 = require("./XUtilsMetadata");
73
- var XUtils_1 = require("./XUtils");
74
- var XDropdownDTFilter_1 = require("./XDropdownDTFilter");
75
- var XInputDecimalDT_1 = require("./XInputDecimalDT");
76
- var XInputDateDT_1 = require("./XInputDateDT");
77
- var XCheckboxDT_1 = require("./XCheckboxDT");
78
- var tristatecheckbox_1 = require("primereact/tristatecheckbox");
79
- var api_1 = require("primereact/api");
80
- var XAutoCompleteDT_1 = require("./XAutoCompleteDT");
81
- var XButtonIconNarrow_1 = require("./XButtonIconNarrow");
82
- var XLocale_1 = require("./XLocale");
83
- var XFormDataTable2 = /** @class */ (function (_super) {
84
- __extends(XFormDataTable2, _super);
85
- function XFormDataTable2(props) {
86
- var e_1, _a;
87
- var _this = _super.call(this, props) || this;
88
- _this.props = props;
89
- _this.dataKey = props.dataKey;
90
- var xEntityForm = XUtilsMetadata_1.XUtilsMetadata.getXEntity(props.form.getEntity());
91
- var xAssocToMany = XUtilsMetadata_1.XUtilsMetadata.getXAssocToMany(xEntityForm, props.assocField);
92
- _this.entity = xAssocToMany.entityName;
93
- if (_this.dataKey === undefined) {
94
- _this.dataKey = XUtilsMetadata_1.XUtilsMetadata.getXEntity(_this.entity).idField;
95
- }
96
- _this.state = {
97
- selectedRow: undefined,
98
- dropdownOptionsMap: {},
99
- filters: _this.createInitFilters()
100
- };
101
- _this.onClickAddRow = _this.onClickAddRow.bind(_this);
102
- _this.onClickRemoveRowBySelection = _this.onClickRemoveRowBySelection.bind(_this);
103
- _this.removeRow = _this.removeRow.bind(_this);
104
- _this.onSelectionChange = _this.onSelectionChange.bind(_this);
105
- _this.onDropdownOptionsMapChange = _this.onDropdownOptionsMapChange.bind(_this);
106
- _this.onFilter = _this.onFilter.bind(_this);
107
- _this.onCheckboxFilterChange = _this.onCheckboxFilterChange.bind(_this);
108
- _this.getCheckboxFilterValue = _this.getCheckboxFilterValue.bind(_this);
109
- _this.onDropdownFilterChange = _this.onDropdownFilterChange.bind(_this);
110
- _this.getDropdownFilterValue = _this.getDropdownFilterValue.bind(_this);
111
- _this.bodyTemplate = _this.bodyTemplate.bind(_this);
112
- props.form.addXFormDataTable(_this);
113
- try {
114
- //props.form.addField(props.assocField + '.*FAKE*'); - vzdy mame aspon 1 field, nie je to potrebne
115
- for (var _b = __values(props.children), _c = _b.next(); !_c.done; _c = _b.next()) {
116
- var child = _c.value;
117
- var childColumn = child; // nevedel som to krajsie...
118
- var field = props.assocField + '.' + _this.getPathForColumn(childColumn.props);
119
- props.form.addField(field);
120
- }
121
- }
122
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
123
- finally {
124
- try {
125
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
126
- }
127
- finally { if (e_1) throw e_1.error; }
128
- }
129
- return _this;
130
- }
131
- XFormDataTable2.prototype.getPathForColumn = function (columnProps) {
132
- if (columnProps.type === "inputSimple") {
133
- var columnPropsInputSimple = columnProps;
134
- return columnPropsInputSimple.field;
135
- }
136
- else if (columnProps.type === "dropdown") {
137
- var columnPropsDropdown = columnProps;
138
- return columnPropsDropdown.assocField + '.' + columnPropsDropdown.displayField;
139
- }
140
- else if (columnProps.type === "autoComplete") {
141
- var columnPropsAutoComplete = columnProps;
142
- return columnPropsAutoComplete.assocField + '.' + this.getDisplayFieldOrId(columnPropsAutoComplete);
143
- }
144
- else if (columnProps.type === "searchButton") {
145
- var columnPropsSearchButton = columnProps;
146
- return columnPropsSearchButton.assocField + '.' + columnPropsSearchButton.displayField;
147
- }
148
- else {
149
- throw "Unknown prop type = " + columnProps.type;
150
- }
151
- };
152
- XFormDataTable2.prototype.getDisplayFieldOrId = function (columnPropsAutoComplete) {
153
- // toto je hack - ak ratame displayField cez funkciu, tak nam potom v kode chyba (hociaky) atribut asociovaneho objektu
154
- // aby sme nemuseli robit nejake velke prerabky a zmeny, tak podsunieme id-ckovy atribut
155
- if (typeof columnPropsAutoComplete.displayField === 'string') {
156
- return columnPropsAutoComplete.displayField; // vsetko ok
157
- }
158
- else {
159
- // v displayField mame funkciu, zistime id-ckovy atribut
160
- // TODO - problem - sortovanie/filtrovanie bude fungovat podla tohto id atributu
161
- var xAssoc = XUtilsMetadata_1.XUtilsMetadata.getXAssocToOne(XUtilsMetadata_1.XUtilsMetadata.getXEntity(this.getEntity()), columnPropsAutoComplete.assocField);
162
- return XUtilsMetadata_1.XUtilsMetadata.getXEntity(xAssoc.entityName).idField;
163
- }
164
- };
165
- XFormDataTable2.getHeader = function (columnProps, xEntity, field, xField) {
166
- var _a, _b, _c, _d;
167
- // poznamky - parametre field a xField by sme mohli vyratavat na zaklade columnProps ale kedze ich uz mame, setrime performance a neduplikujeme vypocet
168
- // nie je to tu uplne idealne nakodene, ale je to pomerne prehladne
169
- var isNullable = true;
170
- var readOnly = false;
171
- if (columnProps.type === "inputSimple") {
172
- var columnPropsInputSimple = columnProps;
173
- isNullable = xField.isNullable;
174
- readOnly = XUtils_1.XUtils.isReadOnly(columnPropsInputSimple.field, columnProps.readOnly);
175
- }
176
- else if (columnProps.type === "dropdown") {
177
- var columnPropsDropdown = columnProps;
178
- var xAssoc = XUtilsMetadata_1.XUtilsMetadata.getXAssocToOne(xEntity, columnPropsDropdown.assocField);
179
- isNullable = xAssoc.isNullable;
180
- readOnly = (_a = columnProps.readOnly) !== null && _a !== void 0 ? _a : false;
181
- }
182
- else if (columnProps.type === "autoComplete") {
183
- var columnPropsAutoComplete = columnProps;
184
- var xAssoc = XUtilsMetadata_1.XUtilsMetadata.getXAssocToOne(xEntity, columnPropsAutoComplete.assocField);
185
- isNullable = xAssoc.isNullable;
186
- readOnly = (_b = columnProps.readOnly) !== null && _b !== void 0 ? _b : false;
187
- }
188
- else if (columnProps.type === "searchButton") {
189
- var columnPropsSearchButton = columnProps;
190
- var xAssoc = XUtilsMetadata_1.XUtilsMetadata.getXAssocToOne(xEntity, columnPropsSearchButton.assocField);
191
- isNullable = xAssoc.isNullable;
192
- readOnly = (_c = columnProps.readOnly) !== null && _c !== void 0 ? _c : false;
193
- }
194
- else {
195
- throw "Unknown prop type = " + columnProps.type;
196
- }
197
- var header = (_d = columnProps.header) !== null && _d !== void 0 ? _d : field;
198
- if (!isNullable && !readOnly) {
199
- header = XUtils_1.XUtils.markNotNull(header);
200
- }
201
- return header;
202
- };
203
- XFormDataTable2.prototype.getEntity = function () {
204
- if (this.entity === undefined) {
205
- throw "Unexpected error: this.entity is undefined";
206
- }
207
- return this.entity;
208
- };
209
- XFormDataTable2.prototype.createInitFilters = function () {
210
- var e_2, _a;
211
- var initFilters = {};
212
- if (this.props.filterDisplay === "none") {
213
- return initFilters;
214
- }
215
- var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(this.getEntity());
216
- try {
217
- // TODO - asi by bolo fajn si tieto field, xField niekam ulozit a iterovat ulozene hodnoty, pouziva sa to na viacerych miestach
218
- for (var _b = __values(this.props.children), _c = _b.next(); !_c.done; _c = _b.next()) {
219
- var child = _c.value;
220
- var childColumn = child; // nevedel som to krajsie...
221
- var field = this.getPathForColumn(childColumn.props);
222
- var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, field);
223
- // TODO column.props.dropdownInFilter - pre "menu" by bolo fajn mat zoznam "enumov"
224
- var filterMatchMode = this.getFilterMatchMode(xField);
225
- var filterItem = void 0;
226
- if (this.props.filterDisplay === "menu") {
227
- // DataTableOperatorFilterMetaData: operator + filter values
228
- filterItem = {
229
- operator: api_1.FilterOperator.OR,
230
- constraints: [{ value: null, matchMode: filterMatchMode }]
231
- };
232
- }
233
- else {
234
- // props.filterDisplay === "row"
235
- // DataTableFilterMetaData: filter value
236
- filterItem = { value: null, matchMode: filterMatchMode };
237
- }
238
- initFilters[field] = filterItem;
239
- }
240
- }
241
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
242
- finally {
243
- try {
244
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
245
- }
246
- finally { if (e_2) throw e_2.error; }
247
- }
248
- return initFilters;
249
- };
250
- XFormDataTable2.prototype.getFilterMatchMode = function (xField) {
251
- var filterMatchMode;
252
- if (xField.type === "string") {
253
- filterMatchMode = api_1.FilterMatchMode.STARTS_WITH;
254
- }
255
- // zatial vsetky ostatne EQUALS
256
- else if (xField.type === "decimal" || xField.type === "number" || xField.type === "date" || xField.type === "datetime" || xField.type === "boolean") {
257
- filterMatchMode = api_1.FilterMatchMode.EQUALS;
258
- }
259
- else {
260
- throw "XField ".concat(xField.name, ": unknown xField.type = ").concat(xField.type);
261
- }
262
- return filterMatchMode;
263
- };
264
- XFormDataTable2.prototype.onSelectionChange = function (event) {
265
- //console.log("zavolany onSelectionChange");
266
- //console.log(event.value);
267
- this.setState({ selectedRow: event.value });
268
- };
269
- XFormDataTable2.prototype.onDropdownOptionsMapChange = function (dropdownOptionsMap) {
270
- this.setState({ dropdownOptionsMap: dropdownOptionsMap });
271
- };
272
- XFormDataTable2.prototype.onFilter = function (event) {
273
- //console.log("zavolany onFilter - this.state.filters = " + JSON.stringify(this.state.filters));
274
- //console.log("zavolany onFilter - event.filters = " + JSON.stringify(event.filters));
275
- // tymto zavolanim sa zapise znak zapisany klavesnicou do inputu filtra (ak prikaz zakomentujeme, input filtra zostane prazdny)
276
- this.setState({ filters: event.filters });
277
- };
278
- XFormDataTable2.prototype.onCheckboxFilterChange = function (field, checkboxValue) {
279
- // TODO - treba vyklonovat?
280
- var filtersCloned = __assign({}, this.state.filters);
281
- if (checkboxValue !== null) {
282
- filtersCloned[field] = { value: checkboxValue ? "true" : "false", matchMode: api_1.FilterMatchMode.EQUALS };
283
- }
284
- else {
285
- // pouzivatel zrusil hodnotu vo filtri (vybral prazdny stav v checkboxe), zrusime polozku z filtra
286
- //delete filtersCloned[field];
287
- filtersCloned[field] = { value: null, matchMode: api_1.FilterMatchMode.EQUALS };
288
- }
289
- this.setState({ filters: filtersCloned });
290
- };
291
- XFormDataTable2.prototype.getCheckboxFilterValue = function (field) {
292
- var checkboxValue = null;
293
- var filterValue = this.state.filters[field];
294
- if (filterValue !== undefined && filterValue !== null) {
295
- if (filterValue.value === 'true') {
296
- checkboxValue = true;
297
- }
298
- else if (filterValue.value === 'false') {
299
- checkboxValue = false;
300
- }
301
- }
302
- return checkboxValue;
303
- };
304
- XFormDataTable2.prototype.onDropdownFilterChange = function (field, displayValue) {
305
- // TODO - treba vyklonovat?
306
- var filtersCloned = __assign({}, this.state.filters);
307
- if (displayValue !== XUtils_1.XUtils.dropdownEmptyOptionValue) {
308
- filtersCloned[field] = { value: displayValue, matchMode: api_1.FilterMatchMode.EQUALS };
309
- }
310
- else {
311
- // pouzivatel zrusil hodnotu vo filtri (vybral prazdny riadok), zrusime polozku z filtra
312
- //delete filtersCloned[field];
313
- filtersCloned[field] = { value: null, matchMode: api_1.FilterMatchMode.EQUALS };
314
- }
315
- this.setState({ filters: filtersCloned });
316
- };
317
- XFormDataTable2.prototype.getDropdownFilterValue = function (field) {
318
- var dropdownValue = XUtils_1.XUtils.dropdownEmptyOptionValue;
319
- var filterValue = this.state.filters[field];
320
- if (filterValue !== undefined && filterValue !== null) {
321
- if (filterValue.value !== null) {
322
- dropdownValue = filterValue.value;
323
- }
324
- }
325
- return dropdownValue;
326
- };
327
- /* pravdepodobne zombie
328
- onBodyValueChange (field: string, rowData: any, newValue: any) {
329
- //console.log("onBodyValueChange");
330
-
331
- // zmenime hodnotu v modeli (odtial sa hodnota cita)
332
- rowData[field] = newValue;
333
- // kedze "rowData" je sucastou "props.form.state.object", tak nam staci zavolat setState({object: object}), aby sa zmena prejavila
334
- this.props.form.onObjectDataChange();
335
- }
336
- */
337
- // body={(rowData: any) => bodyTemplate(childColumn.props.field, rowData)}
338
- XFormDataTable2.prototype.bodyTemplate = function (columnProps, tableReadOnly, rowData, xEntity) {
339
- var _a, _b;
340
- var body;
341
- if (columnProps.type === "inputSimple") {
342
- var columnPropsInputSimple = columnProps;
343
- // tableReadOnly has higher prio then property readOnly
344
- var readOnly = tableReadOnly || ((_a = columnPropsInputSimple.readOnly) !== null && _a !== void 0 ? _a : false);
345
- var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, columnPropsInputSimple.field);
346
- if (xField.type === "decimal" || xField.type === "number") {
347
- body = react_1.default.createElement(XInputDecimalDT_1.XInputDecimalDT, { form: this.props.form, entity: this.getEntity(), field: columnPropsInputSimple.field, rowData: rowData, readOnly: readOnly, onChange: columnPropsInputSimple.onChange });
348
- }
349
- else if (xField.type === "date" || xField.type === "datetime") {
350
- body = react_1.default.createElement(XInputDateDT_1.XInputDateDT, { form: this.props.form, xField: xField, field: columnPropsInputSimple.field, rowData: rowData, readOnly: readOnly });
351
- }
352
- else if (xField.type === "boolean") {
353
- body = react_1.default.createElement(XCheckboxDT_1.XCheckboxDT, { form: this.props.form, xField: xField, field: columnPropsInputSimple.field, rowData: rowData, readOnly: readOnly });
354
- }
355
- else {
356
- // xField.type === "string", pripadne ine jednoduche typy
357
- body = react_1.default.createElement(XInputTextDT_1.XInputTextDT, { form: this.props.form, entity: this.getEntity(), field: columnPropsInputSimple.field, rowData: rowData, readOnly: readOnly });
358
- }
359
- }
360
- else if (columnProps.type === "dropdown") {
361
- var columnPropsDropdown = columnProps;
362
- body = react_1.default.createElement(XDropdownDT_1.XDropdownDT, { form: this.props.form, entity: this.getEntity(), assocField: columnPropsDropdown.assocField, displayField: columnPropsDropdown.displayField, dropdownOptionsMap: this.state.dropdownOptionsMap, onDropdownOptionsMapChange: this.onDropdownOptionsMapChange, rowData: rowData });
363
- }
364
- else if (columnProps.type === "autoComplete") {
365
- var columnPropsAutoComplete = columnProps;
366
- // tableReadOnly has higher prio then property readOnly
367
- var readOnly = tableReadOnly || ((_b = columnPropsAutoComplete.readOnly) !== null && _b !== void 0 ? _b : false);
368
- body = react_1.default.createElement(XAutoCompleteDT_1.XAutoCompleteDT, { form: this.props.form, entity: this.getEntity(), assocField: columnPropsAutoComplete.assocField, displayField: columnPropsAutoComplete.displayField, searchTable: columnPropsAutoComplete.searchTable, assocForm: columnPropsAutoComplete.assocForm, filter: columnPropsAutoComplete.filter, rowData: rowData, readOnly: readOnly });
369
- }
370
- else if (columnProps.type === "searchButton") {
371
- var columnPropsSearchButton = columnProps;
372
- body = react_1.default.createElement(XSearchButtonDT_1.XSearchButtonDT, { form: this.props.form, entity: this.getEntity(), assocField: columnPropsSearchButton.assocField, displayField: columnPropsSearchButton.displayField, searchTable: columnPropsSearchButton.searchTable, rowData: rowData, readOnly: columnPropsSearchButton.readOnly });
373
- }
374
- else {
375
- throw "Unknown prop type = " + columnProps.type;
376
- }
377
- return body;
378
- };
379
- XFormDataTable2.prototype.onClickAddRow = function () {
380
- if (this.props.onClickAddRow) {
381
- // custom add row
382
- this.props.onClickAddRow();
383
- }
384
- else {
385
- // default add row
386
- this.props.form.onTableAddRow(this.props.assocField, {}, this.dataKey, this.state.selectedRow);
387
- }
388
- };
389
- ;
390
- XFormDataTable2.prototype.onClickRemoveRowBySelection = function () {
391
- if (this.state.selectedRow !== undefined) {
392
- this.removeRow(this.state.selectedRow);
393
- }
394
- else {
395
- alert("Please select the row.");
396
- }
397
- };
398
- ;
399
- XFormDataTable2.prototype.removeRow = function (row) {
400
- if (this.props.onClickRemoveRow) {
401
- // custom remove
402
- this.props.onClickRemoveRow(row);
403
- }
404
- else {
405
- // default remove
406
- this.props.form.onTableRemoveRow(this.props.assocField, row);
407
- }
408
- };
409
- XFormDataTable2.prototype.validate = function () {
410
- var e_3, _a, e_4, _b;
411
- // zvalidujeme vsetky rows a pripadne chyby zapiseme do specialneho fieldu __x_rowTechData
412
- var object = this.props.form.getXObject();
413
- var rowList = object[this.props.assocField];
414
- try {
415
- for (var rowList_1 = __values(rowList), rowList_1_1 = rowList_1.next(); !rowList_1_1.done; rowList_1_1 = rowList_1.next()) {
416
- var row = rowList_1_1.value;
417
- var xRowTechData = XFormBase_1.XFormBase.getXRowTechData(row);
418
- var xErrorMap = {};
419
- try {
420
- for (var _c = (e_4 = void 0, __values(xRowTechData.xFormComponentDTList)), _d = _c.next(); !_d.done; _d = _c.next()) {
421
- var xFormComponentDT = _d.value;
422
- var errorItem = xFormComponentDT.validate();
423
- if (errorItem) {
424
- //console.log("Mame field = " + errorItem.field);
425
- xErrorMap[errorItem.field] = errorItem.xError;
426
- }
427
- }
428
- }
429
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
430
- finally {
431
- try {
432
- if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
433
- }
434
- finally { if (e_4) throw e_4.error; }
435
- }
436
- xRowTechData.errorMap = xErrorMap;
437
- }
438
- }
439
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
440
- finally {
441
- try {
442
- if (rowList_1_1 && !rowList_1_1.done && (_a = rowList_1.return)) _a.call(rowList_1);
443
- }
444
- finally { if (e_3) throw e_3.error; }
445
- }
446
- };
447
- XFormDataTable2.prototype.getErrorMessages = function () {
448
- var e_5, _a;
449
- var msg = "";
450
- var object = this.props.form.getXObject();
451
- var rowList = object[this.props.assocField];
452
- try {
453
- for (var rowList_2 = __values(rowList), rowList_2_1 = rowList_2.next(); !rowList_2_1.done; rowList_2_1 = rowList_2.next()) {
454
- var row = rowList_2_1.value;
455
- var xRowTechData = XFormBase_1.XFormBase.getXRowTechData(row);
456
- msg += XUtils_1.XUtils.getErrorMessages(xRowTechData.errorMap);
457
- }
458
- }
459
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
460
- finally {
461
- try {
462
- if (rowList_2_1 && !rowList_2_1.done && (_a = rowList_2.return)) _a.call(rowList_2);
463
- }
464
- finally { if (e_5) throw e_5.error; }
465
- }
466
- return msg;
467
- };
468
- // TODO - velmi podobna funkcia ako XFormComponent.isReadOnly() - zjednotit ak sa da
469
- XFormDataTable2.prototype.isReadOnly = function () {
470
- var readOnly;
471
- // the purpose of formReadOnly is to put the whole form to read only mode,
472
- // that's why the formReadOnly has higher prio then property this.props.readOnly
473
- if (this.props.form.formReadOnlyBase(this.props.assocField)) {
474
- readOnly = true;
475
- }
476
- else if (typeof this.props.readOnly === 'boolean') {
477
- readOnly = this.props.readOnly;
478
- }
479
- // TODO
480
- // else if (typeof this.props.readOnly === 'function') {
481
- // // TODO - tazko povedat ci niekedy bude object === null (asi ano vid metodu getFilterBase)
482
- // const object: XObject = this.props.form.state.object;
483
- // if (object) {
484
- // readOnly = this.props.readOnly(this.props.form.getXObject());
485
- // }
486
- // else {
487
- // readOnly = true;
488
- // }
489
- // }
490
- else {
491
- // readOnly is undefined
492
- readOnly = false;
493
- }
494
- return readOnly;
495
- };
496
- XFormDataTable2.prototype.render = function () {
497
- var _this = this;
498
- var _a, _b;
499
- var paginator = this.props.paginator !== undefined ? this.props.paginator : false;
500
- var rows = undefined;
501
- if (paginator) {
502
- if (this.props.rows !== undefined) {
503
- rows = this.props.rows;
504
- }
505
- else {
506
- rows = 5; // default
507
- }
508
- }
509
- var filterDisplay = this.props.filterDisplay !== "none" ? this.props.filterDisplay : undefined;
510
- var label = this.props.label !== undefined ? this.props.label : this.props.assocField;
511
- var readOnly = this.isReadOnly();
512
- // v bloku function (child) nejde pouzit priamo this, thisLocal uz ide pouzit
513
- var thisLocal = this;
514
- var object = this.props.form.state.object;
515
- var valueList = object !== null ? object[this.props.assocField] : [];
516
- var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(this.getEntity());
517
- var scrollWidth = undefined; // vypnute horizontalne scrollovanie
518
- var scrollHeight = undefined; // vypnute vertikalne scrollovanie
519
- if (this.props.scrollable) {
520
- if (this.props.scrollWidth !== "none") {
521
- scrollWidth = this.props.scrollWidth;
522
- }
523
- if (this.props.scrollHeight !== "none") {
524
- scrollHeight = this.props.scrollHeight;
525
- }
526
- }
527
- var style = {};
528
- if (scrollWidth !== undefined) {
529
- style.width = scrollWidth;
530
- }
531
- if (this.props.shrinkWidth) {
532
- 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
533
- }
534
- // pri prechode z Primereact 6.x na 9.x sa tableLayout zmenil z fixed na auto a nefungovalo nastavenie sirok stlpcov - docasne teda takto
535
- var tableStyle = { tableLayout: 'fixed' };
536
- if (this.props.width !== undefined) {
537
- var width = this.props.width;
538
- if (!isNaN(Number(width))) { // if width is number
539
- width = width + 'rem';
540
- }
541
- tableStyle = __assign(__assign({}, tableStyle), { width: width });
542
- }
543
- // pre lepsiu citatelnost vytvarame stlpce uz tu
544
- var columnElemList = react_1.default.Children.map(this.props.children, function (child) {
545
- // ak chceme zmenit child element, tak treba bud vytvorit novy alebo vyklonovat
546
- // priklad je na https://soshace.com/building-react-components-using-children-props-and-context-api/
547
- // (vzdy musime robit manipulacie so stlpcom, lebo potrebujeme pridat filter={true} sortable={true}
548
- var childColumn = child; // nevedel som to krajsie...
549
- var childColumnProps = childColumn.props;
550
- // je dolezite, aby field obsahoval cely path az po zobrazovany atribut, lebo podla neho sa vykonava filtrovanie a sortovanie
551
- // (aj ked, da sa to prebit na stlpcoch (na elemente Column), su na to atributy)
552
- var field = thisLocal.getPathForColumn(childColumnProps);
553
- // TODO - toto by sa mohlo vytiahnut vyssie, aj v bodyTemplate sa vola metoda XUtilsMetadata.getXFieldByPath
554
- var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, field);
555
- // *********** header ***********
556
- var header = XFormDataTable2.getHeader(childColumnProps, xEntity, field, xField);
557
- // *********** filterElement ***********
558
- var filterElement;
559
- if (thisLocal.props.filterDisplay !== "none") {
560
- if (xField.type === "boolean") {
561
- var checkboxValue = thisLocal.getCheckboxFilterValue(field);
562
- filterElement = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: checkboxValue, onChange: function (e) { return thisLocal.onCheckboxFilterChange(field, e.value); } });
563
- }
564
- else if (childColumnProps.dropdownInFilter) {
565
- var dropdownValue = thisLocal.getDropdownFilterValue(field);
566
- filterElement = react_1.default.createElement(XDropdownDTFilter_1.XDropdownDTFilter, { entity: thisLocal.getEntity(), path: field, value: dropdownValue, onValueChange: thisLocal.onDropdownFilterChange });
567
- }
568
- }
569
- // *********** showFilterMenu ***********
570
- var showFilterMenu = false;
571
- if (thisLocal.props.filterDisplay !== "none") {
572
- if (childColumnProps.showFilterMenu !== undefined) {
573
- showFilterMenu = childColumnProps.showFilterMenu;
574
- }
575
- else {
576
- showFilterMenu = true; // default
577
- if (thisLocal.props.filterDisplay === "row") {
578
- if (xField.type === "boolean" || childColumnProps.dropdownInFilter) {
579
- showFilterMenu = false;
580
- }
581
- }
582
- }
583
- }
584
- // *********** showClearButton ***********
585
- // pre filterDisplay = "row" nechceme clear button, chceme setrit miesto
586
- var showClearButton = thisLocal.props.filterDisplay === "menu";
587
- // *********** width/headerStyle ***********
588
- var width = XUtils_1.XUtils.processPropWidth(childColumn.props.width);
589
- if (width === undefined || width === "default") {
590
- var filterMenuInFilterRow = thisLocal.props.filterDisplay === "row" && showFilterMenu;
591
- var sortableButtonInHeader = thisLocal.props.sortable;
592
- var filterButtonInHeader = thisLocal.props.filterDisplay === "menu";
593
- width = XUtilsMetadata_1.XUtilsMetadata.computeColumnWidth(xField, undefined, filterMenuInFilterRow, childColumnProps.type, header, sortableButtonInHeader, filterButtonInHeader);
594
- }
595
- var headerStyle = {};
596
- if (width !== undefined) {
597
- headerStyle = { width: width };
598
- }
599
- // *********** align ***********
600
- var align = undefined; // default undefined (left)
601
- // do buducna
602
- // if (childColumnProps.align !== undefined) {
603
- // align = childColumnProps.align;
604
- // }
605
- // else {
606
- // decimal defaultne zarovnavame doprava
607
- // if (xField.type === "decimal") {
608
- // align = "right";
609
- // }
610
- // else
611
- if (xField.type === "boolean") {
612
- align = "center";
613
- }
614
- // }
615
- return react_1.default.createElement(column_1.Column, { field: field, header: header, filter: thisLocal.props.filterDisplay !== "none", sortable: thisLocal.props.sortable, filterElement: filterElement, showFilterMenu: showFilterMenu, showClearButton: showClearButton, headerStyle: headerStyle, align: align, body: function (rowData) { return thisLocal.bodyTemplate(childColumnProps, readOnly, rowData, xEntity); } });
616
- });
617
- if (this.props.showAddRemoveButtons && this.props.removeButtonInRow) {
618
- // je dolezite nastavit sirku header-a, lebo inac ma stlpec sirku 0 a nevidno ho
619
- columnElemList.push(react_1.default.createElement(column_1.Column, { key: "removeButton", headerStyle: { width: '2rem' }, body: function (rowData) { return react_1.default.createElement(XButtonIconNarrow_1.XButtonIconNarrow, { icon: "pi pi-times", onClick: function () { return _this.removeRow(rowData); }, disabled: readOnly, addMargin: false }); } }));
620
- }
621
- var addRowLabel = undefined;
622
- var removeRowLabel = undefined;
623
- if (this.props.showAddRemoveButtons) {
624
- // calling xLocaleOption does not work in standard default values initialisation place (public static defaultProps)
625
- addRowLabel = (_a = this.props.addRowLabel) !== null && _a !== void 0 ? _a : (0, XLocale_1.xLocaleOption)('addRow');
626
- removeRowLabel = (_b = this.props.removeRowLabel) !== null && _b !== void 0 ? _b : (0, XLocale_1.xLocaleOption)('removeRow');
627
- }
628
- return (react_1.default.createElement("div", null,
629
- react_1.default.createElement("div", { className: "flex justify-content-center" },
630
- react_1.default.createElement("label", null, label)),
631
- react_1.default.createElement("div", { className: "flex justify-content-center" },
632
- react_1.default.createElement(datatable_1.DataTable, { ref: function (el) { return _this.dt = el; }, value: valueList, dataKey: this.dataKey, paginator: paginator, rows: rows, totalRecords: valueList.length, filterDisplay: filterDisplay, filters: this.state.filters, onFilter: this.onFilter, sortMode: "multiple", removableSort: true, multiSortMeta: this.props.sortField !== undefined ? [{ field: this.props.sortField, order: 1 }] : undefined, selectionMode: "single", selection: this.state.selectedRow, onSelectionChange: this.onSelectionChange, className: "p-datatable-sm x-form-datatable", resizableColumns: true, columnResizeMode: "expand", tableStyle: tableStyle, scrollable: this.props.scrollable, scrollHeight: scrollHeight, style: style }, columnElemList)),
633
- this.props.showAddRemoveButtons ?
634
- react_1.default.createElement("div", { className: "flex justify-content-center" },
635
- react_1.default.createElement(XButton_1.XButton, { icon: this.props.addRowIcon, label: addRowLabel, onClick: this.onClickAddRow, disabled: readOnly }),
636
- this.props.removeButtonInRow ? undefined : react_1.default.createElement(XButton_1.XButton, { icon: this.props.removeRowIcon, label: removeRowLabel, onClick: this.onClickRemoveRowBySelection, disabled: readOnly }))
637
- : undefined));
638
- };
639
- XFormDataTable2.defaultProps = {
640
- filterDisplay: "row",
641
- sortable: true,
642
- scrollable: true,
643
- scrollWidth: '100%',
644
- scrollHeight: '200vh',
645
- // tym ze pouzivame 200vh (max-height pre body), tak realne scrollovanie sa zapne az pri velmi vela riadkoch
646
- shrinkWidth: true,
647
- showAddRemoveButtons: true,
648
- removeButtonInRow: true,
649
- addRowIcon: "pi pi-plus",
650
- removeRowIcon: "pi pi-times"
651
- };
652
- return XFormDataTable2;
653
- }(react_1.Component));
654
- exports.XFormDataTable2 = XFormDataTable2;
655
- var XFormColumn = function (props) {
656
- // nevadi ze tu nic nevraciame, field a header vieme precitat a zvysok by sme aj tak zahodili lebo vytvarame novy element
657
- return (null);
658
- };
659
- exports.XFormColumn = XFormColumn;
660
- exports.XFormColumn.defaultProps = {
661
- type: "inputSimple"
662
- };
663
- var XFormDropdownColumn = function (props) {
664
- // nevadi ze tu nic nevraciame, field a header vieme precitat a zvysok by sme aj tak zahodili lebo vytvarame novy element
665
- return (null);
666
- };
667
- exports.XFormDropdownColumn = XFormDropdownColumn;
668
- exports.XFormDropdownColumn.defaultProps = {
669
- type: "dropdown"
670
- };
671
- var XFormAutoCompleteColumn = function (props) {
672
- // nevadi ze tu nic nevraciame, field a header vieme precitat a zvysok by sme aj tak zahodili lebo vytvarame novy element
673
- return (null);
674
- };
675
- exports.XFormAutoCompleteColumn = XFormAutoCompleteColumn;
676
- exports.XFormAutoCompleteColumn.defaultProps = {
677
- type: "autoComplete"
678
- };
679
- var XFormSearchButtonColumn = function (props) {
680
- // nevadi ze tu nic nevraciame, field a header vieme precitat a zvysok by sme aj tak zahodili lebo vytvarame novy element
681
- return (null);
682
- };
683
- exports.XFormSearchButtonColumn = XFormSearchButtonColumn;
684
- exports.XFormSearchButtonColumn.defaultProps = {
685
- type: "searchButton"
686
- };
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __assign = (this && this.__assign) || function () {
18
+ __assign = Object.assign || function(t) {
19
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
20
+ s = arguments[i];
21
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
+ t[p] = s[p];
23
+ }
24
+ return t;
25
+ };
26
+ return __assign.apply(this, arguments);
27
+ };
28
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
29
+ if (k2 === undefined) k2 = k;
30
+ var desc = Object.getOwnPropertyDescriptor(m, k);
31
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
32
+ desc = { enumerable: true, get: function() { return m[k]; } };
33
+ }
34
+ Object.defineProperty(o, k2, desc);
35
+ }) : (function(o, m, k, k2) {
36
+ if (k2 === undefined) k2 = k;
37
+ o[k2] = m[k];
38
+ }));
39
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
40
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
41
+ }) : function(o, v) {
42
+ o["default"] = v;
43
+ });
44
+ var __importStar = (this && this.__importStar) || function (mod) {
45
+ if (mod && mod.__esModule) return mod;
46
+ var result = {};
47
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
48
+ __setModuleDefault(result, mod);
49
+ return result;
50
+ };
51
+ var __values = (this && this.__values) || function(o) {
52
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
53
+ if (m) return m.call(o);
54
+ if (o && typeof o.length === "number") return {
55
+ next: function () {
56
+ if (o && i >= o.length) o = void 0;
57
+ return { value: o && o[i++], done: !o };
58
+ }
59
+ };
60
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
61
+ };
62
+ Object.defineProperty(exports, "__esModule", { value: true });
63
+ exports.XFormSearchButtonColumn = exports.XFormAutoCompleteColumn = exports.XFormDropdownColumn = exports.XFormColumn = exports.XFormDataTable2 = void 0;
64
+ var XFormBase_1 = require("./XFormBase");
65
+ var react_1 = __importStar(require("react"));
66
+ var XDropdownDT_1 = require("./XDropdownDT");
67
+ var datatable_1 = require("primereact/datatable");
68
+ var column_1 = require("primereact/column");
69
+ var XButton_1 = require("./XButton");
70
+ var XInputTextDT_1 = require("./XInputTextDT");
71
+ var XSearchButtonDT_1 = require("./XSearchButtonDT");
72
+ var XUtilsMetadata_1 = require("./XUtilsMetadata");
73
+ var XUtils_1 = require("./XUtils");
74
+ var XDropdownDTFilter_1 = require("./XDropdownDTFilter");
75
+ var XInputDecimalDT_1 = require("./XInputDecimalDT");
76
+ var XInputDateDT_1 = require("./XInputDateDT");
77
+ var XCheckboxDT_1 = require("./XCheckboxDT");
78
+ var tristatecheckbox_1 = require("primereact/tristatecheckbox");
79
+ var api_1 = require("primereact/api");
80
+ var XAutoCompleteDT_1 = require("./XAutoCompleteDT");
81
+ var XButtonIconNarrow_1 = require("./XButtonIconNarrow");
82
+ var XLocale_1 = require("./XLocale");
83
+ var XInputIntervalDT_1 = require("./XInputIntervalDT");
84
+ var XFormDataTable2 = /** @class */ (function (_super) {
85
+ __extends(XFormDataTable2, _super);
86
+ function XFormDataTable2(props) {
87
+ var e_1, _a;
88
+ var _this = _super.call(this, props) || this;
89
+ _this.props = props;
90
+ _this.dataKey = props.dataKey;
91
+ var xEntityForm = XUtilsMetadata_1.XUtilsMetadata.getXEntity(props.form.getEntity());
92
+ var xAssocToMany = XUtilsMetadata_1.XUtilsMetadata.getXAssocToMany(xEntityForm, props.assocField);
93
+ _this.entity = xAssocToMany.entityName;
94
+ if (_this.dataKey === undefined) {
95
+ _this.dataKey = XUtilsMetadata_1.XUtilsMetadata.getXEntity(_this.entity).idField;
96
+ }
97
+ _this.state = {
98
+ selectedRow: undefined,
99
+ dropdownOptionsMap: {},
100
+ filters: _this.createInitFilters()
101
+ };
102
+ _this.onClickAddRow = _this.onClickAddRow.bind(_this);
103
+ _this.onClickRemoveRowBySelection = _this.onClickRemoveRowBySelection.bind(_this);
104
+ _this.removeRow = _this.removeRow.bind(_this);
105
+ _this.onSelectionChange = _this.onSelectionChange.bind(_this);
106
+ _this.onDropdownOptionsMapChange = _this.onDropdownOptionsMapChange.bind(_this);
107
+ _this.onFilter = _this.onFilter.bind(_this);
108
+ _this.onCheckboxFilterChange = _this.onCheckboxFilterChange.bind(_this);
109
+ _this.getCheckboxFilterValue = _this.getCheckboxFilterValue.bind(_this);
110
+ _this.onDropdownFilterChange = _this.onDropdownFilterChange.bind(_this);
111
+ _this.getDropdownFilterValue = _this.getDropdownFilterValue.bind(_this);
112
+ _this.bodyTemplate = _this.bodyTemplate.bind(_this);
113
+ props.form.addXFormDataTable(_this);
114
+ try {
115
+ //props.form.addField(props.assocField + '.*FAKE*'); - vzdy mame aspon 1 field, nie je to potrebne
116
+ for (var _b = __values(props.children), _c = _b.next(); !_c.done; _c = _b.next()) {
117
+ var child = _c.value;
118
+ var childColumn = child; // nevedel som to krajsie...
119
+ var field = props.assocField + '.' + _this.getPathForColumn(childColumn.props);
120
+ props.form.addField(field);
121
+ }
122
+ }
123
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
124
+ finally {
125
+ try {
126
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
127
+ }
128
+ finally { if (e_1) throw e_1.error; }
129
+ }
130
+ return _this;
131
+ }
132
+ XFormDataTable2.prototype.getPathForColumn = function (columnProps) {
133
+ if (columnProps.type === "inputSimple") {
134
+ var columnPropsInputSimple = columnProps;
135
+ return columnPropsInputSimple.field;
136
+ }
137
+ else if (columnProps.type === "dropdown") {
138
+ var columnPropsDropdown = columnProps;
139
+ return columnPropsDropdown.assocField + '.' + columnPropsDropdown.displayField;
140
+ }
141
+ else if (columnProps.type === "autoComplete") {
142
+ var columnPropsAutoComplete = columnProps;
143
+ return columnPropsAutoComplete.assocField + '.' + this.getDisplayFieldOrId(columnPropsAutoComplete);
144
+ }
145
+ else if (columnProps.type === "searchButton") {
146
+ var columnPropsSearchButton = columnProps;
147
+ return columnPropsSearchButton.assocField + '.' + columnPropsSearchButton.displayField;
148
+ }
149
+ else {
150
+ throw "Unknown prop type = " + columnProps.type;
151
+ }
152
+ };
153
+ XFormDataTable2.prototype.getDisplayFieldOrId = function (columnPropsAutoComplete) {
154
+ // toto je hack - ak ratame displayField cez funkciu, tak nam potom v kode chyba (hociaky) atribut asociovaneho objektu
155
+ // aby sme nemuseli robit nejake velke prerabky a zmeny, tak podsunieme id-ckovy atribut
156
+ if (typeof columnPropsAutoComplete.displayField === 'string') {
157
+ return columnPropsAutoComplete.displayField; // vsetko ok
158
+ }
159
+ else {
160
+ // v displayField mame funkciu, zistime id-ckovy atribut
161
+ // TODO - problem - sortovanie/filtrovanie bude fungovat podla tohto id atributu
162
+ var xAssoc = XUtilsMetadata_1.XUtilsMetadata.getXAssocToOne(XUtilsMetadata_1.XUtilsMetadata.getXEntity(this.getEntity()), columnPropsAutoComplete.assocField);
163
+ return XUtilsMetadata_1.XUtilsMetadata.getXEntity(xAssoc.entityName).idField;
164
+ }
165
+ };
166
+ XFormDataTable2.getHeader = function (columnProps, xEntity, field, xField) {
167
+ var _a, _b, _c, _d;
168
+ // poznamky - parametre field a xField by sme mohli vyratavat na zaklade columnProps ale kedze ich uz mame, setrime performance a neduplikujeme vypocet
169
+ // nie je to tu uplne idealne nakodene, ale je to pomerne prehladne
170
+ var isNullable = true;
171
+ var readOnly = false;
172
+ if (columnProps.type === "inputSimple") {
173
+ var columnPropsInputSimple = columnProps;
174
+ isNullable = xField.isNullable;
175
+ readOnly = XUtils_1.XUtils.isReadOnly(columnPropsInputSimple.field, columnProps.readOnly);
176
+ }
177
+ else if (columnProps.type === "dropdown") {
178
+ var columnPropsDropdown = columnProps;
179
+ var xAssoc = XUtilsMetadata_1.XUtilsMetadata.getXAssocToOne(xEntity, columnPropsDropdown.assocField);
180
+ isNullable = xAssoc.isNullable;
181
+ readOnly = (_a = columnProps.readOnly) !== null && _a !== void 0 ? _a : false;
182
+ }
183
+ else if (columnProps.type === "autoComplete") {
184
+ var columnPropsAutoComplete = columnProps;
185
+ var xAssoc = XUtilsMetadata_1.XUtilsMetadata.getXAssocToOne(xEntity, columnPropsAutoComplete.assocField);
186
+ isNullable = xAssoc.isNullable;
187
+ readOnly = (_b = columnProps.readOnly) !== null && _b !== void 0 ? _b : false;
188
+ }
189
+ else if (columnProps.type === "searchButton") {
190
+ var columnPropsSearchButton = columnProps;
191
+ var xAssoc = XUtilsMetadata_1.XUtilsMetadata.getXAssocToOne(xEntity, columnPropsSearchButton.assocField);
192
+ isNullable = xAssoc.isNullable;
193
+ readOnly = (_c = columnProps.readOnly) !== null && _c !== void 0 ? _c : false;
194
+ }
195
+ else {
196
+ throw "Unknown prop type = " + columnProps.type;
197
+ }
198
+ var header = (_d = columnProps.header) !== null && _d !== void 0 ? _d : field;
199
+ if (!isNullable && !readOnly) {
200
+ header = XUtils_1.XUtils.markNotNull(header);
201
+ }
202
+ return header;
203
+ };
204
+ XFormDataTable2.prototype.getEntity = function () {
205
+ if (this.entity === undefined) {
206
+ throw "Unexpected error: this.entity is undefined";
207
+ }
208
+ return this.entity;
209
+ };
210
+ XFormDataTable2.prototype.createInitFilters = function () {
211
+ var e_2, _a;
212
+ var initFilters = {};
213
+ if (this.props.filterDisplay === "none") {
214
+ return initFilters;
215
+ }
216
+ var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(this.getEntity());
217
+ try {
218
+ // TODO - asi by bolo fajn si tieto field, xField niekam ulozit a iterovat ulozene hodnoty, pouziva sa to na viacerych miestach
219
+ for (var _b = __values(this.props.children), _c = _b.next(); !_c.done; _c = _b.next()) {
220
+ var child = _c.value;
221
+ var childColumn = child; // nevedel som to krajsie...
222
+ var field = this.getPathForColumn(childColumn.props);
223
+ var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, field);
224
+ // TODO column.props.dropdownInFilter - pre "menu" by bolo fajn mat zoznam "enumov"
225
+ var filterMatchMode = this.getFilterMatchMode(xField);
226
+ var filterItem = void 0;
227
+ if (this.props.filterDisplay === "menu") {
228
+ // DataTableOperatorFilterMetaData: operator + filter values
229
+ filterItem = {
230
+ operator: api_1.FilterOperator.OR,
231
+ constraints: [{ value: null, matchMode: filterMatchMode }]
232
+ };
233
+ }
234
+ else {
235
+ // props.filterDisplay === "row"
236
+ // DataTableFilterMetaData: filter value
237
+ filterItem = { value: null, matchMode: filterMatchMode };
238
+ }
239
+ initFilters[field] = filterItem;
240
+ }
241
+ }
242
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
243
+ finally {
244
+ try {
245
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
246
+ }
247
+ finally { if (e_2) throw e_2.error; }
248
+ }
249
+ return initFilters;
250
+ };
251
+ XFormDataTable2.prototype.getFilterMatchMode = function (xField) {
252
+ var filterMatchMode;
253
+ if (xField.type === "string") {
254
+ filterMatchMode = api_1.FilterMatchMode.STARTS_WITH;
255
+ }
256
+ // zatial vsetky ostatne EQUALS
257
+ else if (xField.type === "decimal" || xField.type === "number" || xField.type === "date" || xField.type === "datetime" || xField.type === "boolean") {
258
+ filterMatchMode = api_1.FilterMatchMode.EQUALS;
259
+ }
260
+ else {
261
+ throw "XField ".concat(xField.name, ": unknown xField.type = ").concat(xField.type);
262
+ }
263
+ return filterMatchMode;
264
+ };
265
+ XFormDataTable2.prototype.onSelectionChange = function (event) {
266
+ //console.log("zavolany onSelectionChange");
267
+ //console.log(event.value);
268
+ this.setState({ selectedRow: event.value });
269
+ };
270
+ XFormDataTable2.prototype.onDropdownOptionsMapChange = function (dropdownOptionsMap) {
271
+ this.setState({ dropdownOptionsMap: dropdownOptionsMap });
272
+ };
273
+ XFormDataTable2.prototype.onFilter = function (event) {
274
+ //console.log("zavolany onFilter - this.state.filters = " + JSON.stringify(this.state.filters));
275
+ //console.log("zavolany onFilter - event.filters = " + JSON.stringify(event.filters));
276
+ // tymto zavolanim sa zapise znak zapisany klavesnicou do inputu filtra (ak prikaz zakomentujeme, input filtra zostane prazdny)
277
+ this.setState({ filters: event.filters });
278
+ };
279
+ XFormDataTable2.prototype.onCheckboxFilterChange = function (field, checkboxValue) {
280
+ // TODO - treba vyklonovat?
281
+ var filtersCloned = __assign({}, this.state.filters);
282
+ if (checkboxValue !== null) {
283
+ filtersCloned[field] = { value: checkboxValue ? "true" : "false", matchMode: api_1.FilterMatchMode.EQUALS };
284
+ }
285
+ else {
286
+ // pouzivatel zrusil hodnotu vo filtri (vybral prazdny stav v checkboxe), zrusime polozku z filtra
287
+ //delete filtersCloned[field];
288
+ filtersCloned[field] = { value: null, matchMode: api_1.FilterMatchMode.EQUALS };
289
+ }
290
+ this.setState({ filters: filtersCloned });
291
+ };
292
+ XFormDataTable2.prototype.getCheckboxFilterValue = function (field) {
293
+ var checkboxValue = null;
294
+ var filterValue = this.state.filters[field];
295
+ if (filterValue !== undefined && filterValue !== null) {
296
+ if (filterValue.value === 'true') {
297
+ checkboxValue = true;
298
+ }
299
+ else if (filterValue.value === 'false') {
300
+ checkboxValue = false;
301
+ }
302
+ }
303
+ return checkboxValue;
304
+ };
305
+ XFormDataTable2.prototype.onDropdownFilterChange = function (field, displayValue) {
306
+ // TODO - treba vyklonovat?
307
+ var filtersCloned = __assign({}, this.state.filters);
308
+ if (displayValue !== XUtils_1.XUtils.dropdownEmptyOptionValue) {
309
+ filtersCloned[field] = { value: displayValue, matchMode: api_1.FilterMatchMode.EQUALS };
310
+ }
311
+ else {
312
+ // pouzivatel zrusil hodnotu vo filtri (vybral prazdny riadok), zrusime polozku z filtra
313
+ //delete filtersCloned[field];
314
+ filtersCloned[field] = { value: null, matchMode: api_1.FilterMatchMode.EQUALS };
315
+ }
316
+ this.setState({ filters: filtersCloned });
317
+ };
318
+ XFormDataTable2.prototype.getDropdownFilterValue = function (field) {
319
+ var dropdownValue = XUtils_1.XUtils.dropdownEmptyOptionValue;
320
+ var filterValue = this.state.filters[field];
321
+ if (filterValue !== undefined && filterValue !== null) {
322
+ if (filterValue.value !== null) {
323
+ dropdownValue = filterValue.value;
324
+ }
325
+ }
326
+ return dropdownValue;
327
+ };
328
+ /* pravdepodobne zombie
329
+ onBodyValueChange (field: string, rowData: any, newValue: any) {
330
+ //console.log("onBodyValueChange");
331
+
332
+ // zmenime hodnotu v modeli (odtial sa hodnota cita)
333
+ rowData[field] = newValue;
334
+ // kedze "rowData" je sucastou "props.form.state.object", tak nam staci zavolat setState({object: object}), aby sa zmena prejavila
335
+ this.props.form.onObjectDataChange();
336
+ }
337
+ */
338
+ // body={(rowData: any) => bodyTemplate(childColumn.props.field, rowData)}
339
+ XFormDataTable2.prototype.bodyTemplate = function (columnProps, tableReadOnly, rowData, xEntity) {
340
+ var _a, _b;
341
+ var body;
342
+ if (columnProps.type === "inputSimple") {
343
+ var columnPropsInputSimple = columnProps;
344
+ // tableReadOnly has higher prio then property readOnly
345
+ var readOnly = tableReadOnly || ((_a = columnPropsInputSimple.readOnly) !== null && _a !== void 0 ? _a : false);
346
+ var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, columnPropsInputSimple.field);
347
+ if (xField.type === "decimal" || xField.type === "number") {
348
+ body = react_1.default.createElement(XInputDecimalDT_1.XInputDecimalDT, { form: this.props.form, entity: this.getEntity(), field: columnPropsInputSimple.field, rowData: rowData, readOnly: readOnly, onChange: columnPropsInputSimple.onChange });
349
+ }
350
+ else if (xField.type === "date" || xField.type === "datetime") {
351
+ body = react_1.default.createElement(XInputDateDT_1.XInputDateDT, { form: this.props.form, xField: xField, field: columnPropsInputSimple.field, rowData: rowData, readOnly: readOnly });
352
+ }
353
+ else if (xField.type === "interval") {
354
+ body = react_1.default.createElement(XInputIntervalDT_1.XInputIntervalDT, { form: this.props.form, entity: this.getEntity(), field: columnPropsInputSimple.field, rowData: rowData, readOnly: readOnly });
355
+ }
356
+ else if (xField.type === "boolean") {
357
+ body = react_1.default.createElement(XCheckboxDT_1.XCheckboxDT, { form: this.props.form, xField: xField, field: columnPropsInputSimple.field, rowData: rowData, readOnly: readOnly });
358
+ }
359
+ else {
360
+ // xField.type === "string", pripadne ine jednoduche typy
361
+ body = react_1.default.createElement(XInputTextDT_1.XInputTextDT, { form: this.props.form, entity: this.getEntity(), field: columnPropsInputSimple.field, rowData: rowData, readOnly: readOnly });
362
+ }
363
+ }
364
+ else if (columnProps.type === "dropdown") {
365
+ var columnPropsDropdown = columnProps;
366
+ body = react_1.default.createElement(XDropdownDT_1.XDropdownDT, { form: this.props.form, entity: this.getEntity(), assocField: columnPropsDropdown.assocField, displayField: columnPropsDropdown.displayField, sortField: columnPropsDropdown.sortField, filter: columnPropsDropdown.filter, dropdownOptionsMap: this.state.dropdownOptionsMap, onDropdownOptionsMapChange: this.onDropdownOptionsMapChange, rowData: rowData });
367
+ }
368
+ else if (columnProps.type === "autoComplete") {
369
+ var columnPropsAutoComplete = columnProps;
370
+ // tableReadOnly has higher prio then property readOnly
371
+ var readOnly = tableReadOnly || ((_b = columnPropsAutoComplete.readOnly) !== null && _b !== void 0 ? _b : false);
372
+ body = react_1.default.createElement(XAutoCompleteDT_1.XAutoCompleteDT, { form: this.props.form, entity: this.getEntity(), assocField: columnPropsAutoComplete.assocField, displayField: columnPropsAutoComplete.displayField, searchTable: columnPropsAutoComplete.searchTable, assocForm: columnPropsAutoComplete.assocForm, filter: columnPropsAutoComplete.filter, rowData: rowData, readOnly: readOnly });
373
+ }
374
+ else if (columnProps.type === "searchButton") {
375
+ var columnPropsSearchButton = columnProps;
376
+ body = react_1.default.createElement(XSearchButtonDT_1.XSearchButtonDT, { form: this.props.form, entity: this.getEntity(), assocField: columnPropsSearchButton.assocField, displayField: columnPropsSearchButton.displayField, searchTable: columnPropsSearchButton.searchTable, rowData: rowData, readOnly: columnPropsSearchButton.readOnly });
377
+ }
378
+ else {
379
+ throw "Unknown prop type = " + columnProps.type;
380
+ }
381
+ return body;
382
+ };
383
+ XFormDataTable2.prototype.onClickAddRow = function () {
384
+ if (this.props.onClickAddRow) {
385
+ // custom add row
386
+ this.props.onClickAddRow();
387
+ }
388
+ else {
389
+ // default add row
390
+ this.props.form.onTableAddRow(this.props.assocField, {}, this.dataKey, this.state.selectedRow);
391
+ }
392
+ };
393
+ ;
394
+ XFormDataTable2.prototype.onClickRemoveRowBySelection = function () {
395
+ if (this.state.selectedRow !== undefined) {
396
+ this.removeRow(this.state.selectedRow);
397
+ }
398
+ else {
399
+ alert("Please select the row.");
400
+ }
401
+ };
402
+ ;
403
+ XFormDataTable2.prototype.removeRow = function (row) {
404
+ if (this.props.onClickRemoveRow) {
405
+ // custom remove
406
+ this.props.onClickRemoveRow(row);
407
+ }
408
+ else {
409
+ // default remove
410
+ this.props.form.onTableRemoveRow(this.props.assocField, row);
411
+ }
412
+ };
413
+ XFormDataTable2.prototype.validate = function () {
414
+ var e_3, _a, e_4, _b;
415
+ // zvalidujeme vsetky rows a pripadne chyby zapiseme do specialneho fieldu __x_rowTechData
416
+ var object = this.props.form.getXObject();
417
+ var rowList = object[this.props.assocField];
418
+ try {
419
+ for (var rowList_1 = __values(rowList), rowList_1_1 = rowList_1.next(); !rowList_1_1.done; rowList_1_1 = rowList_1.next()) {
420
+ var row = rowList_1_1.value;
421
+ var xRowTechData = XFormBase_1.XFormBase.getXRowTechData(row);
422
+ var xErrorMap = {};
423
+ try {
424
+ for (var _c = (e_4 = void 0, __values(xRowTechData.xFormComponentDTList)), _d = _c.next(); !_d.done; _d = _c.next()) {
425
+ var xFormComponentDT = _d.value;
426
+ var errorItem = xFormComponentDT.validate();
427
+ if (errorItem) {
428
+ //console.log("Mame field = " + errorItem.field);
429
+ xErrorMap[errorItem.field] = errorItem.xError;
430
+ }
431
+ }
432
+ }
433
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
434
+ finally {
435
+ try {
436
+ if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
437
+ }
438
+ finally { if (e_4) throw e_4.error; }
439
+ }
440
+ xRowTechData.errorMap = xErrorMap;
441
+ }
442
+ }
443
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
444
+ finally {
445
+ try {
446
+ if (rowList_1_1 && !rowList_1_1.done && (_a = rowList_1.return)) _a.call(rowList_1);
447
+ }
448
+ finally { if (e_3) throw e_3.error; }
449
+ }
450
+ };
451
+ // getErrorMessages(): string {
452
+ // let msg: string = "";
453
+ // const object: XObject = this.props.form.getXObject();
454
+ // const rowList: any[] = object[this.props.assocField];
455
+ // for (const row of rowList) {
456
+ // const xRowTechData: XRowTechData = XFormBase.getXRowTechData(row);
457
+ // msg += XUtils.getErrorMessages(xRowTechData.errorMap);
458
+ // }
459
+ // return msg;
460
+ // }
461
+ // TODO - velmi podobna funkcia ako XFormComponent.isReadOnly() - zjednotit ak sa da
462
+ XFormDataTable2.prototype.isReadOnly = function () {
463
+ var readOnly;
464
+ // the purpose of formReadOnly is to put the whole form to read only mode,
465
+ // that's why the formReadOnly has higher prio then property this.props.readOnly
466
+ if (this.props.form.formReadOnlyBase(this.props.assocField)) {
467
+ readOnly = true;
468
+ }
469
+ else if (typeof this.props.readOnly === 'boolean') {
470
+ readOnly = this.props.readOnly;
471
+ }
472
+ // TODO
473
+ // else if (typeof this.props.readOnly === 'function') {
474
+ // // TODO - tazko povedat ci niekedy bude object === null (asi ano vid metodu getFilterBase)
475
+ // const object: XObject = this.props.form.state.object;
476
+ // if (object) {
477
+ // readOnly = this.props.readOnly(this.props.form.getXObject());
478
+ // }
479
+ // else {
480
+ // readOnly = true;
481
+ // }
482
+ // }
483
+ else {
484
+ // readOnly is undefined
485
+ readOnly = false;
486
+ }
487
+ return readOnly;
488
+ };
489
+ XFormDataTable2.prototype.render = function () {
490
+ var _this = this;
491
+ var _a, _b;
492
+ var paginator = this.props.paginator !== undefined ? this.props.paginator : false;
493
+ var rows = undefined;
494
+ if (paginator) {
495
+ if (this.props.rows !== undefined) {
496
+ rows = this.props.rows;
497
+ }
498
+ else {
499
+ rows = 5; // default
500
+ }
501
+ }
502
+ var filterDisplay = this.props.filterDisplay !== "none" ? this.props.filterDisplay : undefined;
503
+ var label = this.props.label !== undefined ? this.props.label : this.props.assocField;
504
+ var readOnly = this.isReadOnly();
505
+ // v bloku function (child) nejde pouzit priamo this, thisLocal uz ide pouzit
506
+ var thisLocal = this;
507
+ var object = this.props.form.state.object;
508
+ var valueList = object !== null ? object[this.props.assocField] : [];
509
+ var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(this.getEntity());
510
+ var scrollWidth = undefined; // vypnute horizontalne scrollovanie
511
+ var scrollHeight = undefined; // vypnute vertikalne scrollovanie
512
+ if (this.props.scrollable) {
513
+ if (this.props.scrollWidth !== "none") {
514
+ scrollWidth = this.props.scrollWidth;
515
+ }
516
+ if (this.props.scrollHeight !== "none") {
517
+ scrollHeight = this.props.scrollHeight;
518
+ }
519
+ }
520
+ var style = {};
521
+ if (scrollWidth !== undefined) {
522
+ style.width = scrollWidth;
523
+ }
524
+ if (this.props.shrinkWidth) {
525
+ 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
526
+ }
527
+ // pri prechode z Primereact 6.x na 9.x sa tableLayout zmenil z fixed na auto a nefungovalo nastavenie sirok stlpcov - docasne teda takto
528
+ var tableStyle = { tableLayout: 'fixed' };
529
+ if (this.props.width !== undefined) {
530
+ var width = this.props.width;
531
+ if (!isNaN(Number(width))) { // if width is number
532
+ width = width + 'rem';
533
+ }
534
+ tableStyle = __assign(__assign({}, tableStyle), { width: width });
535
+ }
536
+ // pre lepsiu citatelnost vytvarame stlpce uz tu
537
+ var columnElemList = react_1.default.Children.map(this.props.children, function (child) {
538
+ // ak chceme zmenit child element, tak treba bud vytvorit novy alebo vyklonovat
539
+ // priklad je na https://soshace.com/building-react-components-using-children-props-and-context-api/
540
+ // (vzdy musime robit manipulacie so stlpcom, lebo potrebujeme pridat filter={true} sortable={true}
541
+ var childColumn = child; // nevedel som to krajsie...
542
+ var childColumnProps = childColumn.props;
543
+ // je dolezite, aby field obsahoval cely path az po zobrazovany atribut, lebo podla neho sa vykonava filtrovanie a sortovanie
544
+ // (aj ked, da sa to prebit na stlpcoch (na elemente Column), su na to atributy)
545
+ var field = thisLocal.getPathForColumn(childColumnProps);
546
+ // TODO - toto by sa mohlo vytiahnut vyssie, aj v bodyTemplate sa vola metoda XUtilsMetadata.getXFieldByPath
547
+ var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, field);
548
+ // *********** header ***********
549
+ var header = XFormDataTable2.getHeader(childColumnProps, xEntity, field, xField);
550
+ // *********** filterElement ***********
551
+ var filterElement;
552
+ if (thisLocal.props.filterDisplay !== "none") {
553
+ if (xField.type === "boolean") {
554
+ var checkboxValue = thisLocal.getCheckboxFilterValue(field);
555
+ filterElement = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: checkboxValue, onChange: function (e) { return thisLocal.onCheckboxFilterChange(field, e.value); } });
556
+ }
557
+ else if (childColumnProps.dropdownInFilter) {
558
+ var dropdownValue = thisLocal.getDropdownFilterValue(field);
559
+ filterElement = react_1.default.createElement(XDropdownDTFilter_1.XDropdownDTFilter, { entity: thisLocal.getEntity(), path: field, value: dropdownValue, onValueChange: thisLocal.onDropdownFilterChange });
560
+ }
561
+ }
562
+ // *********** showFilterMenu ***********
563
+ var showFilterMenu = false;
564
+ if (thisLocal.props.filterDisplay !== "none") {
565
+ if (childColumnProps.showFilterMenu !== undefined) {
566
+ showFilterMenu = childColumnProps.showFilterMenu;
567
+ }
568
+ else {
569
+ showFilterMenu = true; // default
570
+ if (thisLocal.props.filterDisplay === "row") {
571
+ if (xField.type === "boolean" || childColumnProps.dropdownInFilter) {
572
+ showFilterMenu = false;
573
+ }
574
+ }
575
+ }
576
+ }
577
+ // *********** showClearButton ***********
578
+ // pre filterDisplay = "row" nechceme clear button, chceme setrit miesto
579
+ var showClearButton = thisLocal.props.filterDisplay === "menu";
580
+ // *********** width/headerStyle ***********
581
+ var width = XUtils_1.XUtils.processPropWidth(childColumn.props.width);
582
+ if (width === undefined || width === "default") {
583
+ var filterMenuInFilterRow = thisLocal.props.filterDisplay === "row" && showFilterMenu;
584
+ var sortableButtonInHeader = thisLocal.props.sortable;
585
+ var filterButtonInHeader = thisLocal.props.filterDisplay === "menu";
586
+ width = XUtilsMetadata_1.XUtilsMetadata.computeColumnWidth(xField, undefined, filterMenuInFilterRow, childColumnProps.type, header, sortableButtonInHeader, filterButtonInHeader);
587
+ }
588
+ var headerStyle = {};
589
+ if (width !== undefined) {
590
+ headerStyle = { width: width };
591
+ }
592
+ // *********** align ***********
593
+ var align = undefined; // default undefined (left)
594
+ // do buducna
595
+ // if (childColumnProps.align !== undefined) {
596
+ // align = childColumnProps.align;
597
+ // }
598
+ // else {
599
+ // decimal defaultne zarovnavame doprava
600
+ // if (xField.type === "decimal") {
601
+ // align = "right";
602
+ // }
603
+ // else
604
+ if (xField.type === "boolean") {
605
+ align = "center";
606
+ }
607
+ // }
608
+ return react_1.default.createElement(column_1.Column, { field: field, header: header, filter: thisLocal.props.filterDisplay !== "none", sortable: thisLocal.props.sortable, filterElement: filterElement, showFilterMenu: showFilterMenu, showClearButton: showClearButton, headerStyle: headerStyle, align: align, body: function (rowData) { return thisLocal.bodyTemplate(childColumnProps, readOnly, rowData, xEntity); } });
609
+ });
610
+ if (this.props.showAddRemoveButtons && this.props.removeButtonInRow) {
611
+ // je dolezite nastavit sirku header-a, lebo inac ma stlpec sirku 0 a nevidno ho
612
+ columnElemList.push(react_1.default.createElement(column_1.Column, { key: "removeButton", headerStyle: { width: '2rem' }, body: function (rowData) { return react_1.default.createElement(XButtonIconNarrow_1.XButtonIconNarrow, { icon: "pi pi-times", onClick: function () { return _this.removeRow(rowData); }, disabled: readOnly, addMargin: false }); } }));
613
+ }
614
+ var addRowLabel = undefined;
615
+ var removeRowLabel = undefined;
616
+ if (this.props.showAddRemoveButtons) {
617
+ // calling xLocaleOption does not work in standard default values initialisation place (public static defaultProps)
618
+ addRowLabel = (_a = this.props.addRowLabel) !== null && _a !== void 0 ? _a : (0, XLocale_1.xLocaleOption)('addRow');
619
+ removeRowLabel = (_b = this.props.removeRowLabel) !== null && _b !== void 0 ? _b : (0, XLocale_1.xLocaleOption)('removeRow');
620
+ }
621
+ return (react_1.default.createElement("div", null,
622
+ react_1.default.createElement("div", { className: "flex justify-content-center" },
623
+ react_1.default.createElement("label", null, label)),
624
+ react_1.default.createElement("div", { className: "flex justify-content-center" },
625
+ react_1.default.createElement(datatable_1.DataTable, { ref: function (el) { return _this.dt = el; }, value: valueList, dataKey: this.dataKey, paginator: paginator, rows: rows, totalRecords: valueList.length, filterDisplay: filterDisplay, filters: this.state.filters, onFilter: this.onFilter, sortMode: "multiple", removableSort: true, multiSortMeta: this.props.sortField !== undefined ? [{ field: this.props.sortField, order: 1 }] : undefined, selectionMode: "single", selection: this.state.selectedRow, onSelectionChange: this.onSelectionChange, className: "p-datatable-sm x-form-datatable", resizableColumns: true, columnResizeMode: "expand", tableStyle: tableStyle, scrollable: this.props.scrollable, scrollHeight: scrollHeight, style: style }, columnElemList)),
626
+ this.props.showAddRemoveButtons ?
627
+ react_1.default.createElement("div", { className: "flex justify-content-center" },
628
+ react_1.default.createElement(XButton_1.XButton, { icon: this.props.addRowIcon, label: addRowLabel, onClick: this.onClickAddRow, disabled: readOnly }),
629
+ this.props.removeButtonInRow ? undefined : react_1.default.createElement(XButton_1.XButton, { icon: this.props.removeRowIcon, label: removeRowLabel, onClick: this.onClickRemoveRowBySelection, disabled: readOnly }))
630
+ : undefined));
631
+ };
632
+ XFormDataTable2.defaultProps = {
633
+ filterDisplay: "row",
634
+ sortable: true,
635
+ scrollable: true,
636
+ scrollWidth: '100%',
637
+ scrollHeight: '200vh',
638
+ // tym ze pouzivame 200vh (max-height pre body), tak realne scrollovanie sa zapne az pri velmi vela riadkoch
639
+ shrinkWidth: true,
640
+ showAddRemoveButtons: true,
641
+ removeButtonInRow: true,
642
+ addRowIcon: "pi pi-plus",
643
+ removeRowIcon: "pi pi-times"
644
+ };
645
+ return XFormDataTable2;
646
+ }(react_1.Component));
647
+ exports.XFormDataTable2 = XFormDataTable2;
648
+ var XFormColumn = function (props) {
649
+ // nevadi ze tu nic nevraciame, field a header vieme precitat a zvysok by sme aj tak zahodili lebo vytvarame novy element
650
+ return (null);
651
+ };
652
+ exports.XFormColumn = XFormColumn;
653
+ exports.XFormColumn.defaultProps = {
654
+ type: "inputSimple"
655
+ };
656
+ var XFormDropdownColumn = function (props) {
657
+ // nevadi ze tu nic nevraciame, field a header vieme precitat a zvysok by sme aj tak zahodili lebo vytvarame novy element
658
+ return (null);
659
+ };
660
+ exports.XFormDropdownColumn = XFormDropdownColumn;
661
+ exports.XFormDropdownColumn.defaultProps = {
662
+ type: "dropdown"
663
+ };
664
+ var XFormAutoCompleteColumn = function (props) {
665
+ // nevadi ze tu nic nevraciame, field a header vieme precitat a zvysok by sme aj tak zahodili lebo vytvarame novy element
666
+ return (null);
667
+ };
668
+ exports.XFormAutoCompleteColumn = XFormAutoCompleteColumn;
669
+ exports.XFormAutoCompleteColumn.defaultProps = {
670
+ type: "autoComplete"
671
+ };
672
+ var XFormSearchButtonColumn = function (props) {
673
+ // nevadi ze tu nic nevraciame, field a header vieme precitat a zvysok by sme aj tak zahodili lebo vytvarame novy element
674
+ return (null);
675
+ };
676
+ exports.XFormSearchButtonColumn = XFormSearchButtonColumn;
677
+ exports.XFormSearchButtonColumn.defaultProps = {
678
+ type: "searchButton"
679
+ };