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