@michalrakus/x-react-web-lib 0.25.0 → 1.1.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 (67) hide show
  1. package/LICENSE.md +21 -0
  2. package/XEnvVars.d.ts +3 -0
  3. package/XEnvVars.js +5 -0
  4. package/XInputTextarea.d.ts +3 -0
  5. package/XInputTextarea.js +5 -0
  6. package/gulpfile.js +2 -0
  7. package/lib/administration/XBrowseMetaForm.js +1 -1
  8. package/lib/administration/XUserBrowse.js +5 -4
  9. package/lib/administration/XUserForm.js +40 -28
  10. package/lib/components/SourceCodeLinkEntity.js +1 -1
  11. package/lib/components/XAutoComplete.d.ts +3 -3
  12. package/lib/components/XAutoComplete.js +16 -37
  13. package/lib/components/XAutoCompleteBase.d.ts +1 -1
  14. package/lib/components/XAutoCompleteBase.js +23 -22
  15. package/lib/components/XBrowse.js +7 -3
  16. package/lib/components/XChangePasswordForm.js +9 -5
  17. package/lib/components/XCheckbox.d.ts +8 -9
  18. package/lib/components/XCheckbox.js +38 -30
  19. package/lib/components/XDataTable.js +11 -7
  20. package/lib/components/XDropdown.d.ts +4 -3
  21. package/lib/components/XDropdown.js +21 -44
  22. package/lib/components/XDropdownDT.js +7 -3
  23. package/lib/components/XDropdownDTFilter.js +9 -5
  24. package/lib/components/XDropdownFormDTFilter.js +9 -5
  25. package/lib/components/XEditColumnDialog.js +9 -5
  26. package/lib/components/XEnvVars.d.ts +12 -0
  27. package/lib/components/XEnvVars.js +20 -0
  28. package/lib/components/XErrors.d.ts +1 -0
  29. package/lib/components/XExportRowsDialog.js +12 -6
  30. package/lib/components/XFieldSelector.js +8 -4
  31. package/lib/components/XFormBase.d.ts +1 -0
  32. package/lib/components/XFormBase.js +47 -21
  33. package/lib/components/XFormComponent.d.ts +10 -6
  34. package/lib/components/XFormComponent.js +60 -48
  35. package/lib/components/XFormDataTable2.d.ts +8 -3
  36. package/lib/components/XFormDataTable2.js +106 -28
  37. package/lib/components/XFormNavigator3.js +14 -6
  38. package/lib/components/XInput.d.ts +13 -0
  39. package/lib/components/XInput.js +38 -0
  40. package/lib/components/XInputDate.js +1 -1
  41. package/lib/components/XInputDateDT.js +1 -1
  42. package/lib/components/XInputText.d.ts +6 -11
  43. package/lib/components/XInputText.js +14 -49
  44. package/lib/components/XInputTextDT.js +2 -3
  45. package/lib/components/XInputTextarea.d.ts +18 -0
  46. package/lib/components/XInputTextarea.js +85 -0
  47. package/lib/components/XLazyDataTable.d.ts +3 -0
  48. package/lib/components/XLazyDataTable.js +162 -77
  49. package/lib/components/XLoginForm.js +9 -5
  50. package/lib/components/XResponseError.js +1 -1
  51. package/lib/components/XSearchButton.d.ts +2 -3
  52. package/lib/components/XSearchButton.js +12 -35
  53. package/lib/components/XSearchButtonDT.js +10 -6
  54. package/lib/components/XSearchButtonOld.js +10 -6
  55. package/lib/components/XToken.d.ts +4 -3
  56. package/lib/components/XUtils.d.ts +13 -4
  57. package/lib/components/XUtils.js +90 -15
  58. package/lib/components/XUtilsConversions.js +10 -2
  59. package/lib/components/XUtilsMetadata.d.ts +1 -1
  60. package/lib/components/XUtilsMetadata.js +20 -11
  61. package/lib/components/useXToken.js +1 -1
  62. package/lib/serverApi/ExportImportParam.d.ts +3 -3
  63. package/lib/serverApi/FindParam.d.ts +3 -13
  64. package/lib/serverApi/FindParam.js +14 -0
  65. package/lib/serverApi/XUser.d.ts +1 -0
  66. package/lib/serverApi/XUtilsCommon.js +2 -2
  67. package/package.json +34 -32
@@ -17,6 +17,8 @@ var __extends = (this && this.__extends) || (function () {
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.XFormComponent = void 0;
19
19
  var react_1 = require("react");
20
+ var XUtilsCommon_1 = require("../serverApi/XUtilsCommon");
21
+ var XUtils_1 = require("./XUtils");
20
22
  var XFormComponent = /** @class */ (function (_super) {
21
23
  __extends(XFormComponent, _super);
22
24
  function XFormComponent(props) {
@@ -24,24 +26,64 @@ var XFormComponent = /** @class */ (function (_super) {
24
26
  props.form.addXFormComponent(_this);
25
27
  return _this;
26
28
  }
27
- // pomocna metodka, sluzi napr. na validaciu not null atributov
28
- // should be overriden
29
- XFormComponent.prototype.getFieldForEdit = function () {
30
- return undefined;
29
+ // ******** read and write from/into form.state.object ***********
30
+ // reads value from form.state.object
31
+ // can be overridden, but this should work for every component
32
+ XFormComponent.prototype.getValueFromObject = function () {
33
+ var objectValue = null;
34
+ var object = this.props.form.state.object;
35
+ if (object !== null) {
36
+ objectValue = XUtilsCommon_1.XUtilsCommon.getValueByPath(object, this.getField());
37
+ // pre istotu dame na null, null je standard
38
+ if (objectValue === undefined) {
39
+ objectValue = null;
40
+ }
41
+ }
42
+ return objectValue;
43
+ };
44
+ // writes value into form.state.object
45
+ XFormComponent.prototype.onValueChangeBase = function (value) {
46
+ var error = this.validateOnChange(value);
47
+ this.props.form.onFieldChange(this.getField(), value, error);
48
+ };
49
+ XFormComponent.prototype.isReadOnly = function () {
50
+ // tuto do buducna planujeme pridat aj dynamicky readOnly, bude ho treba ukladat do form.state podobne ako sa ukladaju errory do form.state.errorMap
51
+ return XUtils_1.XUtils.isReadOnly(this.getField(), this.props.readOnly);
31
52
  };
53
+ XFormComponent.prototype.getLabel = function () {
54
+ var _a;
55
+ var label = (_a = this.props.label) !== null && _a !== void 0 ? _a : this.getField();
56
+ // test na readOnly je tu hlavne koli tomu aby sme nemali * pri ID atribute, ktory sa pri inserte generuje az pri zapise do DB
57
+ if (this.isNotNull() && !this.isReadOnly()) {
58
+ label = XUtils_1.XUtils.markNotNull(label);
59
+ }
60
+ return label;
61
+ };
62
+ XFormComponent.prototype.getLabelStyle = function () {
63
+ var _a, _b;
64
+ var labelStyle = (_a = this.props.labelStyle) !== null && _a !== void 0 ? _a : {};
65
+ var inline = (_b = this.props.inline) !== null && _b !== void 0 ? _b : false;
66
+ if (!inline) {
67
+ XUtils_1.XUtils.addCssPropIfNotExists(labelStyle, { width: XUtils_1.XUtils.FIELD_LABEL_WIDTH });
68
+ }
69
+ else {
70
+ XUtils_1.XUtils.addCssPropIfNotExists(labelStyle, { width: 'auto' }); // podla dlzky labelu
71
+ XUtils_1.XUtils.addCssPropIfNotExists(labelStyle, { marginLeft: '1rem' });
72
+ }
73
+ return labelStyle;
74
+ };
75
+ // *********** validation support ************
32
76
  // volane po kliknuti na Save
33
- // vrati error message ak nezbehne "field validacia", ak zbehne, vrati undefined
77
+ // vrati (field, XError) ak nezbehne "field validacia", ak zbehne, vrati undefined
34
78
  XFormComponent.prototype.validate = function () {
79
+ // TODO - FILOZOFICKA OTAZKA - volat validaciu aj ked je field readOnly (this.isReadOnly() === true)? zatial dame ze hej...
35
80
  var value = this.getValueFromObject();
36
81
  // not null validacia + custom field validacia volana na onChange
37
82
  var errorOnChange = this.validateOnChange(value);
38
83
  // custom field validacia volana na onBlur (focus lost)
39
84
  // TODO
40
85
  if (errorOnChange) {
41
- var field = this.getFieldForEdit();
42
- if (field) {
43
- return { field: field, xError: { onChange: errorOnChange } };
44
- }
86
+ return { field: this.getField(), xError: { onChange: errorOnChange, fieldLabel: this.getLabel() } };
45
87
  }
46
88
  return undefined;
47
89
  };
@@ -55,49 +97,14 @@ var XFormComponent = /** @class */ (function (_super) {
55
97
  return undefined;
56
98
  };
57
99
  XFormComponent.prototype.validateNotNull = function (value) {
58
- if (this.checkNotNull() && value === null) {
100
+ // validacia by mala sediet s metodou getLabel(), kde sa pridava * , preto tu mame aj test !this.isReadOnly() - id fieldy pri inserte nechceme testovat
101
+ // otazka je ci nevypinat validaciu pre readOnly fieldy vzdy (aj ked napr. readOnly vznikne dynamicky)
102
+ if (this.isNotNull() && !this.isReadOnly() && value === null) {
59
103
  return "Field is required.";
60
104
  }
61
105
  return undefined;
62
106
  };
63
- // should be overriden
64
- XFormComponent.prototype.checkNotNull = function () {
65
- return false;
66
- };
67
- // should be overriden
68
- XFormComponent.prototype.getValueFromObject = function () {
69
- return null;
70
- };
71
- // vrati error message z form.state.errorMap
72
- XFormComponent.prototype.getError = function () {
73
- var field = this.getFieldForEdit();
74
- if (field) {
75
- var error = this.props.form.state.errorMap[field];
76
- if (error) {
77
- if (error.onChange || error.onBlur || error.form) {
78
- var message = '';
79
- if (error.onChange) {
80
- message += error.onChange;
81
- }
82
- if (error.onBlur) {
83
- if (message !== '') {
84
- message += ' ';
85
- }
86
- message += error.onBlur;
87
- }
88
- if (error.form) {
89
- if (message !== '') {
90
- message += ' ';
91
- }
92
- message += error.form;
93
- }
94
- return message;
95
- }
96
- }
97
- }
98
- return undefined;
99
- };
100
- // deprecated - nie je to pekne riesenie - do komponentu treba posielat error message (string) a nie props
107
+ // deprecated - nie je to pekne riesenie - do komponentu treba posielat error message (string) a nie props (asi ako v XAutoComplete)
101
108
  XFormComponent.prototype.getClassNameTooltip = function () {
102
109
  var error = this.getError();
103
110
  return error ? {
@@ -106,6 +113,11 @@ var XFormComponent = /** @class */ (function (_super) {
106
113
  tooltipOptions: { className: 'pink-tooltip', position: 'bottom' }
107
114
  } : {};
108
115
  };
116
+ // vrati error message z form.state.errorMap
117
+ XFormComponent.prototype.getError = function () {
118
+ var error = this.props.form.state.errorMap[this.getField()];
119
+ return error ? XUtils_1.XUtils.getXErrorMessage(error) : undefined;
120
+ };
109
121
  return XFormComponent;
110
122
  }(react_1.Component));
111
123
  exports.XFormComponent = XFormComponent;
@@ -1,7 +1,8 @@
1
1
  import { XFormBase } from "./XFormBase";
2
2
  import { Component, ReactChild } from "react";
3
- import { Filters } from "../serverApi/FindParam";
3
+ import { DataTableFilterMeta } from "primereact/datatable";
4
4
  import { XEntity, XField } from "../serverApi/XEntityMetadata";
5
+ import { FilterMatchMode } from "primereact/api";
5
6
  export interface XDropdownOptionsMap {
6
7
  [assocField: string]: any[];
7
8
  }
@@ -11,6 +12,7 @@ export interface XFormDataTableProps {
11
12
  dataKey?: string;
12
13
  paginator?: boolean;
13
14
  rows?: number;
15
+ filterDisplay: "menu" | "row";
14
16
  scrollable: boolean;
15
17
  scrollWidth?: string;
16
18
  scrollHeight?: string;
@@ -24,6 +26,7 @@ export interface XFormDataTableProps {
24
26
  }
25
27
  export declare class XFormDataTable2 extends Component<XFormDataTableProps> {
26
28
  static defaultProps: {
29
+ filterDisplay: string;
27
30
  scrollable: boolean;
28
31
  scrollWidth: string;
29
32
  scrollHeight: string;
@@ -36,12 +39,14 @@ export declare class XFormDataTable2 extends Component<XFormDataTableProps> {
36
39
  state: {
37
40
  selectedRow: {} | undefined;
38
41
  dropdownOptionsMap: XDropdownOptionsMap;
39
- filters: Filters;
42
+ filters: DataTableFilterMeta;
40
43
  };
41
44
  constructor(props: XFormDataTableProps);
42
45
  static getPathForColumn(columnProps: XFormColumnProps): string;
43
46
  static getHeader(columnProps: XFormColumnProps, xEntity: XEntity, field: string, xField: XField): string;
44
47
  getEntity(): string;
48
+ createInitFilters(): DataTableFilterMeta;
49
+ getFilterMatchMode(xField: XField): FilterMatchMode;
45
50
  onSelectionChange(event: any): void;
46
51
  onDropdownOptionsMapChange(dropdownOptionsMap: XDropdownOptionsMap): void;
47
52
  onFilter(event: any): void;
@@ -49,7 +54,6 @@ export declare class XFormDataTable2 extends Component<XFormDataTableProps> {
49
54
  getCheckboxFilterValue(field: string): boolean | null;
50
55
  onDropdownFilterChange(field: string, displayValue: any): void;
51
56
  getDropdownFilterValue(field: string): any;
52
- onBodyValueChange(field: string, rowData: any, newValue: any): void;
53
57
  bodyTemplate(columnProps: XFormColumnProps, rowData: any, xEntity: XEntity): any;
54
58
  onClickAddRowDefault(): void;
55
59
  onClickRemoveRowDefault(): void;
@@ -60,6 +64,7 @@ export interface XFormColumnProps {
60
64
  header?: any;
61
65
  readOnly?: boolean;
62
66
  dropdownInFilter?: boolean;
67
+ showFilterMenu?: boolean;
63
68
  width?: string;
64
69
  }
65
70
  export interface XFormInputSimpleColumnProps extends XFormColumnProps {
@@ -27,7 +27,11 @@ var __assign = (this && this.__assign) || function () {
27
27
  };
28
28
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
29
29
  if (k2 === undefined) k2 = k;
30
- 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);
31
35
  }) : (function(o, m, k, k2) {
32
36
  if (k2 === undefined) k2 = k;
33
37
  o[k2] = m[k];
@@ -71,6 +75,7 @@ var XInputDecimalDT_1 = require("./XInputDecimalDT");
71
75
  var XInputDateDT_1 = require("./XInputDateDT");
72
76
  var XCheckboxDT_1 = require("./XCheckboxDT");
73
77
  var tristatecheckbox_1 = require("primereact/tristatecheckbox");
78
+ var api_1 = require("primereact/api");
74
79
  var XFormDataTable2 = /** @class */ (function (_super) {
75
80
  __extends(XFormDataTable2, _super);
76
81
  function XFormDataTable2(props) {
@@ -87,7 +92,7 @@ var XFormDataTable2 = /** @class */ (function (_super) {
87
92
  _this.state = {
88
93
  selectedRow: undefined,
89
94
  dropdownOptionsMap: {},
90
- filters: {}
95
+ filters: _this.createInitFilters()
91
96
  };
92
97
  _this.onClickAddRowDefault = _this.onClickAddRowDefault.bind(_this);
93
98
  _this.onClickRemoveRowDefault = _this.onClickRemoveRowDefault.bind(_this);
@@ -172,6 +177,58 @@ var XFormDataTable2 = /** @class */ (function (_super) {
172
177
  }
173
178
  return this.entity;
174
179
  };
180
+ XFormDataTable2.prototype.createInitFilters = function () {
181
+ var e_2, _a;
182
+ var initFilters = {};
183
+ var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(this.getEntity());
184
+ try {
185
+ // TODO - asi by bolo fajn si tieto field, xField niekam ulozit a iterovat ulozene hodnoty, pouziva sa to na viacerych miestach
186
+ for (var _b = __values(this.props.children), _c = _b.next(); !_c.done; _c = _b.next()) {
187
+ var child = _c.value;
188
+ var childColumn = child; // nevedel som to krajsie...
189
+ var field = XFormDataTable2.getPathForColumn(childColumn.props);
190
+ var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, field);
191
+ // TODO column.props.dropdownInFilter - pre "menu" by bolo fajn mat zoznam "enumov"
192
+ var filterMatchMode = this.getFilterMatchMode(xField);
193
+ var filterItem = void 0;
194
+ if (this.props.filterDisplay === "menu") {
195
+ // DataTableOperatorFilterMetaData: operator + filter values
196
+ filterItem = {
197
+ operator: api_1.FilterOperator.OR,
198
+ constraints: [{ value: null, matchMode: filterMatchMode }]
199
+ };
200
+ }
201
+ else {
202
+ // props.filterDisplay === "row"
203
+ // DataTableFilterMetaData: filter value
204
+ filterItem = { value: null, matchMode: filterMatchMode };
205
+ }
206
+ initFilters[field] = filterItem;
207
+ }
208
+ }
209
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
210
+ finally {
211
+ try {
212
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
213
+ }
214
+ finally { if (e_2) throw e_2.error; }
215
+ }
216
+ return initFilters;
217
+ };
218
+ XFormDataTable2.prototype.getFilterMatchMode = function (xField) {
219
+ var filterMatchMode;
220
+ if (xField.type === "string") {
221
+ filterMatchMode = api_1.FilterMatchMode.STARTS_WITH;
222
+ }
223
+ // zatial vsetky ostatne EQUALS
224
+ else if (xField.type === "decimal" || xField.type === "number" || xField.type === "date" || xField.type === "datetime" || xField.type === "boolean") {
225
+ filterMatchMode = api_1.FilterMatchMode.EQUALS;
226
+ }
227
+ else {
228
+ throw "XField ".concat(xField.name, ": unknown xField.type = ").concat(xField.type);
229
+ }
230
+ return filterMatchMode;
231
+ };
175
232
  XFormDataTable2.prototype.onSelectionChange = function (event) {
176
233
  console.log("zavolany onSelectionChange");
177
234
  console.log(event.value);
@@ -190,11 +247,12 @@ var XFormDataTable2 = /** @class */ (function (_super) {
190
247
  // TODO - treba vyklonovat?
191
248
  var filtersCloned = __assign({}, this.state.filters);
192
249
  if (checkboxValue !== null) {
193
- filtersCloned[field] = { value: checkboxValue ? "true" : "false", matchMode: "equals" };
250
+ filtersCloned[field] = { value: checkboxValue ? "true" : "false", matchMode: api_1.FilterMatchMode.EQUALS };
194
251
  }
195
252
  else {
196
253
  // pouzivatel zrusil hodnotu vo filtri (vybral prazdny stav v checkboxe), zrusime polozku z filtra
197
- delete filtersCloned[field];
254
+ //delete filtersCloned[field];
255
+ filtersCloned[field] = { value: null, matchMode: api_1.FilterMatchMode.EQUALS };
198
256
  }
199
257
  this.setState({ filters: filtersCloned });
200
258
  };
@@ -215,11 +273,12 @@ var XFormDataTable2 = /** @class */ (function (_super) {
215
273
  // TODO - treba vyklonovat?
216
274
  var filtersCloned = __assign({}, this.state.filters);
217
275
  if (displayValue !== XUtils_1.XUtils.dropdownEmptyOptionValue) {
218
- filtersCloned[field] = { value: displayValue, matchMode: "equals" };
276
+ filtersCloned[field] = { value: displayValue, matchMode: api_1.FilterMatchMode.EQUALS };
219
277
  }
220
278
  else {
221
279
  // pouzivatel zrusil hodnotu vo filtri (vybral prazdny riadok), zrusime polozku z filtra
222
- delete filtersCloned[field];
280
+ //delete filtersCloned[field];
281
+ filtersCloned[field] = { value: null, matchMode: api_1.FilterMatchMode.EQUALS };
223
282
  }
224
283
  this.setState({ filters: filtersCloned });
225
284
  };
@@ -227,17 +286,22 @@ var XFormDataTable2 = /** @class */ (function (_super) {
227
286
  var dropdownValue = XUtils_1.XUtils.dropdownEmptyOptionValue;
228
287
  var filterValue = this.state.filters[field];
229
288
  if (filterValue !== undefined && filterValue !== null) {
230
- dropdownValue = filterValue.value;
289
+ if (filterValue.value !== null) {
290
+ dropdownValue = filterValue.value;
291
+ }
231
292
  }
232
293
  return dropdownValue;
233
294
  };
234
- XFormDataTable2.prototype.onBodyValueChange = function (field, rowData, newValue) {
235
- //console.log("onBodyValueChange");
236
- // zmenime hodnotu v modeli (odtial sa hodnota cita)
237
- rowData[field] = newValue;
238
- // kedze "rowData" je sucastou "props.form.state.object", tak nam staci zavolat setState({object: object}), aby sa zmena prejavila
239
- this.props.form.onObjectDataChange();
240
- };
295
+ /* pravdepodobne zombie
296
+ onBodyValueChange (field: string, rowData: any, newValue: any) {
297
+ //console.log("onBodyValueChange");
298
+
299
+ // zmenime hodnotu v modeli (odtial sa hodnota cita)
300
+ rowData[field] = newValue;
301
+ // kedze "rowData" je sucastou "props.form.state.object", tak nam staci zavolat setState({object: object}), aby sa zmena prejavila
302
+ this.props.form.onObjectDataChange();
303
+ }
304
+ */
241
305
  // body={(rowData: any) => bodyTemplate(childColumn.props.field, rowData)}
242
306
  XFormDataTable2.prototype.bodyTemplate = function (columnProps, rowData, xEntity) {
243
307
  var body;
@@ -322,13 +386,14 @@ var XFormDataTable2 = /** @class */ (function (_super) {
322
386
  if (this.props.shrinkWidth) {
323
387
  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
324
388
  }
325
- var tableStyle;
389
+ // pri prechode z Primereact 6.x na 9.x sa tableLayout zmenil z fixed na auto a nefungovalo nastavenie sirok stlpcov - docasne teda takto
390
+ var tableStyle = { tableLayout: 'fixed' };
326
391
  if (this.props.width !== undefined) {
327
392
  var width = this.props.width;
328
393
  if (!isNaN(Number(width))) { // if width is number
329
394
  width = width + 'rem';
330
395
  }
331
- tableStyle = { width: width };
396
+ tableStyle = __assign(__assign({}, tableStyle), { width: width });
332
397
  }
333
398
  // pre lepsiu citatelnost vytvarame stlpce uz tu
334
399
  var columnElemList = react_1.default.Children.map(this.props.children, function (child) {
@@ -354,17 +419,36 @@ var XFormDataTable2 = /** @class */ (function (_super) {
354
419
  var dropdownValue = thisLocal.getDropdownFilterValue(field);
355
420
  filterElement = react_1.default.createElement(XDropdownDTFilter_1.XDropdownDTFilter, { entity: thisLocal.getEntity(), path: field, value: dropdownValue, onValueChange: thisLocal.onDropdownFilterChange });
356
421
  }
422
+ // *********** 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;
432
+ }
433
+ }
434
+ }
435
+ // *********** showClearButton ***********
436
+ // pre filterDisplay = "row" nechceme clear button, chceme setrit miesto
437
+ var showClearButton = thisLocal.props.filterDisplay === "menu";
357
438
  // *********** width/headerStyle ***********
358
439
  var width = XUtils_1.XUtils.processPropWidth(childColumn.props.width);
359
440
  if (width === undefined || width === "default") {
360
- width = XUtilsMetadata_1.XUtilsMetadata.computeColumnWidth(xField, childColumnProps.type, header);
441
+ // TODO - if filter not used at all, then buttons flags should be false
442
+ var filterMenuInFilterRow = thisLocal.props.filterDisplay === "row" && showFilterMenu;
443
+ var filterButtonInHeader = thisLocal.props.filterDisplay === "menu";
444
+ width = XUtilsMetadata_1.XUtilsMetadata.computeColumnWidth(xField, filterMenuInFilterRow, childColumnProps.type, header, filterButtonInHeader);
361
445
  }
362
- var headerStyle;
446
+ var headerStyle = {};
363
447
  if (width !== undefined) {
364
448
  headerStyle = { width: width };
365
449
  }
366
450
  // *********** align ***********
367
- var align = "left"; // default
451
+ var align = undefined; // default undefined (left)
368
452
  // do buducna
369
453
  // if (childColumnProps.align !== undefined) {
370
454
  // align = childColumnProps.align;
@@ -379,25 +463,19 @@ var XFormDataTable2 = /** @class */ (function (_super) {
379
463
  align = "center";
380
464
  }
381
465
  // }
382
- // *********** style ***********
383
- var style;
384
- // TODO - pouzit className a nie style
385
- if (align === "center" || align === "right") {
386
- style = { 'textAlign': align };
387
- headerStyle = __assign(__assign({}, headerStyle), style); // headerStyle overrides style in TH cell
388
- }
389
- 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); } });
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); } });
390
467
  });
391
468
  return (react_1.default.createElement("div", null,
392
469
  react_1.default.createElement("div", { className: "flex justify-content-center" },
393
470
  react_1.default.createElement("label", null, label)),
394
471
  react_1.default.createElement("div", { className: "flex justify-content-center" },
395
- 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)),
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)),
396
473
  react_1.default.createElement("div", { className: "flex justify-content-center" },
397
474
  react_1.default.createElement(XButton_1.XButton, { label: "Add row", onClick: onClickAddRow }),
398
475
  react_1.default.createElement(XButton_1.XButton, { label: "Remove row", onClick: onClickRemoveRow }))));
399
476
  };
400
477
  XFormDataTable2.defaultProps = {
478
+ filterDisplay: "row",
401
479
  scrollable: true,
402
480
  scrollWidth: '100%',
403
481
  scrollHeight: '200vh',
@@ -16,7 +16,11 @@ var __extends = (this && this.__extends) || (function () {
16
16
  })();
17
17
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
18
  if (k2 === undefined) k2 = k;
19
- 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);
20
24
  }) : (function(o, m, k, k2) {
21
25
  if (k2 === undefined) k2 = k;
22
26
  o[k2] = m[k];
@@ -49,10 +53,14 @@ var __read = (this && this.__read) || function (o, n) {
49
53
  }
50
54
  return ar;
51
55
  };
52
- var __spreadArray = (this && this.__spreadArray) || function (to, from) {
53
- for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
54
- to[j] = from[i];
55
- return to;
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));
56
64
  };
57
65
  Object.defineProperty(exports, "__esModule", { value: true });
58
66
  exports.XFormNavigator3 = void 0;
@@ -102,7 +110,7 @@ var XFormNavigator3 = /** @class */ (function (_super) {
102
110
  };
103
111
  XFormNavigator3.prototype.render = function () {
104
112
  var _this = this;
105
- var formElements = this.props.rootFormElement !== null ? __spreadArray([this.props.rootFormElement], __read(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;
106
114
  var forms = formElements.map(function (formElement, index) {
107
115
  var displayed = (index === formElements.length - 1);
108
116
  // klonovanim elementu pridame atribut openForm={this.openForm} (nemusime tento atribut pridavat pri vytvarani elementu)
@@ -0,0 +1,13 @@
1
+ import React from "react";
2
+ import { XFormComponent, XFormComponentProps } from "./XFormComponent";
3
+ import { XField } from "../serverApi/XEntityMetadata";
4
+ export interface XInputProps extends XFormComponentProps {
5
+ field: string;
6
+ inputStyle?: React.CSSProperties;
7
+ }
8
+ export declare abstract class XInput<P extends XInputProps> extends XFormComponent<P> {
9
+ protected xField: XField;
10
+ protected constructor(props: P);
11
+ getField(): string;
12
+ isNotNull(): boolean;
13
+ }
@@ -0,0 +1,38 @@
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.XInput = void 0;
19
+ var XUtilsMetadata_1 = require("./XUtilsMetadata");
20
+ var XFormComponent_1 = require("./XFormComponent");
21
+ // spolocna nadtrieda pre jednoduche inputy (nie asociacne)
22
+ var XInput = /** @class */ (function (_super) {
23
+ __extends(XInput, _super);
24
+ function XInput(props) {
25
+ var _this = _super.call(this, props) || this;
26
+ _this.xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPathStr(props.form.getEntity(), props.field);
27
+ props.form.addField(props.field);
28
+ return _this;
29
+ }
30
+ XInput.prototype.getField = function () {
31
+ return this.props.field;
32
+ };
33
+ XInput.prototype.isNotNull = function () {
34
+ return !this.xField.isNullable;
35
+ };
36
+ return XInput;
37
+ }(XFormComponent_1.XFormComponent));
38
+ exports.XInput = XInput;
@@ -51,6 +51,6 @@ var XInputDate = function (props) {
51
51
  }
52
52
  return (react_1.default.createElement("div", { className: "field grid" },
53
53
  react_1.default.createElement("label", { htmlFor: props.field, className: "col-fixed", style: { width: XUtils_1.XUtils.FIELD_LABEL_WIDTH } }, label),
54
- react_1.default.createElement(calendar_1.Calendar, { id: props.field, value: fieldValue, onChange: onValueChange, disabled: readOnly, showIcon: true, dateFormat: XUtilsConversions_1.dateFormatCalendar(), showTime: showTime, showSeconds: showTime, inputClassName: cssClassName, showOnFocus: false })));
54
+ 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
55
  };
56
56
  exports.XInputDate = XInputDate;
@@ -50,6 +50,6 @@ var XInputDateDT = function (props) {
50
50
  // TODO - nefunguje dobre pridavanie noveho riadku - su tam stare neupdatnute hodnoty - este to asi neopravili https://github.com/primefaces/primereact/issues/1277
51
51
  // test mame na TestovaciForm
52
52
  // appendTo={document.body} appenduje overlay panel na element body - eliminuje problem s overflow (pozri poznamku v XDropdownDTFilter)
53
- return (react_1.default.createElement(calendar_1.Calendar, { appendTo: document.body, id: props.field, value: fieldValue, onChange: function (e) { return onValueChange(props.field, props.rowData, e.value); }, disabled: readOnly, showIcon: true, dateFormat: XUtilsConversions_1.dateFormatCalendar(), showTime: showTime, showSeconds: showTime, inputClassName: cssClassName, showOnFocus: false }));
53
+ return (react_1.default.createElement(calendar_1.Calendar, { appendTo: document.body, id: props.field, value: fieldValue, onChange: function (e) { return onValueChange(props.field, props.rowData, e.value); }, disabled: readOnly, showIcon: true, dateFormat: (0, XUtilsConversions_1.dateFormatCalendar)(), showTime: showTime, showSeconds: showTime, inputClassName: cssClassName, showOnFocus: false }));
54
54
  };
55
55
  exports.XInputDateDT = XInputDateDT;
@@ -1,16 +1,11 @@
1
- import React from "react";
2
- import { XFormComponent, XFormComponentProps } from "./XFormComponent";
3
- import { XField } from "../serverApi/XEntityMetadata";
4
- export interface XInputTextProps extends XFormComponentProps {
5
- field: string;
1
+ /// <reference types="react" />
2
+ import { XInput, XInputProps } from "./XInput";
3
+ export interface XInputTextProps extends XInputProps {
6
4
  size?: number;
7
- inputStyle?: React.CSSProperties;
8
5
  }
9
- export declare class XInputText extends XFormComponent<XInputTextProps> {
10
- protected xField: XField;
6
+ export declare class XInputText extends XInput<XInputTextProps> {
11
7
  constructor(props: XInputTextProps);
12
- getFieldForEdit(): string | undefined;
13
- checkNotNull(): boolean;
14
- getValueFromObject(): any;
8
+ getValue(): string;
9
+ onValueChange(e: any): void;
15
10
  render(): JSX.Element;
16
11
  }