@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.
- package/LICENSE.md +21 -0
- package/XEnvVars.d.ts +3 -0
- package/XEnvVars.js +5 -0
- package/XInputTextarea.d.ts +3 -0
- package/XInputTextarea.js +5 -0
- package/gulpfile.js +2 -0
- package/lib/administration/XBrowseMetaForm.js +1 -1
- package/lib/administration/XUserBrowse.js +5 -4
- package/lib/administration/XUserForm.js +40 -28
- package/lib/components/SourceCodeLinkEntity.js +1 -1
- package/lib/components/XAutoComplete.d.ts +3 -3
- package/lib/components/XAutoComplete.js +16 -37
- package/lib/components/XAutoCompleteBase.d.ts +1 -1
- package/lib/components/XAutoCompleteBase.js +23 -22
- package/lib/components/XBrowse.js +7 -3
- package/lib/components/XChangePasswordForm.js +9 -5
- package/lib/components/XCheckbox.d.ts +8 -9
- package/lib/components/XCheckbox.js +38 -30
- package/lib/components/XDataTable.js +11 -7
- package/lib/components/XDropdown.d.ts +4 -3
- package/lib/components/XDropdown.js +21 -44
- package/lib/components/XDropdownDT.js +7 -3
- package/lib/components/XDropdownDTFilter.js +9 -5
- package/lib/components/XDropdownFormDTFilter.js +9 -5
- package/lib/components/XEditColumnDialog.js +9 -5
- package/lib/components/XEnvVars.d.ts +12 -0
- package/lib/components/XEnvVars.js +20 -0
- package/lib/components/XErrors.d.ts +1 -0
- package/lib/components/XExportRowsDialog.js +12 -6
- package/lib/components/XFieldSelector.js +8 -4
- package/lib/components/XFormBase.d.ts +1 -0
- package/lib/components/XFormBase.js +47 -21
- package/lib/components/XFormComponent.d.ts +10 -6
- package/lib/components/XFormComponent.js +60 -48
- package/lib/components/XFormDataTable2.d.ts +8 -3
- package/lib/components/XFormDataTable2.js +106 -28
- package/lib/components/XFormNavigator3.js +14 -6
- package/lib/components/XInput.d.ts +13 -0
- package/lib/components/XInput.js +38 -0
- package/lib/components/XInputDate.js +1 -1
- package/lib/components/XInputDateDT.js +1 -1
- package/lib/components/XInputText.d.ts +6 -11
- package/lib/components/XInputText.js +14 -49
- package/lib/components/XInputTextDT.js +2 -3
- package/lib/components/XInputTextarea.d.ts +18 -0
- package/lib/components/XInputTextarea.js +85 -0
- package/lib/components/XLazyDataTable.d.ts +3 -0
- package/lib/components/XLazyDataTable.js +162 -77
- package/lib/components/XLoginForm.js +9 -5
- package/lib/components/XResponseError.js +1 -1
- package/lib/components/XSearchButton.d.ts +2 -3
- package/lib/components/XSearchButton.js +12 -35
- package/lib/components/XSearchButtonDT.js +10 -6
- package/lib/components/XSearchButtonOld.js +10 -6
- package/lib/components/XToken.d.ts +4 -3
- package/lib/components/XUtils.d.ts +13 -4
- package/lib/components/XUtils.js +90 -15
- package/lib/components/XUtilsConversions.js +10 -2
- package/lib/components/XUtilsMetadata.d.ts +1 -1
- package/lib/components/XUtilsMetadata.js +20 -11
- package/lib/components/useXToken.js +1 -1
- package/lib/serverApi/ExportImportParam.d.ts +3 -3
- package/lib/serverApi/FindParam.d.ts +3 -13
- package/lib/serverApi/FindParam.js +14 -0
- package/lib/serverApi/XUser.d.ts +1 -0
- package/lib/serverApi/XUtilsCommon.js +2 -2
- 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
|
-
//
|
|
28
|
-
//
|
|
29
|
-
|
|
30
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
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 {
|
|
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:
|
|
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.
|
|
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:
|
|
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:
|
|
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
|
-
|
|
289
|
+
if (filterValue.value !== null) {
|
|
290
|
+
dropdownValue = filterValue.value;
|
|
291
|
+
}
|
|
231
292
|
}
|
|
232
293
|
return dropdownValue;
|
|
233
294
|
};
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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.
|
|
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,
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
|
|
2
|
-
import {
|
|
3
|
-
|
|
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
|
|
10
|
-
protected xField: XField;
|
|
6
|
+
export declare class XInputText extends XInput<XInputTextProps> {
|
|
11
7
|
constructor(props: XInputTextProps);
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
getValueFromObject(): any;
|
|
8
|
+
getValue(): string;
|
|
9
|
+
onValueChange(e: any): void;
|
|
15
10
|
render(): JSX.Element;
|
|
16
11
|
}
|