@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.
- package/XCalendar.d.ts +3 -0
- package/XCalendar.js +5 -0
- package/XDropdownForEntity.d.ts +3 -0
- package/XDropdownForEntity.js +5 -0
- package/XInputDecimalBase.d.ts +3 -0
- package/XInputDecimalBase.js +5 -0
- package/gulpfile.js +4 -1
- package/lib/components/XAutoCompleteBase.d.ts +1 -0
- package/lib/components/XAutoCompleteBase.js +6 -4
- package/lib/components/XAutoCompleteDT.js +1 -2
- package/lib/components/XCalendar.d.ts +8 -0
- package/lib/components/XCalendar.js +27 -0
- package/lib/components/XDropdown.d.ts +2 -7
- package/lib/components/XDropdown.js +8 -88
- package/lib/components/XDropdownDTFilter.js +8 -7
- package/lib/components/XDropdownForEntity.d.ts +24 -0
- package/lib/components/XDropdownForEntity.js +148 -0
- package/lib/components/XExportRowsDialog.js +2 -2
- package/lib/components/XFieldSelector.js +4 -3
- package/lib/components/XFormBase.d.ts +2 -0
- package/lib/components/XFormBase.js +10 -0
- package/lib/components/XFormComponent.d.ts +5 -1
- package/lib/components/XFormComponent.js +31 -3
- package/lib/components/XFormComponentDT.js +28 -2
- package/lib/components/XFormDataTable2.d.ts +2 -1
- package/lib/components/XFormDataTable2.js +45 -12
- package/lib/components/XInputDate.d.ts +12 -8
- package/lib/components/XInputDate.js +49 -44
- package/lib/components/XInputDecimalBase.d.ts +12 -0
- package/lib/components/XInputDecimalBase.js +18 -0
- package/lib/components/XLazyDataTable.d.ts +10 -1
- package/lib/components/XLazyDataTable.js +136 -52
- package/lib/components/XUtilsMetadata.d.ts +6 -2
- package/lib/components/XUtilsMetadata.js +79 -18
- package/lib/serverApi/ExportImportParam.d.ts +2 -0
- package/lib/serverApi/XEntityMetadata.d.ts +3 -2
- package/lib/serverApi/XUtilsCommon.d.ts +1 -0
- package/lib/serverApi/XUtilsCommon.js +9 -0
- 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
|
-
|
|
51
|
-
|
|
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
|
-
|
|
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
|
-
|
|
52
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
var
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
38
|
+
value = new Date(objectValue);
|
|
46
39
|
}
|
|
47
40
|
else if (typeof objectValue === 'object' && objectValue instanceof Date) {
|
|
48
|
-
|
|
41
|
+
value = objectValue;
|
|
49
42
|
}
|
|
50
|
-
//
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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;
|