@michalrakus/x-react-web-lib 1.1.0 → 1.3.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 (63) hide show
  1. package/FindParam.d.ts +3 -0
  2. package/FindParam.js +5 -0
  3. package/XButtonIconNarrow.d.ts +3 -0
  4. package/XButtonIconNarrow.js +5 -0
  5. package/XButtonIconSmall.d.ts +3 -0
  6. package/XButtonIconSmall.js +5 -0
  7. package/XFieldChangeEvent.d.ts +3 -0
  8. package/XFieldChangeEvent.js +5 -0
  9. package/gulpfile.js +4 -0
  10. package/lib/components/SearchTableParams.d.ts +8 -2
  11. package/lib/components/XAutoComplete.d.ts +7 -4
  12. package/lib/components/XAutoComplete.js +21 -6
  13. package/lib/components/XAutoCompleteBase.d.ts +8 -4
  14. package/lib/components/XAutoCompleteBase.js +68 -27
  15. package/lib/components/XAutoCompleteDT.d.ts +33 -0
  16. package/lib/components/XAutoCompleteDT.js +140 -0
  17. package/lib/components/XButton.d.ts +3 -1
  18. package/lib/components/XButton.js +1 -1
  19. package/lib/components/XButtonIconNarrow.d.ts +10 -0
  20. package/lib/components/XButtonIconNarrow.js +25 -0
  21. package/lib/components/XButtonIconSmall.d.ts +3 -1
  22. package/lib/components/XCheckbox.d.ts +2 -2
  23. package/lib/components/XDropdown.d.ts +3 -2
  24. package/lib/components/XDropdown.js +5 -3
  25. package/lib/components/XExportRowsDialog.js +2 -2
  26. package/lib/components/XFieldChangeEvent.d.ts +11 -0
  27. package/lib/components/XFieldChangeEvent.js +2 -0
  28. package/lib/components/XFormBase.d.ts +19 -9
  29. package/lib/components/XFormBase.js +95 -34
  30. package/lib/components/XFormComponent.d.ts +13 -4
  31. package/lib/components/XFormComponent.js +57 -5
  32. package/lib/components/XFormComponentDT.d.ts +30 -0
  33. package/lib/components/XFormComponentDT.js +145 -0
  34. package/lib/components/XFormDataTable2.d.ts +48 -7
  35. package/lib/components/XFormDataTable2.js +208 -45
  36. package/lib/components/XInput.d.ts +2 -2
  37. package/lib/components/XInputDT.d.ts +11 -0
  38. package/lib/components/XInputDT.js +37 -0
  39. package/lib/components/XInputDate.d.ts +2 -1
  40. package/lib/components/XInputDate.js +5 -3
  41. package/lib/components/XInputDecimal.d.ts +9 -2
  42. package/lib/components/XInputDecimal.js +62 -45
  43. package/lib/components/XInputDecimalDT.d.ts +10 -8
  44. package/lib/components/XInputDecimalDT.js +58 -36
  45. package/lib/components/XInputText.d.ts +3 -2
  46. package/lib/components/XInputText.js +7 -1
  47. package/lib/components/XInputTextarea.d.ts +2 -2
  48. package/lib/components/XLazyDataTable.d.ts +5 -0
  49. package/lib/components/XLazyDataTable.js +39 -24
  50. package/lib/components/XSearchButton.d.ts +6 -4
  51. package/lib/components/XSearchButton.js +19 -17
  52. package/lib/components/XSearchButtonDT.js +3 -3
  53. package/lib/components/XUtils.d.ts +12 -2
  54. package/lib/components/XUtils.js +94 -1
  55. package/lib/components/XUtilsConversions.d.ts +1 -0
  56. package/lib/components/XUtilsConversions.js +14 -1
  57. package/lib/components/XUtilsMetadata.d.ts +4 -1
  58. package/lib/components/XUtilsMetadata.js +46 -7
  59. package/lib/serverApi/ExportImportParam.d.ts +2 -0
  60. package/lib/serverApi/FindParam.d.ts +10 -2
  61. package/lib/serverApi/XUtilsCommon.d.ts +1 -0
  62. package/lib/serverApi/XUtilsCommon.js +4 -0
  63. package/package.json +1 -1
@@ -60,7 +60,8 @@ var __values = (this && this.__values) || function(o) {
60
60
  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
61
61
  };
62
62
  Object.defineProperty(exports, "__esModule", { value: true });
63
- 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");
64
65
  var react_1 = __importStar(require("react"));
65
66
  var XDropdownDT_1 = require("./XDropdownDT");
66
67
  var datatable_1 = require("primereact/datatable");
@@ -76,6 +77,8 @@ var XInputDateDT_1 = require("./XInputDateDT");
76
77
  var XCheckboxDT_1 = require("./XCheckboxDT");
77
78
  var tristatecheckbox_1 = require("primereact/tristatecheckbox");
78
79
  var api_1 = require("primereact/api");
80
+ var XAutoCompleteDT_1 = require("./XAutoCompleteDT");
81
+ var XButtonIconNarrow_1 = require("./XButtonIconNarrow");
79
82
  var XFormDataTable2 = /** @class */ (function (_super) {
80
83
  __extends(XFormDataTable2, _super);
81
84
  function XFormDataTable2(props) {
@@ -94,8 +97,9 @@ var XFormDataTable2 = /** @class */ (function (_super) {
94
97
  dropdownOptionsMap: {},
95
98
  filters: _this.createInitFilters()
96
99
  };
97
- _this.onClickAddRowDefault = _this.onClickAddRowDefault.bind(_this);
98
- _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);
99
103
  _this.onSelectionChange = _this.onSelectionChange.bind(_this);
100
104
  _this.onDropdownOptionsMapChange = _this.onDropdownOptionsMapChange.bind(_this);
101
105
  _this.onFilter = _this.onFilter.bind(_this);
@@ -104,12 +108,13 @@ var XFormDataTable2 = /** @class */ (function (_super) {
104
108
  _this.onDropdownFilterChange = _this.onDropdownFilterChange.bind(_this);
105
109
  _this.getDropdownFilterValue = _this.getDropdownFilterValue.bind(_this);
106
110
  _this.bodyTemplate = _this.bodyTemplate.bind(_this);
111
+ props.form.addXFormDataTable(_this);
107
112
  try {
108
113
  //props.form.addField(props.assocField + '.*FAKE*'); - vzdy mame aspon 1 field, nie je to potrebne
109
114
  for (var _b = __values(props.children), _c = _b.next(); !_c.done; _c = _b.next()) {
110
115
  var child = _c.value;
111
116
  var childColumn = child; // nevedel som to krajsie...
112
- var field = props.assocField + '.' + XFormDataTable2.getPathForColumn(childColumn.props);
117
+ var field = props.assocField + '.' + _this.getPathForColumn(childColumn.props);
113
118
  props.form.addField(field);
114
119
  }
115
120
  }
@@ -122,7 +127,7 @@ var XFormDataTable2 = /** @class */ (function (_super) {
122
127
  }
123
128
  return _this;
124
129
  }
125
- XFormDataTable2.getPathForColumn = function (columnProps) {
130
+ XFormDataTable2.prototype.getPathForColumn = function (columnProps) {
126
131
  if (columnProps.type === "inputSimple") {
127
132
  var columnPropsInputSimple = columnProps;
128
133
  return columnPropsInputSimple.field;
@@ -131,6 +136,10 @@ var XFormDataTable2 = /** @class */ (function (_super) {
131
136
  var columnPropsDropdown = columnProps;
132
137
  return columnPropsDropdown.assocField + '.' + columnPropsDropdown.displayField;
133
138
  }
139
+ else if (columnProps.type === "autoComplete") {
140
+ var columnPropsAutoComplete = columnProps;
141
+ return columnPropsAutoComplete.assocField + '.' + this.getDisplayFieldOrId(columnPropsAutoComplete);
142
+ }
134
143
  else if (columnProps.type === "searchButton") {
135
144
  var columnPropsSearchButton = columnProps;
136
145
  return columnPropsSearchButton.assocField + '.' + columnPropsSearchButton.displayField;
@@ -139,8 +148,21 @@ var XFormDataTable2 = /** @class */ (function (_super) {
139
148
  throw "Unknown prop type = " + columnProps.type;
140
149
  }
141
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
+ };
142
164
  XFormDataTable2.getHeader = function (columnProps, xEntity, field, xField) {
143
- var _a, _b, _c;
165
+ var _a, _b, _c, _d;
144
166
  // poznamky - parametre field a xField by sme mohli vyratavat na zaklade columnProps ale kedze ich uz mame, setrime performance a neduplikujeme vypocet
145
167
  // nie je to tu uplne idealne nakodene, ale je to pomerne prehladne
146
168
  var isNullable = true;
@@ -156,16 +178,22 @@ var XFormDataTable2 = /** @class */ (function (_super) {
156
178
  isNullable = xAssoc.isNullable;
157
179
  readOnly = (_a = columnProps.readOnly) !== null && _a !== void 0 ? _a : false;
158
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
+ }
159
187
  else if (columnProps.type === "searchButton") {
160
188
  var columnPropsSearchButton = columnProps;
161
189
  var xAssoc = XUtilsMetadata_1.XUtilsMetadata.getXAssocToOne(xEntity, columnPropsSearchButton.assocField);
162
190
  isNullable = xAssoc.isNullable;
163
- readOnly = (_b = columnProps.readOnly) !== null && _b !== void 0 ? _b : false;
191
+ readOnly = (_c = columnProps.readOnly) !== null && _c !== void 0 ? _c : false;
164
192
  }
165
193
  else {
166
194
  throw "Unknown prop type = " + columnProps.type;
167
195
  }
168
- var header = (_c = columnProps.header) !== null && _c !== void 0 ? _c : field;
196
+ var header = (_d = columnProps.header) !== null && _d !== void 0 ? _d : field;
169
197
  if (!isNullable && !readOnly) {
170
198
  header = XUtils_1.XUtils.markNotNull(header);
171
199
  }
@@ -180,13 +208,16 @@ var XFormDataTable2 = /** @class */ (function (_super) {
180
208
  XFormDataTable2.prototype.createInitFilters = function () {
181
209
  var e_2, _a;
182
210
  var initFilters = {};
211
+ if (this.props.filterDisplay === "none") {
212
+ return initFilters;
213
+ }
183
214
  var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(this.getEntity());
184
215
  try {
185
216
  // TODO - asi by bolo fajn si tieto field, xField niekam ulozit a iterovat ulozene hodnoty, pouziva sa to na viacerych miestach
186
217
  for (var _b = __values(this.props.children), _c = _b.next(); !_c.done; _c = _b.next()) {
187
218
  var child = _c.value;
188
219
  var childColumn = child; // nevedel som to krajsie...
189
- var field = XFormDataTable2.getPathForColumn(childColumn.props);
220
+ var field = this.getPathForColumn(childColumn.props);
190
221
  var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, field);
191
222
  // TODO column.props.dropdownInFilter - pre "menu" by bolo fajn mat zoznam "enumov"
192
223
  var filterMatchMode = this.getFilterMatchMode(xField);
@@ -303,29 +334,38 @@ var XFormDataTable2 = /** @class */ (function (_super) {
303
334
  }
304
335
  */
305
336
  // body={(rowData: any) => bodyTemplate(childColumn.props.field, rowData)}
306
- XFormDataTable2.prototype.bodyTemplate = function (columnProps, rowData, xEntity) {
337
+ XFormDataTable2.prototype.bodyTemplate = function (columnProps, tableReadOnly, rowData, xEntity) {
338
+ var _a, _b;
307
339
  var body;
308
340
  if (columnProps.type === "inputSimple") {
309
341
  var columnPropsInputSimple = columnProps;
342
+ // tableReadOnly has higher prio then property readOnly
343
+ var readOnly = tableReadOnly || ((_a = columnPropsInputSimple.readOnly) !== null && _a !== void 0 ? _a : false);
310
344
  var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, columnPropsInputSimple.field);
311
345
  if (xField.type === "decimal" || xField.type === "number") {
312
- body = react_1.default.createElement(XInputDecimalDT_1.XInputDecimalDT, { form: this.props.form, entity: this.getEntity(), field: columnPropsInputSimple.field, rowData: rowData, readOnly: columnPropsInputSimple.readOnly });
346
+ 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 });
313
347
  }
314
348
  else if (xField.type === "date" || xField.type === "datetime") {
315
- body = react_1.default.createElement(XInputDateDT_1.XInputDateDT, { form: this.props.form, xField: xField, field: columnPropsInputSimple.field, rowData: rowData, readOnly: columnPropsInputSimple.readOnly });
349
+ body = react_1.default.createElement(XInputDateDT_1.XInputDateDT, { form: this.props.form, xField: xField, field: columnPropsInputSimple.field, rowData: rowData, readOnly: readOnly });
316
350
  }
317
351
  else if (xField.type === "boolean") {
318
- body = react_1.default.createElement(XCheckboxDT_1.XCheckboxDT, { form: this.props.form, xField: xField, field: columnPropsInputSimple.field, rowData: rowData, readOnly: columnPropsInputSimple.readOnly });
352
+ body = react_1.default.createElement(XCheckboxDT_1.XCheckboxDT, { form: this.props.form, xField: xField, field: columnPropsInputSimple.field, rowData: rowData, readOnly: readOnly });
319
353
  }
320
354
  else {
321
355
  // xField.type === "string", pripadne ine jednoduche typy
322
- body = react_1.default.createElement(XInputTextDT_1.XInputTextDT, { form: this.props.form, entity: this.getEntity(), field: columnPropsInputSimple.field, rowData: rowData, readOnly: columnPropsInputSimple.readOnly });
356
+ body = react_1.default.createElement(XInputTextDT_1.XInputTextDT, { form: this.props.form, entity: this.getEntity(), field: columnPropsInputSimple.field, rowData: rowData, readOnly: readOnly });
323
357
  }
324
358
  }
325
359
  else if (columnProps.type === "dropdown") {
326
360
  var columnPropsDropdown = columnProps;
327
361
  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 });
328
362
  }
363
+ else if (columnProps.type === "autoComplete") {
364
+ var columnPropsAutoComplete = columnProps;
365
+ // tableReadOnly has higher prio then property readOnly
366
+ var readOnly = tableReadOnly || ((_b = columnPropsAutoComplete.readOnly) !== null && _b !== void 0 ? _b : false);
367
+ 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 });
368
+ }
329
369
  else if (columnProps.type === "searchButton") {
330
370
  var columnPropsSearchButton = columnProps;
331
371
  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 });
@@ -335,19 +375,123 @@ var XFormDataTable2 = /** @class */ (function (_super) {
335
375
  }
336
376
  return body;
337
377
  };
338
- XFormDataTable2.prototype.onClickAddRowDefault = function () {
339
- this.props.form.onTableAddRow(this.props.assocField, {}, this.dataKey, this.state.selectedRow);
378
+ XFormDataTable2.prototype.onClickAddRow = function () {
379
+ if (this.props.onClickAddRow) {
380
+ // custom add row
381
+ this.props.onClickAddRow();
382
+ }
383
+ else {
384
+ // default add row
385
+ this.props.form.onTableAddRow(this.props.assocField, {}, this.dataKey, this.state.selectedRow);
386
+ }
340
387
  };
341
388
  ;
342
- XFormDataTable2.prototype.onClickRemoveRowDefault = function () {
389
+ XFormDataTable2.prototype.onClickRemoveRowBySelection = function () {
343
390
  if (this.state.selectedRow !== undefined) {
344
- this.props.form.onTableRemoveRow(this.props.assocField, this.state.selectedRow);
391
+ this.removeRow(this.state.selectedRow);
345
392
  }
346
393
  else {
347
394
  alert("Please select the row.");
348
395
  }
349
396
  };
350
397
  ;
398
+ XFormDataTable2.prototype.removeRow = function (row) {
399
+ if (this.props.onClickRemoveRow) {
400
+ // custom remove
401
+ this.props.onClickRemoveRow(row);
402
+ }
403
+ else {
404
+ // default remove
405
+ this.props.form.onTableRemoveRow(this.props.assocField, row);
406
+ }
407
+ };
408
+ XFormDataTable2.prototype.validate = function () {
409
+ var e_3, _a, e_4, _b;
410
+ // zvalidujeme vsetky rows a pripadne chyby zapiseme do specialneho fieldu __x_rowTechData
411
+ var object = this.props.form.getXObject();
412
+ var rowList = object[this.props.assocField];
413
+ try {
414
+ for (var rowList_1 = __values(rowList), rowList_1_1 = rowList_1.next(); !rowList_1_1.done; rowList_1_1 = rowList_1.next()) {
415
+ var row = rowList_1_1.value;
416
+ var xRowTechData = XFormBase_1.XFormBase.getXRowTechData(row);
417
+ var xErrorMap = {};
418
+ try {
419
+ for (var _c = (e_4 = void 0, __values(xRowTechData.xFormComponentDTList)), _d = _c.next(); !_d.done; _d = _c.next()) {
420
+ var xFormComponentDT = _d.value;
421
+ var errorItem = xFormComponentDT.validate();
422
+ if (errorItem) {
423
+ //console.log("Mame field = " + errorItem.field);
424
+ xErrorMap[errorItem.field] = errorItem.xError;
425
+ }
426
+ }
427
+ }
428
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
429
+ finally {
430
+ try {
431
+ if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
432
+ }
433
+ finally { if (e_4) throw e_4.error; }
434
+ }
435
+ xRowTechData.errorMap = xErrorMap;
436
+ }
437
+ }
438
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
439
+ finally {
440
+ try {
441
+ if (rowList_1_1 && !rowList_1_1.done && (_a = rowList_1.return)) _a.call(rowList_1);
442
+ }
443
+ finally { if (e_3) throw e_3.error; }
444
+ }
445
+ };
446
+ XFormDataTable2.prototype.getErrorMessages = function () {
447
+ var e_5, _a;
448
+ var msg = "";
449
+ var object = this.props.form.getXObject();
450
+ var rowList = object[this.props.assocField];
451
+ try {
452
+ for (var rowList_2 = __values(rowList), rowList_2_1 = rowList_2.next(); !rowList_2_1.done; rowList_2_1 = rowList_2.next()) {
453
+ var row = rowList_2_1.value;
454
+ var xRowTechData = XFormBase_1.XFormBase.getXRowTechData(row);
455
+ msg += XUtils_1.XUtils.getErrorMessages(xRowTechData.errorMap);
456
+ }
457
+ }
458
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
459
+ finally {
460
+ try {
461
+ if (rowList_2_1 && !rowList_2_1.done && (_a = rowList_2.return)) _a.call(rowList_2);
462
+ }
463
+ finally { if (e_5) throw e_5.error; }
464
+ }
465
+ return msg;
466
+ };
467
+ // TODO - velmi podobna funkcia ako XFormComponent.isReadOnly() - zjednotit ak sa da
468
+ XFormDataTable2.prototype.isReadOnly = function () {
469
+ var readOnly;
470
+ // the purpose of formReadOnly is to put the whole form to read only mode,
471
+ // that's why the formReadOnly has higher prio then property this.props.readOnly
472
+ if (this.props.form.formReadOnlyBase(this.props.assocField)) {
473
+ readOnly = true;
474
+ }
475
+ else if (typeof this.props.readOnly === 'boolean') {
476
+ readOnly = this.props.readOnly;
477
+ }
478
+ // TODO
479
+ // else if (typeof this.props.readOnly === 'function') {
480
+ // // TODO - tazko povedat ci niekedy bude object === null (asi ano vid metodu getFilterBase)
481
+ // const object: XObject = this.props.form.state.object;
482
+ // if (object) {
483
+ // readOnly = this.props.readOnly(this.props.form.getXObject());
484
+ // }
485
+ // else {
486
+ // readOnly = true;
487
+ // }
488
+ // }
489
+ else {
490
+ // readOnly is undefined
491
+ readOnly = false;
492
+ }
493
+ return readOnly;
494
+ };
351
495
  XFormDataTable2.prototype.render = function () {
352
496
  var _this = this;
353
497
  var paginator = this.props.paginator !== undefined ? this.props.paginator : false;
@@ -360,12 +504,11 @@ var XFormDataTable2 = /** @class */ (function (_super) {
360
504
  rows = 5; // default
361
505
  }
362
506
  }
507
+ var filterDisplay = this.props.filterDisplay !== "none" ? this.props.filterDisplay : undefined;
363
508
  var label = this.props.label !== undefined ? this.props.label : this.props.assocField;
364
- var readOnly = this.props.readOnly !== undefined ? this.props.readOnly : false;
509
+ var readOnly = this.isReadOnly();
365
510
  // v bloku function (child) nejde pouzit priamo this, thisLocal uz ide pouzit
366
511
  var thisLocal = this;
367
- var onClickAddRow = this.props.onClickAddRow !== undefined ? this.props.onClickAddRow : this.onClickAddRowDefault;
368
- var onClickRemoveRow = this.props.onClickRemoveRow !== undefined ? this.props.onClickRemoveRow : this.onClickRemoveRowDefault;
369
512
  var object = this.props.form.state.object;
370
513
  var valueList = object !== null ? object[this.props.assocField] : [];
371
514
  var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(this.getEntity());
@@ -404,31 +547,35 @@ var XFormDataTable2 = /** @class */ (function (_super) {
404
547
  var childColumnProps = childColumn.props;
405
548
  // je dolezite, aby field obsahoval cely path az po zobrazovany atribut, lebo podla neho sa vykonava filtrovanie a sortovanie
406
549
  // (aj ked, da sa to prebit na stlpcoch (na elemente Column), su na to atributy)
407
- var field = XFormDataTable2.getPathForColumn(childColumnProps);
550
+ var field = thisLocal.getPathForColumn(childColumnProps);
408
551
  // TODO - toto by sa mohlo vytiahnut vyssie, aj v bodyTemplate sa vola metoda XUtilsMetadata.getXFieldByPath
409
552
  var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, field);
410
553
  // *********** header ***********
411
554
  var header = XFormDataTable2.getHeader(childColumnProps, xEntity, field, xField);
412
555
  // *********** filterElement ***********
413
556
  var filterElement;
414
- if (xField.type === "boolean") {
415
- var checkboxValue = thisLocal.getCheckboxFilterValue(field);
416
- filterElement = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: checkboxValue, onChange: function (e) { return thisLocal.onCheckboxFilterChange(field, e.value); } });
417
- }
418
- else if (childColumnProps.dropdownInFilter) {
419
- var dropdownValue = thisLocal.getDropdownFilterValue(field);
420
- filterElement = react_1.default.createElement(XDropdownDTFilter_1.XDropdownDTFilter, { entity: thisLocal.getEntity(), path: field, value: dropdownValue, onValueChange: thisLocal.onDropdownFilterChange });
557
+ if (thisLocal.props.filterDisplay !== "none") {
558
+ if (xField.type === "boolean") {
559
+ var checkboxValue = thisLocal.getCheckboxFilterValue(field);
560
+ filterElement = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: checkboxValue, onChange: function (e) { return thisLocal.onCheckboxFilterChange(field, e.value); } });
561
+ }
562
+ else if (childColumnProps.dropdownInFilter) {
563
+ var dropdownValue = thisLocal.getDropdownFilterValue(field);
564
+ filterElement = react_1.default.createElement(XDropdownDTFilter_1.XDropdownDTFilter, { entity: thisLocal.getEntity(), path: field, value: dropdownValue, onValueChange: thisLocal.onDropdownFilterChange });
565
+ }
421
566
  }
422
567
  // *********** showFilterMenu ***********
423
- var showFilterMenu;
424
- if (childColumnProps.showFilterMenu !== undefined) {
425
- showFilterMenu = childColumnProps.showFilterMenu;
426
- }
427
- else {
428
- showFilterMenu = true; // default
429
- if (thisLocal.props.filterDisplay === "row") {
430
- if (xField.type === "boolean" || childColumnProps.dropdownInFilter) {
431
- showFilterMenu = false;
568
+ var showFilterMenu = false;
569
+ if (thisLocal.props.filterDisplay !== "none") {
570
+ if (childColumnProps.showFilterMenu !== undefined) {
571
+ showFilterMenu = childColumnProps.showFilterMenu;
572
+ }
573
+ else {
574
+ showFilterMenu = true; // default
575
+ if (thisLocal.props.filterDisplay === "row") {
576
+ if (xField.type === "boolean" || childColumnProps.dropdownInFilter) {
577
+ showFilterMenu = false;
578
+ }
432
579
  }
433
580
  }
434
581
  }
@@ -438,10 +585,10 @@ var XFormDataTable2 = /** @class */ (function (_super) {
438
585
  // *********** width/headerStyle ***********
439
586
  var width = XUtils_1.XUtils.processPropWidth(childColumn.props.width);
440
587
  if (width === undefined || width === "default") {
441
- // TODO - if filter not used at all, then buttons flags should be false
442
588
  var filterMenuInFilterRow = thisLocal.props.filterDisplay === "row" && showFilterMenu;
589
+ var sortableButtonInHeader = thisLocal.props.sortable;
443
590
  var filterButtonInHeader = thisLocal.props.filterDisplay === "menu";
444
- width = XUtilsMetadata_1.XUtilsMetadata.computeColumnWidth(xField, filterMenuInFilterRow, childColumnProps.type, header, filterButtonInHeader);
591
+ width = XUtilsMetadata_1.XUtilsMetadata.computeColumnWidth(xField, filterMenuInFilterRow, childColumnProps.type, header, sortableButtonInHeader, filterButtonInHeader);
445
592
  }
446
593
  var headerStyle = {};
447
594
  if (width !== undefined) {
@@ -463,24 +610,32 @@ var XFormDataTable2 = /** @class */ (function (_super) {
463
610
  align = "center";
464
611
  }
465
612
  // }
466
- return react_1.default.createElement(column_1.Column, { field: field, header: header, filter: true, sortable: true, filterElement: filterElement, showFilterMenu: showFilterMenu, showClearButton: showClearButton, headerStyle: headerStyle, align: align, body: function (rowData) { return thisLocal.bodyTemplate(childColumnProps, rowData, xEntity); } });
613
+ 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); } });
467
614
  });
615
+ if (this.props.removeButtonInRow) {
616
+ // je dolezite nastavit sirku header-a, lebo inac ma stlpec sirku 0 a nevidno ho
617
+ 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 }); } }));
618
+ }
468
619
  return (react_1.default.createElement("div", null,
469
620
  react_1.default.createElement("div", { className: "flex justify-content-center" },
470
621
  react_1.default.createElement("label", null, label)),
471
622
  react_1.default.createElement("div", { className: "flex justify-content-center" },
472
- 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: this.props.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)),
623
+ 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)),
473
624
  react_1.default.createElement("div", { className: "flex justify-content-center" },
474
- react_1.default.createElement(XButton_1.XButton, { label: "Add row", onClick: onClickAddRow }),
475
- react_1.default.createElement(XButton_1.XButton, { label: "Remove row", onClick: onClickRemoveRow }))));
625
+ react_1.default.createElement(XButton_1.XButton, { icon: this.props.addRowIcon, label: this.props.addRowLabel, onClick: this.onClickAddRow, disabled: readOnly }),
626
+ this.props.removeButtonInRow ? undefined : react_1.default.createElement(XButton_1.XButton, { icon: this.props.removeRowIcon, label: this.props.removeRowLabel, onClick: this.onClickRemoveRowBySelection, disabled: readOnly }))));
476
627
  };
477
628
  XFormDataTable2.defaultProps = {
478
629
  filterDisplay: "row",
630
+ sortable: true,
479
631
  scrollable: true,
480
632
  scrollWidth: '100%',
481
633
  scrollHeight: '200vh',
482
634
  // tym ze pouzivame 200vh (max-height pre body), tak realne scrollovanie sa zapne az pri velmi vela riadkoch
483
- shrinkWidth: true
635
+ shrinkWidth: true,
636
+ removeButtonInRow: false,
637
+ addRowLabel: 'Add row',
638
+ removeRowLabel: 'Remove row'
484
639
  };
485
640
  return XFormDataTable2;
486
641
  }(react_1.Component));
@@ -501,6 +656,14 @@ exports.XFormDropdownColumn = XFormDropdownColumn;
501
656
  exports.XFormDropdownColumn.defaultProps = {
502
657
  type: "dropdown"
503
658
  };
659
+ var XFormAutoCompleteColumn = function (props) {
660
+ // nevadi ze tu nic nevraciame, field a header vieme precitat a zvysok by sme aj tak zahodili lebo vytvarame novy element
661
+ return (null);
662
+ };
663
+ exports.XFormAutoCompleteColumn = XFormAutoCompleteColumn;
664
+ exports.XFormAutoCompleteColumn.defaultProps = {
665
+ type: "autoComplete"
666
+ };
504
667
  var XFormSearchButtonColumn = function (props) {
505
668
  // nevadi ze tu nic nevraciame, field a header vieme precitat a zvysok by sme aj tak zahodili lebo vytvarame novy element
506
669
  return (null);
@@ -1,11 +1,11 @@
1
1
  import React from "react";
2
2
  import { XFormComponent, XFormComponentProps } from "./XFormComponent";
3
3
  import { XField } from "../serverApi/XEntityMetadata";
4
- export interface XInputProps extends XFormComponentProps {
4
+ export interface XInputProps<T> extends XFormComponentProps<T> {
5
5
  field: string;
6
6
  inputStyle?: React.CSSProperties;
7
7
  }
8
- export declare abstract class XInput<P extends XInputProps> extends XFormComponent<P> {
8
+ export declare abstract class XInput<T, P extends XInputProps<T>> extends XFormComponent<T, P> {
9
9
  protected xField: XField;
10
10
  protected constructor(props: P);
11
11
  getField(): string;
@@ -0,0 +1,11 @@
1
+ import { XField } from "../serverApi/XEntityMetadata";
2
+ import { XFormComponentDT, XFormComponentDTProps } from "./XFormComponentDT";
3
+ export interface XInputDTProps extends XFormComponentDTProps {
4
+ field: string;
5
+ }
6
+ export declare abstract class XInputDT<P extends XInputDTProps> extends XFormComponentDT<P> {
7
+ protected xField: XField;
8
+ protected constructor(props: P);
9
+ getField(): string;
10
+ isNotNull(): boolean;
11
+ }
@@ -0,0 +1,37 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.XInputDT = void 0;
19
+ var XUtilsMetadata_1 = require("./XUtilsMetadata");
20
+ var XFormComponentDT_1 = require("./XFormComponentDT");
21
+ // spolocna nadtrieda pre jednoduche inputy (nie asociacne)
22
+ var XInputDT = /** @class */ (function (_super) {
23
+ __extends(XInputDT, _super);
24
+ function XInputDT(props) {
25
+ var _this = _super.call(this, props) || this;
26
+ _this.xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPathStr(props.entity, props.field);
27
+ return _this;
28
+ }
29
+ XInputDT.prototype.getField = function () {
30
+ return this.props.field;
31
+ };
32
+ XInputDT.prototype.isNotNull = function () {
33
+ return !this.xField.isNullable;
34
+ };
35
+ return XInputDT;
36
+ }(XFormComponentDT_1.XFormComponentDT));
37
+ exports.XInputDT = XInputDT;
@@ -1,8 +1,9 @@
1
- /// <reference types="react" />
2
1
  import { XFormBase } from "./XFormBase";
2
+ import React from "react";
3
3
  export declare const XInputDate: (props: {
4
4
  form: XFormBase;
5
5
  field: string;
6
6
  label?: string | undefined;
7
7
  readOnly?: boolean | undefined;
8
+ labelStyle?: React.CSSProperties | undefined;
8
9
  }) => JSX.Element;
@@ -11,13 +11,13 @@ var XUtilsMetadata_1 = require("./XUtilsMetadata");
11
11
  var XUtilsCommon_1 = require("../serverApi/XUtilsCommon");
12
12
  var XUtils_1 = require("./XUtils");
13
13
  var XInputDate = function (props) {
14
- var _a;
14
+ var _a, _b;
15
15
  props.form.addField(props.field);
16
16
  var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPathStr(props.form.getEntity(), props.field);
17
17
  var showTime = (xField.type === 'datetime');
18
18
  var cssClassName = showTime ? 'x-input-datetime' : 'x-input-date';
19
19
  var label = (_a = props.label) !== null && _a !== void 0 ? _a : props.field;
20
- var readOnly = XUtils_1.XUtils.isReadOnly(props.field, props.readOnly);
20
+ var readOnly = XUtils_1.XUtils.isReadOnly(props.field, props.readOnly) || props.form.formReadOnlyBase(props.field);
21
21
  if (!xField.isNullable && !readOnly) {
22
22
  label = XUtils_1.XUtils.markNotNull(label);
23
23
  }
@@ -49,8 +49,10 @@ var XInputDate = function (props) {
49
49
  }
50
50
  // fieldValue zostalo undefined (konvertujeme null -> undefined) - Calendar pozaduje undefined, nechce null
51
51
  }
52
+ var labelStyle = (_b = props.labelStyle) !== null && _b !== void 0 ? _b : {};
53
+ XUtils_1.XUtils.addCssPropIfNotExists(labelStyle, { width: XUtils_1.XUtils.FIELD_LABEL_WIDTH });
52
54
  return (react_1.default.createElement("div", { className: "field grid" },
53
- react_1.default.createElement("label", { htmlFor: props.field, className: "col-fixed", style: { width: XUtils_1.XUtils.FIELD_LABEL_WIDTH } }, label),
55
+ react_1.default.createElement("label", { htmlFor: props.field, className: "col-fixed", style: labelStyle }, label),
54
56
  react_1.default.createElement(calendar_1.Calendar, { id: props.field, value: fieldValue, onChange: onValueChange, disabled: readOnly, showIcon: true, dateFormat: (0, XUtilsConversions_1.dateFormatCalendar)(), showTime: showTime, showSeconds: showTime, inputClassName: cssClassName, showOnFocus: false })));
55
57
  };
56
58
  exports.XInputDate = XInputDate;
@@ -1,8 +1,15 @@
1
1
  import React from "react";
2
2
  import { XFormComponentProps } from "./XFormComponent";
3
- export interface XInputDecimalProps extends XFormComponentProps {
3
+ import { XInput } from "./XInput";
4
+ export interface XInputDecimalProps extends XFormComponentProps<number> {
4
5
  field: string;
5
6
  size?: number;
6
7
  inputStyle?: React.CSSProperties;
7
8
  }
8
- export declare const XInputDecimal: (props: XInputDecimalProps) => JSX.Element;
9
+ export declare class XInputDecimal extends XInput<number, XInputDecimalProps> {
10
+ constructor(props: XInputDecimalProps);
11
+ getValue(): number | undefined;
12
+ onValueChange(e: any): void;
13
+ onBlur(e: any): void;
14
+ render(): JSX.Element;
15
+ }