@michalrakus/x-react-web-lib 1.2.0 → 1.4.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 (39) hide show
  1. package/XCalendar.d.ts +3 -0
  2. package/XCalendar.js +5 -0
  3. package/XDropdownForEntity.d.ts +3 -0
  4. package/XDropdownForEntity.js +5 -0
  5. package/XInputDecimalBase.d.ts +3 -0
  6. package/XInputDecimalBase.js +5 -0
  7. package/gulpfile.js +4 -1
  8. package/lib/components/XAutoCompleteBase.d.ts +1 -0
  9. package/lib/components/XAutoCompleteBase.js +6 -4
  10. package/lib/components/XAutoCompleteDT.js +1 -2
  11. package/lib/components/XCalendar.d.ts +8 -0
  12. package/lib/components/XCalendar.js +27 -0
  13. package/lib/components/XDropdown.d.ts +2 -7
  14. package/lib/components/XDropdown.js +8 -88
  15. package/lib/components/XDropdownDTFilter.js +8 -7
  16. package/lib/components/XDropdownForEntity.d.ts +24 -0
  17. package/lib/components/XDropdownForEntity.js +148 -0
  18. package/lib/components/XExportRowsDialog.js +2 -2
  19. package/lib/components/XFieldSelector.js +4 -3
  20. package/lib/components/XFormBase.d.ts +2 -0
  21. package/lib/components/XFormBase.js +10 -0
  22. package/lib/components/XFormComponent.d.ts +5 -1
  23. package/lib/components/XFormComponent.js +31 -3
  24. package/lib/components/XFormComponentDT.js +28 -2
  25. package/lib/components/XFormDataTable2.d.ts +2 -1
  26. package/lib/components/XFormDataTable2.js +45 -12
  27. package/lib/components/XInputDate.d.ts +12 -8
  28. package/lib/components/XInputDate.js +49 -44
  29. package/lib/components/XInputDecimalBase.d.ts +12 -0
  30. package/lib/components/XInputDecimalBase.js +18 -0
  31. package/lib/components/XLazyDataTable.d.ts +10 -1
  32. package/lib/components/XLazyDataTable.js +136 -52
  33. package/lib/components/XUtilsMetadata.d.ts +6 -2
  34. package/lib/components/XUtilsMetadata.js +79 -18
  35. package/lib/serverApi/ExportImportParam.d.ts +2 -0
  36. package/lib/serverApi/XEntityMetadata.d.ts +3 -2
  37. package/lib/serverApi/XUtilsCommon.d.ts +1 -0
  38. package/lib/serverApi/XUtilsCommon.js +9 -0
  39. package/package.json +1 -1
@@ -47,8 +47,34 @@ var XFormComponent = /** @class */ (function (_super) {
47
47
  this.props.form.onFieldChange(this.getField(), value, error, onChange, assocObjectChange);
48
48
  };
49
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);
50
+ var readOnly;
51
+ if (!XUtilsCommon_1.XUtilsCommon.isSingleField(this.getField())) {
52
+ // if the length of field is 2 or more, then readOnly
53
+ readOnly = true;
54
+ }
55
+ // the purpose of formReadOnly is to put the whole form to read only mode,
56
+ // that's why the formReadOnly has higher prio then property this.props.readOnly
57
+ else if (this.props.form.formReadOnlyBase(this.getField())) {
58
+ readOnly = true;
59
+ }
60
+ else if (typeof this.props.readOnly === 'boolean') {
61
+ readOnly = this.props.readOnly;
62
+ }
63
+ else if (typeof this.props.readOnly === 'function') {
64
+ // TODO - tazko povedat ci niekedy bude object === null (asi ano vid metodu getFilterBase)
65
+ var object = this.props.form.state.object;
66
+ if (object) {
67
+ readOnly = this.props.readOnly(this.props.form.getXObject());
68
+ }
69
+ else {
70
+ readOnly = true;
71
+ }
72
+ }
73
+ else {
74
+ // readOnly is undefined
75
+ readOnly = false;
76
+ }
77
+ return readOnly;
52
78
  };
53
79
  XFormComponent.prototype.getLabel = function () {
54
80
  var _a;
@@ -104,7 +130,9 @@ var XFormComponent = /** @class */ (function (_super) {
104
130
  }
105
131
  return undefined;
106
132
  };
107
- // deprecated - nie je to pekne riesenie - do komponentu treba posielat error message (string) a nie props (asi ako v XAutoComplete)
133
+ /**
134
+ * @deprecated - nie je to pekne riesenie - do komponentu treba posielat error message (string) a nie props (asi ako v XAutoComplete)
135
+ */
108
136
  XFormComponent.prototype.getClassNameTooltip = function () {
109
137
  var error = this.getError();
110
138
  return error ? {
@@ -48,8 +48,34 @@ var XFormComponentDT = /** @class */ (function (_super) {
48
48
  this.props.form.onTableFieldChange(this.props.rowData, this.getField(), value, error, onChange, assocObjectChange);
49
49
  };
50
50
  XFormComponentDT.prototype.isReadOnly = function () {
51
- // tuto do buducna planujeme pridat aj dynamicky readOnly, bude ho treba ukladat do form.state podobne ako sa ukladaju errory do form.state.errorMap
52
- return XUtils_1.XUtils.isReadOnly(this.getField(), this.props.readOnly);
51
+ var readOnly;
52
+ if (!XUtilsCommon_1.XUtilsCommon.isSingleField(this.getField())) {
53
+ // if the length of field is 2 or more, then readOnly
54
+ readOnly = true;
55
+ }
56
+ // formReadOnlyBase is called on the level XFormDataTable2
57
+ // else if (this.props.form.formReadOnlyBase("xxx")) {
58
+ // readOnly = true;
59
+ // }
60
+ else if (typeof this.props.readOnly === 'boolean') {
61
+ readOnly = this.props.readOnly;
62
+ }
63
+ // else if (typeof this.props.readOnly === 'function') {
64
+ // // TODO - tazko povedat ci niekedy bude object === null (asi ano vid metodu getFilterBase)
65
+ // TODO - use also this.props.rowData
66
+ // const object: XObject = this.props.form.state.object;
67
+ // if (object) {
68
+ // readOnly = this.props.readOnly(this.props.form.getXObject());
69
+ // }
70
+ // else {
71
+ // readOnly = true;
72
+ // }
73
+ // }
74
+ else {
75
+ // readOnly is undefined
76
+ readOnly = false;
77
+ }
78
+ return readOnly;
53
79
  };
54
80
  // *********** validation support ************
55
81
  // volane po kliknuti na Save
@@ -75,12 +75,13 @@ export declare class XFormDataTable2 extends Component<XFormDataTableProps> {
75
75
  getCheckboxFilterValue(field: string): boolean | null;
76
76
  onDropdownFilterChange(field: string, displayValue: any): void;
77
77
  getDropdownFilterValue(field: string): any;
78
- bodyTemplate(columnProps: XFormColumnProps, rowData: any, xEntity: XEntity): any;
78
+ bodyTemplate(columnProps: XFormColumnProps, tableReadOnly: boolean, rowData: any, xEntity: XEntity): any;
79
79
  onClickAddRow(): void;
80
80
  onClickRemoveRowBySelection(): void;
81
81
  removeRow(row: any): void;
82
82
  validate(): void;
83
83
  getErrorMessages(): string;
84
+ isReadOnly(): boolean;
84
85
  render(): JSX.Element;
85
86
  }
86
87
  export type TableFieldOnChange = (e: XTableFieldChangeEvent<any, any>) => void;
@@ -334,23 +334,26 @@ var XFormDataTable2 = /** @class */ (function (_super) {
334
334
  }
335
335
  */
336
336
  // body={(rowData: any) => bodyTemplate(childColumn.props.field, rowData)}
337
- XFormDataTable2.prototype.bodyTemplate = function (columnProps, rowData, xEntity) {
337
+ XFormDataTable2.prototype.bodyTemplate = function (columnProps, tableReadOnly, rowData, xEntity) {
338
+ var _a, _b;
338
339
  var body;
339
340
  if (columnProps.type === "inputSimple") {
340
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);
341
344
  var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, columnPropsInputSimple.field);
342
345
  if (xField.type === "decimal" || xField.type === "number") {
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 });
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 });
344
347
  }
345
348
  else if (xField.type === "date" || xField.type === "datetime") {
346
- 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 });
347
350
  }
348
351
  else if (xField.type === "boolean") {
349
- 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 });
350
353
  }
351
354
  else {
352
355
  // xField.type === "string", pripadne ine jednoduche typy
353
- 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 });
354
357
  }
355
358
  }
356
359
  else if (columnProps.type === "dropdown") {
@@ -359,7 +362,9 @@ var XFormDataTable2 = /** @class */ (function (_super) {
359
362
  }
360
363
  else if (columnProps.type === "autoComplete") {
361
364
  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 });
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 });
363
368
  }
364
369
  else if (columnProps.type === "searchButton") {
365
370
  var columnPropsSearchButton = columnProps;
@@ -459,6 +464,34 @@ var XFormDataTable2 = /** @class */ (function (_super) {
459
464
  }
460
465
  return msg;
461
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
+ };
462
495
  XFormDataTable2.prototype.render = function () {
463
496
  var _this = this;
464
497
  var paginator = this.props.paginator !== undefined ? this.props.paginator : false;
@@ -473,7 +506,7 @@ var XFormDataTable2 = /** @class */ (function (_super) {
473
506
  }
474
507
  var filterDisplay = this.props.filterDisplay !== "none" ? this.props.filterDisplay : undefined;
475
508
  var label = this.props.label !== undefined ? this.props.label : this.props.assocField;
476
- var readOnly = this.props.readOnly !== undefined ? this.props.readOnly : false;
509
+ var readOnly = this.isReadOnly();
477
510
  // v bloku function (child) nejde pouzit priamo this, thisLocal uz ide pouzit
478
511
  var thisLocal = this;
479
512
  var object = this.props.form.state.object;
@@ -555,7 +588,7 @@ var XFormDataTable2 = /** @class */ (function (_super) {
555
588
  var filterMenuInFilterRow = thisLocal.props.filterDisplay === "row" && showFilterMenu;
556
589
  var sortableButtonInHeader = thisLocal.props.sortable;
557
590
  var filterButtonInHeader = thisLocal.props.filterDisplay === "menu";
558
- width = XUtilsMetadata_1.XUtilsMetadata.computeColumnWidth(xField, filterMenuInFilterRow, childColumnProps.type, header, sortableButtonInHeader, filterButtonInHeader);
591
+ width = XUtilsMetadata_1.XUtilsMetadata.computeColumnWidth(xField, undefined, filterMenuInFilterRow, childColumnProps.type, header, sortableButtonInHeader, filterButtonInHeader);
559
592
  }
560
593
  var headerStyle = {};
561
594
  if (width !== undefined) {
@@ -577,11 +610,11 @@ var XFormDataTable2 = /** @class */ (function (_super) {
577
610
  align = "center";
578
611
  }
579
612
  // }
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); } });
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); } });
581
614
  });
582
615
  if (this.props.removeButtonInRow) {
583
616
  // 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 }); } }));
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 }); } }));
585
618
  }
586
619
  return (react_1.default.createElement("div", null,
587
620
  react_1.default.createElement("div", { className: "flex justify-content-center" },
@@ -589,8 +622,8 @@ var XFormDataTable2 = /** @class */ (function (_super) {
589
622
  react_1.default.createElement("div", { className: "flex justify-content-center" },
590
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)),
591
624
  react_1.default.createElement("div", { className: "flex justify-content-center" },
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 }))));
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 }))));
594
627
  };
595
628
  XFormDataTable2.defaultProps = {
596
629
  filterDisplay: "row",
@@ -1,9 +1,13 @@
1
- import { XFormBase } from "./XFormBase";
2
- import React from "react";
3
- export declare const XInputDate: (props: {
4
- form: XFormBase;
1
+ /// <reference types="react" />
2
+ import { XFormComponentProps } from "./XFormComponent";
3
+ import { XInput } from "./XInput";
4
+ export interface XInputDateProps extends XFormComponentProps<number> {
5
5
  field: string;
6
- label?: string | undefined;
7
- readOnly?: boolean | undefined;
8
- labelStyle?: React.CSSProperties | undefined;
9
- }) => JSX.Element;
6
+ }
7
+ export declare class XInputDate extends XInput<Date, XInputDateProps> {
8
+ constructor(props: XInputDateProps);
9
+ getValue(): Date | null;
10
+ onValueChange(value: Date | null): void;
11
+ onBlur(e: any): void;
12
+ render(): JSX.Element;
13
+ }
@@ -1,58 +1,63 @@
1
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
+ })();
2
17
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
18
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
19
  };
5
20
  Object.defineProperty(exports, "__esModule", { value: true });
6
21
  exports.XInputDate = void 0;
7
22
  var react_1 = __importDefault(require("react"));
8
- var calendar_1 = require("primereact/calendar");
9
- var XUtilsConversions_1 = require("./XUtilsConversions");
10
- var XUtilsMetadata_1 = require("./XUtilsMetadata");
11
- var XUtilsCommon_1 = require("../serverApi/XUtilsCommon");
12
- var XUtils_1 = require("./XUtils");
13
- var XInputDate = function (props) {
14
- var _a, _b;
15
- props.form.addField(props.field);
16
- var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPathStr(props.form.getEntity(), props.field);
17
- var showTime = (xField.type === 'datetime');
18
- var cssClassName = showTime ? 'x-input-datetime' : 'x-input-date';
19
- var label = (_a = props.label) !== null && _a !== void 0 ? _a : props.field;
20
- var readOnly = XUtils_1.XUtils.isReadOnly(props.field, props.readOnly);
21
- if (!xField.isNullable && !readOnly) {
22
- label = XUtils_1.XUtils.markNotNull(label);
23
+ var XCalendar_1 = require("./XCalendar");
24
+ var XInput_1 = require("./XInput");
25
+ var XInputDate = /** @class */ (function (_super) {
26
+ __extends(XInputDate, _super);
27
+ function XInputDate(props) {
28
+ var _this = _super.call(this, props) || this;
29
+ _this.onValueChange = _this.onValueChange.bind(_this);
30
+ _this.onBlur = _this.onBlur.bind(_this);
31
+ return _this;
23
32
  }
24
- var onValueChange = function (e) {
25
- // z Calendar prichadza e.value - typ Date alebo null
26
- // typ Date prichadza ak uzivatel vyplnil validny datum, null (typeof e.value vracia "object") prichadza ak uzivatel vymazal datum
27
- // alebo je este datum nekompletny (uzivatel prave zadava datum)
28
- //console.log(typeof e.value);
29
- //console.log(e.value instanceof Date);
30
- props.form.onFieldChange(props.field, e.value);
31
- };
32
- var fieldValue = undefined;
33
- var object = props.form.state.object;
34
- if (object !== null) {
35
- var objectValue = XUtilsCommon_1.XUtilsCommon.getValueByPath(object, props.field);
36
- // pre istotu dame na null, null je standard
37
- //if (objectValue === undefined) {
38
- // objectValue = null;
39
- //}
40
- // TODO - konvertovat null hodnotu na "" (vo funkcii stringAsUI) je dolezite aby sa prejavila zmena na null v modeli
41
- // - otestovat ci zmena na null funguje dobre -
42
- //fieldValue = stringAsUI(objectValue);
33
+ XInputDate.prototype.getValue = function () {
34
+ var value = null;
35
+ var objectValue = this.getValueFromObject();
43
36
  // tuto zatial hack, mal by prist Date
44
37
  if (typeof objectValue === 'string') {
45
- fieldValue = new Date(objectValue);
38
+ value = new Date(objectValue);
46
39
  }
47
40
  else if (typeof objectValue === 'object' && objectValue instanceof Date) {
48
- fieldValue = objectValue;
41
+ value = objectValue;
49
42
  }
50
- // fieldValue zostalo undefined (konvertujeme null -> undefined) - Calendar pozaduje undefined, nechce null
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 });
54
- return (react_1.default.createElement("div", { className: "field grid" },
55
- react_1.default.createElement("label", { htmlFor: props.field, className: "col-fixed", style: labelStyle }, label),
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 })));
57
- };
43
+ // value zostalo null ak nebol vykonany ziaden if
44
+ return value;
45
+ };
46
+ XInputDate.prototype.onValueChange = function (value) {
47
+ // z XCalendar prichadza value - typ Date alebo null
48
+ this.onValueChangeBase(value);
49
+ };
50
+ // nedame do onChange inputu, lebo by sa nas onChange volal po kazdej zmene pismenka
51
+ // ak bude treba, mozme este dorobit metodu "onChange2", ktora sa bude volat po kazdej zmene pismenka (asi iba do XInputText)
52
+ XInputDate.prototype.onBlur = function (e) {
53
+ this.callOnChangeFromOnBlur();
54
+ };
55
+ XInputDate.prototype.render = function () {
56
+ // note: style overrides size (width of the input according to character count)
57
+ return (react_1.default.createElement("div", { className: "field grid" },
58
+ react_1.default.createElement("label", { htmlFor: this.props.field, className: "col-fixed", style: this.getLabelStyle() }, this.getLabel()),
59
+ react_1.default.createElement(XCalendar_1.XCalendar, { id: this.props.field, value: this.getValue(), onChange: this.onValueChange, readOnly: this.isReadOnly(), datetime: this.xField.type === 'datetime' })));
60
+ };
61
+ return XInputDate;
62
+ }(XInput_1.XInput));
58
63
  exports.XInputDate = XInputDate;
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ export declare const XInputDecimalBase: (props: {
3
+ id?: string | undefined;
4
+ value: number | null;
5
+ onChange: (value: number | null) => void;
6
+ readOnly?: boolean | undefined;
7
+ useGrouping?: boolean | undefined;
8
+ fractionDigits?: number | undefined;
9
+ min?: number | undefined;
10
+ max?: number | undefined;
11
+ size?: number | undefined;
12
+ }) => JSX.Element;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.XInputDecimalBase = void 0;
7
+ var react_1 = __importDefault(require("react"));
8
+ var inputnumber_1 = require("primereact/inputnumber");
9
+ // wrapper for InputNumber component - zatial taky zjednoduseny, len na filter polozky pouzivame
10
+ var XInputDecimalBase = function (props) {
11
+ var onChange = function (e) {
12
+ // z InputNumber prichadza e.value - typ number alebo null
13
+ props.onChange(e.value);
14
+ };
15
+ // null konvertujeme na undefined (zevraj InputNumber nechce null)
16
+ return (react_1.default.createElement(inputnumber_1.InputNumber, { id: props.id, value: props.value !== null ? props.value : undefined, onChange: onChange, readOnly: props.readOnly, mode: "decimal", locale: "de-DE", useGrouping: props.useGrouping, minFractionDigits: props.fractionDigits, maxFractionDigits: props.fractionDigits, min: props.min, max: props.max, size: props.size }));
17
+ };
18
+ exports.XInputDecimalBase = XInputDecimalBase;
@@ -1,7 +1,10 @@
1
- import { ReactChild } from 'react';
1
+ import React, { ReactChild } from 'react';
2
+ import { DataTableFilterMetaData, DataTableOperatorFilterMetaData } from 'primereact/datatable';
3
+ import { ColumnBodyOptions, ColumnFilterElementTemplateOptions } from 'primereact/column';
2
4
  import { SearchTableParams } from "./SearchTableParams";
3
5
  import { XCustomFilter } from "../serverApi/FindParam";
4
6
  import { XOnSaveOrCancelProp } from "./XFormBase";
7
+ export type XBetweenFilterProp = "row" | "column" | undefined;
5
8
  export interface XEditModeHandlers {
6
9
  onStart: () => void;
7
10
  onSave: () => void;
@@ -18,6 +21,7 @@ export interface XLazyDataTableProps {
18
21
  paginator: boolean;
19
22
  rows: number;
20
23
  filterDisplay: "menu" | "row";
24
+ betweenFilter?: XBetweenFilterProp;
21
25
  scrollable: boolean;
22
26
  scrollWidth: string;
23
27
  scrollHeight: string;
@@ -49,12 +53,17 @@ export declare const XLazyDataTable: {
49
53
  shrinkWidth: boolean;
50
54
  };
51
55
  };
56
+ export type XSetFilterItem = (field: string, filterItem: DataTableFilterMetaData | DataTableOperatorFilterMetaData) => void;
57
+ export type XFilterElementProp = (setFilterItem: XSetFilterItem, options: ColumnFilterElementTemplateOptions) => React.ReactNode;
52
58
  export interface XLazyColumnProps {
53
59
  field: string;
54
60
  header?: any;
55
61
  align?: "left" | "center" | "right";
56
62
  dropdownInFilter?: boolean;
57
63
  showFilterMenu?: boolean;
64
+ betweenFilter?: XBetweenFilterProp | "noBetween";
58
65
  width?: string;
66
+ filterElement?: XFilterElementProp;
67
+ body?: React.ReactNode | ((data: any, options: ColumnBodyOptions) => React.ReactNode);
59
68
  }
60
69
  export declare const XLazyColumn: (props: XLazyColumnProps) => null;