@michalrakus/x-react-web-lib 1.1.0 → 1.2.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/FindParam.d.ts +3 -0
- package/FindParam.js +5 -0
- package/XButtonIconNarrow.d.ts +3 -0
- package/XButtonIconNarrow.js +5 -0
- package/XButtonIconSmall.d.ts +3 -0
- package/XButtonIconSmall.js +5 -0
- package/XFieldChangeEvent.d.ts +3 -0
- package/XFieldChangeEvent.js +5 -0
- package/gulpfile.js +4 -0
- package/lib/components/SearchTableParams.d.ts +8 -2
- package/lib/components/XAutoComplete.d.ts +7 -4
- package/lib/components/XAutoComplete.js +21 -6
- package/lib/components/XAutoCompleteBase.d.ts +7 -4
- package/lib/components/XAutoCompleteBase.js +65 -26
- package/lib/components/XAutoCompleteDT.d.ts +33 -0
- package/lib/components/XAutoCompleteDT.js +141 -0
- package/lib/components/XButton.d.ts +3 -1
- package/lib/components/XButton.js +1 -1
- package/lib/components/XButtonIconNarrow.d.ts +10 -0
- package/lib/components/XButtonIconNarrow.js +25 -0
- package/lib/components/XButtonIconSmall.d.ts +3 -1
- package/lib/components/XCheckbox.d.ts +2 -2
- package/lib/components/XDropdown.d.ts +3 -2
- package/lib/components/XDropdown.js +1 -1
- package/lib/components/XFieldChangeEvent.d.ts +11 -0
- package/lib/components/XFieldChangeEvent.js +2 -0
- package/lib/components/XFormBase.d.ts +17 -9
- package/lib/components/XFormBase.js +85 -34
- package/lib/components/XFormComponent.d.ts +11 -3
- package/lib/components/XFormComponent.js +29 -3
- package/lib/components/XFormComponentDT.d.ts +30 -0
- package/lib/components/XFormComponentDT.js +119 -0
- package/lib/components/XFormDataTable2.d.ts +46 -6
- package/lib/components/XFormDataTable2.js +170 -40
- package/lib/components/XInput.d.ts +2 -2
- package/lib/components/XInputDT.d.ts +11 -0
- package/lib/components/XInputDT.js +37 -0
- package/lib/components/XInputDate.d.ts +2 -1
- package/lib/components/XInputDate.js +4 -2
- package/lib/components/XInputDecimal.d.ts +9 -2
- package/lib/components/XInputDecimal.js +62 -45
- package/lib/components/XInputDecimalDT.d.ts +10 -8
- package/lib/components/XInputDecimalDT.js +58 -36
- package/lib/components/XInputText.d.ts +3 -2
- package/lib/components/XInputText.js +7 -1
- package/lib/components/XInputTextarea.d.ts +2 -2
- package/lib/components/XLazyDataTable.d.ts +5 -0
- package/lib/components/XLazyDataTable.js +38 -23
- package/lib/components/XSearchButton.d.ts +6 -4
- package/lib/components/XSearchButton.js +19 -17
- package/lib/components/XSearchButtonDT.js +3 -3
- package/lib/components/XUtils.d.ts +12 -2
- package/lib/components/XUtils.js +94 -1
- package/lib/components/XUtilsConversions.d.ts +1 -0
- package/lib/components/XUtilsConversions.js +14 -1
- package/lib/components/XUtilsMetadata.d.ts +4 -1
- package/lib/components/XUtilsMetadata.js +46 -7
- package/lib/serverApi/FindParam.d.ts +10 -2
- package/lib/serverApi/XUtilsCommon.d.ts +1 -0
- package/lib/serverApi/XUtilsCommon.js +4 -0
- package/package.json +1 -1
|
@@ -3,6 +3,16 @@ import { Component, ReactChild } from "react";
|
|
|
3
3
|
import { DataTableFilterMeta } from "primereact/datatable";
|
|
4
4
|
import { XEntity, XField } from "../serverApi/XEntityMetadata";
|
|
5
5
|
import { FilterMatchMode } from "primereact/api";
|
|
6
|
+
import { XTableFieldChangeEvent } from "./XFieldChangeEvent";
|
|
7
|
+
import { XCustomFilter } from "../serverApi/FindParam";
|
|
8
|
+
import { XFormComponentDT } from "./XFormComponentDT";
|
|
9
|
+
import { XErrorMap } from "./XErrors";
|
|
10
|
+
import { IconType } from "primereact/utils";
|
|
11
|
+
import { ButtonProps } from "primereact/button";
|
|
12
|
+
export interface XRowTechData {
|
|
13
|
+
xFormComponentDTList: Array<XFormComponentDT<any>>;
|
|
14
|
+
errorMap: XErrorMap;
|
|
15
|
+
}
|
|
6
16
|
export interface XDropdownOptionsMap {
|
|
7
17
|
[assocField: string]: any[];
|
|
8
18
|
}
|
|
@@ -12,7 +22,8 @@ export interface XFormDataTableProps {
|
|
|
12
22
|
dataKey?: string;
|
|
13
23
|
paginator?: boolean;
|
|
14
24
|
rows?: number;
|
|
15
|
-
filterDisplay: "menu" | "row";
|
|
25
|
+
filterDisplay: "menu" | "row" | "none";
|
|
26
|
+
sortable: boolean;
|
|
16
27
|
scrollable: boolean;
|
|
17
28
|
scrollWidth?: string;
|
|
18
29
|
scrollHeight?: string;
|
|
@@ -20,17 +31,26 @@ export interface XFormDataTableProps {
|
|
|
20
31
|
label?: string;
|
|
21
32
|
readOnly?: boolean;
|
|
22
33
|
onClickAddRow?: () => void;
|
|
23
|
-
onClickRemoveRow?: () => void;
|
|
34
|
+
onClickRemoveRow?: (row: any) => void;
|
|
35
|
+
removeButtonInRow: boolean;
|
|
36
|
+
addRowLabel: string;
|
|
37
|
+
addRowIcon?: IconType<ButtonProps>;
|
|
38
|
+
removeRowLabel: string;
|
|
39
|
+
removeRowIcon?: IconType<ButtonProps>;
|
|
24
40
|
width?: string;
|
|
25
41
|
children: ReactChild[];
|
|
26
42
|
}
|
|
27
43
|
export declare class XFormDataTable2 extends Component<XFormDataTableProps> {
|
|
28
44
|
static defaultProps: {
|
|
29
45
|
filterDisplay: string;
|
|
46
|
+
sortable: boolean;
|
|
30
47
|
scrollable: boolean;
|
|
31
48
|
scrollWidth: string;
|
|
32
49
|
scrollHeight: string;
|
|
33
50
|
shrinkWidth: boolean;
|
|
51
|
+
removeButtonInRow: boolean;
|
|
52
|
+
addRowLabel: string;
|
|
53
|
+
removeRowLabel: string;
|
|
34
54
|
};
|
|
35
55
|
props: XFormDataTableProps;
|
|
36
56
|
entity?: string;
|
|
@@ -42,7 +62,8 @@ export declare class XFormDataTable2 extends Component<XFormDataTableProps> {
|
|
|
42
62
|
filters: DataTableFilterMeta;
|
|
43
63
|
};
|
|
44
64
|
constructor(props: XFormDataTableProps);
|
|
45
|
-
|
|
65
|
+
getPathForColumn(columnProps: XFormColumnProps): string;
|
|
66
|
+
getDisplayFieldOrId(columnPropsAutoComplete: XFormAutoCompleteColumnProps): string;
|
|
46
67
|
static getHeader(columnProps: XFormColumnProps, xEntity: XEntity, field: string, xField: XField): string;
|
|
47
68
|
getEntity(): string;
|
|
48
69
|
createInitFilters(): DataTableFilterMeta;
|
|
@@ -55,17 +76,23 @@ export declare class XFormDataTable2 extends Component<XFormDataTableProps> {
|
|
|
55
76
|
onDropdownFilterChange(field: string, displayValue: any): void;
|
|
56
77
|
getDropdownFilterValue(field: string): any;
|
|
57
78
|
bodyTemplate(columnProps: XFormColumnProps, rowData: any, xEntity: XEntity): any;
|
|
58
|
-
|
|
59
|
-
|
|
79
|
+
onClickAddRow(): void;
|
|
80
|
+
onClickRemoveRowBySelection(): void;
|
|
81
|
+
removeRow(row: any): void;
|
|
82
|
+
validate(): void;
|
|
83
|
+
getErrorMessages(): string;
|
|
60
84
|
render(): JSX.Element;
|
|
61
85
|
}
|
|
86
|
+
export type TableFieldOnChange = (e: XTableFieldChangeEvent<any, any>) => void;
|
|
87
|
+
export type XTableFieldFilterProp = XCustomFilter | ((object: any, rowData: any) => XCustomFilter | undefined);
|
|
62
88
|
export interface XFormColumnProps {
|
|
63
|
-
type:
|
|
89
|
+
type: "inputSimple" | "dropdown" | "autoComplete" | "searchButton";
|
|
64
90
|
header?: any;
|
|
65
91
|
readOnly?: boolean;
|
|
66
92
|
dropdownInFilter?: boolean;
|
|
67
93
|
showFilterMenu?: boolean;
|
|
68
94
|
width?: string;
|
|
95
|
+
onChange?: TableFieldOnChange;
|
|
69
96
|
}
|
|
70
97
|
export interface XFormInputSimpleColumnProps extends XFormColumnProps {
|
|
71
98
|
field: string;
|
|
@@ -74,6 +101,13 @@ export interface XFormDropdownColumnProps extends XFormColumnProps {
|
|
|
74
101
|
assocField: string;
|
|
75
102
|
displayField: string;
|
|
76
103
|
}
|
|
104
|
+
export interface XFormAutoCompleteColumnProps extends XFormColumnProps {
|
|
105
|
+
assocField: string;
|
|
106
|
+
displayField: string | ((suggestion: any) => string);
|
|
107
|
+
searchTable?: any;
|
|
108
|
+
assocForm?: any;
|
|
109
|
+
filter?: XTableFieldFilterProp;
|
|
110
|
+
}
|
|
77
111
|
export interface XFormSearchButtonColumnProps extends XFormColumnProps {
|
|
78
112
|
assocField: string;
|
|
79
113
|
displayField: string;
|
|
@@ -91,6 +125,12 @@ export declare const XFormDropdownColumn: {
|
|
|
91
125
|
type: string;
|
|
92
126
|
};
|
|
93
127
|
};
|
|
128
|
+
export declare const XFormAutoCompleteColumn: {
|
|
129
|
+
(props: XFormAutoCompleteColumnProps): null;
|
|
130
|
+
defaultProps: {
|
|
131
|
+
type: string;
|
|
132
|
+
};
|
|
133
|
+
};
|
|
94
134
|
export declare const XFormSearchButtonColumn: {
|
|
95
135
|
(props: XFormSearchButtonColumnProps): null;
|
|
96
136
|
defaultProps: {
|
|
@@ -60,7 +60,8 @@ var __values = (this && this.__values) || function(o) {
|
|
|
60
60
|
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
61
61
|
};
|
|
62
62
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
63
|
-
exports.XFormSearchButtonColumn = exports.XFormDropdownColumn = exports.XFormColumn = exports.XFormDataTable2 = void 0;
|
|
63
|
+
exports.XFormSearchButtonColumn = exports.XFormAutoCompleteColumn = exports.XFormDropdownColumn = exports.XFormColumn = exports.XFormDataTable2 = void 0;
|
|
64
|
+
var XFormBase_1 = require("./XFormBase");
|
|
64
65
|
var react_1 = __importStar(require("react"));
|
|
65
66
|
var XDropdownDT_1 = require("./XDropdownDT");
|
|
66
67
|
var datatable_1 = require("primereact/datatable");
|
|
@@ -76,6 +77,8 @@ var XInputDateDT_1 = require("./XInputDateDT");
|
|
|
76
77
|
var XCheckboxDT_1 = require("./XCheckboxDT");
|
|
77
78
|
var tristatecheckbox_1 = require("primereact/tristatecheckbox");
|
|
78
79
|
var api_1 = require("primereact/api");
|
|
80
|
+
var XAutoCompleteDT_1 = require("./XAutoCompleteDT");
|
|
81
|
+
var XButtonIconNarrow_1 = require("./XButtonIconNarrow");
|
|
79
82
|
var XFormDataTable2 = /** @class */ (function (_super) {
|
|
80
83
|
__extends(XFormDataTable2, _super);
|
|
81
84
|
function XFormDataTable2(props) {
|
|
@@ -94,8 +97,9 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
94
97
|
dropdownOptionsMap: {},
|
|
95
98
|
filters: _this.createInitFilters()
|
|
96
99
|
};
|
|
97
|
-
_this.
|
|
98
|
-
_this.
|
|
100
|
+
_this.onClickAddRow = _this.onClickAddRow.bind(_this);
|
|
101
|
+
_this.onClickRemoveRowBySelection = _this.onClickRemoveRowBySelection.bind(_this);
|
|
102
|
+
_this.removeRow = _this.removeRow.bind(_this);
|
|
99
103
|
_this.onSelectionChange = _this.onSelectionChange.bind(_this);
|
|
100
104
|
_this.onDropdownOptionsMapChange = _this.onDropdownOptionsMapChange.bind(_this);
|
|
101
105
|
_this.onFilter = _this.onFilter.bind(_this);
|
|
@@ -104,12 +108,13 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
104
108
|
_this.onDropdownFilterChange = _this.onDropdownFilterChange.bind(_this);
|
|
105
109
|
_this.getDropdownFilterValue = _this.getDropdownFilterValue.bind(_this);
|
|
106
110
|
_this.bodyTemplate = _this.bodyTemplate.bind(_this);
|
|
111
|
+
props.form.addXFormDataTable(_this);
|
|
107
112
|
try {
|
|
108
113
|
//props.form.addField(props.assocField + '.*FAKE*'); - vzdy mame aspon 1 field, nie je to potrebne
|
|
109
114
|
for (var _b = __values(props.children), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
110
115
|
var child = _c.value;
|
|
111
116
|
var childColumn = child; // nevedel som to krajsie...
|
|
112
|
-
var field = props.assocField + '.' +
|
|
117
|
+
var field = props.assocField + '.' + _this.getPathForColumn(childColumn.props);
|
|
113
118
|
props.form.addField(field);
|
|
114
119
|
}
|
|
115
120
|
}
|
|
@@ -122,7 +127,7 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
122
127
|
}
|
|
123
128
|
return _this;
|
|
124
129
|
}
|
|
125
|
-
XFormDataTable2.getPathForColumn = function (columnProps) {
|
|
130
|
+
XFormDataTable2.prototype.getPathForColumn = function (columnProps) {
|
|
126
131
|
if (columnProps.type === "inputSimple") {
|
|
127
132
|
var columnPropsInputSimple = columnProps;
|
|
128
133
|
return columnPropsInputSimple.field;
|
|
@@ -131,6 +136,10 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
131
136
|
var columnPropsDropdown = columnProps;
|
|
132
137
|
return columnPropsDropdown.assocField + '.' + columnPropsDropdown.displayField;
|
|
133
138
|
}
|
|
139
|
+
else if (columnProps.type === "autoComplete") {
|
|
140
|
+
var columnPropsAutoComplete = columnProps;
|
|
141
|
+
return columnPropsAutoComplete.assocField + '.' + this.getDisplayFieldOrId(columnPropsAutoComplete);
|
|
142
|
+
}
|
|
134
143
|
else if (columnProps.type === "searchButton") {
|
|
135
144
|
var columnPropsSearchButton = columnProps;
|
|
136
145
|
return columnPropsSearchButton.assocField + '.' + columnPropsSearchButton.displayField;
|
|
@@ -139,8 +148,21 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
139
148
|
throw "Unknown prop type = " + columnProps.type;
|
|
140
149
|
}
|
|
141
150
|
};
|
|
151
|
+
XFormDataTable2.prototype.getDisplayFieldOrId = function (columnPropsAutoComplete) {
|
|
152
|
+
// toto je hack - ak ratame displayField cez funkciu, tak nam potom v kode chyba (hociaky) atribut asociovaneho objektu
|
|
153
|
+
// aby sme nemuseli robit nejake velke prerabky a zmeny, tak podsunieme id-ckovy atribut
|
|
154
|
+
if (typeof columnPropsAutoComplete.displayField === 'string') {
|
|
155
|
+
return columnPropsAutoComplete.displayField; // vsetko ok
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
// v displayField mame funkciu, zistime id-ckovy atribut
|
|
159
|
+
// TODO - problem - sortovanie/filtrovanie bude fungovat podla tohto id atributu
|
|
160
|
+
var xAssoc = XUtilsMetadata_1.XUtilsMetadata.getXAssocToOne(XUtilsMetadata_1.XUtilsMetadata.getXEntity(this.getEntity()), columnPropsAutoComplete.assocField);
|
|
161
|
+
return XUtilsMetadata_1.XUtilsMetadata.getXEntity(xAssoc.entityName).idField;
|
|
162
|
+
}
|
|
163
|
+
};
|
|
142
164
|
XFormDataTable2.getHeader = function (columnProps, xEntity, field, xField) {
|
|
143
|
-
var _a, _b, _c;
|
|
165
|
+
var _a, _b, _c, _d;
|
|
144
166
|
// poznamky - parametre field a xField by sme mohli vyratavat na zaklade columnProps ale kedze ich uz mame, setrime performance a neduplikujeme vypocet
|
|
145
167
|
// nie je to tu uplne idealne nakodene, ale je to pomerne prehladne
|
|
146
168
|
var isNullable = true;
|
|
@@ -156,16 +178,22 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
156
178
|
isNullable = xAssoc.isNullable;
|
|
157
179
|
readOnly = (_a = columnProps.readOnly) !== null && _a !== void 0 ? _a : false;
|
|
158
180
|
}
|
|
181
|
+
else if (columnProps.type === "autoComplete") {
|
|
182
|
+
var columnPropsAutoComplete = columnProps;
|
|
183
|
+
var xAssoc = XUtilsMetadata_1.XUtilsMetadata.getXAssocToOne(xEntity, columnPropsAutoComplete.assocField);
|
|
184
|
+
isNullable = xAssoc.isNullable;
|
|
185
|
+
readOnly = (_b = columnProps.readOnly) !== null && _b !== void 0 ? _b : false;
|
|
186
|
+
}
|
|
159
187
|
else if (columnProps.type === "searchButton") {
|
|
160
188
|
var columnPropsSearchButton = columnProps;
|
|
161
189
|
var xAssoc = XUtilsMetadata_1.XUtilsMetadata.getXAssocToOne(xEntity, columnPropsSearchButton.assocField);
|
|
162
190
|
isNullable = xAssoc.isNullable;
|
|
163
|
-
readOnly = (
|
|
191
|
+
readOnly = (_c = columnProps.readOnly) !== null && _c !== void 0 ? _c : false;
|
|
164
192
|
}
|
|
165
193
|
else {
|
|
166
194
|
throw "Unknown prop type = " + columnProps.type;
|
|
167
195
|
}
|
|
168
|
-
var header = (
|
|
196
|
+
var header = (_d = columnProps.header) !== null && _d !== void 0 ? _d : field;
|
|
169
197
|
if (!isNullable && !readOnly) {
|
|
170
198
|
header = XUtils_1.XUtils.markNotNull(header);
|
|
171
199
|
}
|
|
@@ -180,13 +208,16 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
180
208
|
XFormDataTable2.prototype.createInitFilters = function () {
|
|
181
209
|
var e_2, _a;
|
|
182
210
|
var initFilters = {};
|
|
211
|
+
if (this.props.filterDisplay === "none") {
|
|
212
|
+
return initFilters;
|
|
213
|
+
}
|
|
183
214
|
var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(this.getEntity());
|
|
184
215
|
try {
|
|
185
216
|
// TODO - asi by bolo fajn si tieto field, xField niekam ulozit a iterovat ulozene hodnoty, pouziva sa to na viacerych miestach
|
|
186
217
|
for (var _b = __values(this.props.children), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
187
218
|
var child = _c.value;
|
|
188
219
|
var childColumn = child; // nevedel som to krajsie...
|
|
189
|
-
var field =
|
|
220
|
+
var field = this.getPathForColumn(childColumn.props);
|
|
190
221
|
var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, field);
|
|
191
222
|
// TODO column.props.dropdownInFilter - pre "menu" by bolo fajn mat zoznam "enumov"
|
|
192
223
|
var filterMatchMode = this.getFilterMatchMode(xField);
|
|
@@ -309,7 +340,7 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
309
340
|
var columnPropsInputSimple = columnProps;
|
|
310
341
|
var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, columnPropsInputSimple.field);
|
|
311
342
|
if (xField.type === "decimal" || xField.type === "number") {
|
|
312
|
-
body = react_1.default.createElement(XInputDecimalDT_1.XInputDecimalDT, { form: this.props.form, entity: this.getEntity(), field: columnPropsInputSimple.field, rowData: rowData, readOnly: columnPropsInputSimple.readOnly });
|
|
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 });
|
|
313
344
|
}
|
|
314
345
|
else if (xField.type === "date" || xField.type === "datetime") {
|
|
315
346
|
body = react_1.default.createElement(XInputDateDT_1.XInputDateDT, { form: this.props.form, xField: xField, field: columnPropsInputSimple.field, rowData: rowData, readOnly: columnPropsInputSimple.readOnly });
|
|
@@ -326,6 +357,10 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
326
357
|
var columnPropsDropdown = columnProps;
|
|
327
358
|
body = react_1.default.createElement(XDropdownDT_1.XDropdownDT, { form: this.props.form, entity: this.getEntity(), assocField: columnPropsDropdown.assocField, displayField: columnPropsDropdown.displayField, dropdownOptionsMap: this.state.dropdownOptionsMap, onDropdownOptionsMapChange: this.onDropdownOptionsMapChange, rowData: rowData });
|
|
328
359
|
}
|
|
360
|
+
else if (columnProps.type === "autoComplete") {
|
|
361
|
+
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 });
|
|
363
|
+
}
|
|
329
364
|
else if (columnProps.type === "searchButton") {
|
|
330
365
|
var columnPropsSearchButton = columnProps;
|
|
331
366
|
body = react_1.default.createElement(XSearchButtonDT_1.XSearchButtonDT, { form: this.props.form, entity: this.getEntity(), assocField: columnPropsSearchButton.assocField, displayField: columnPropsSearchButton.displayField, searchTable: columnPropsSearchButton.searchTable, rowData: rowData, readOnly: columnPropsSearchButton.readOnly });
|
|
@@ -335,19 +370,95 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
335
370
|
}
|
|
336
371
|
return body;
|
|
337
372
|
};
|
|
338
|
-
XFormDataTable2.prototype.
|
|
339
|
-
|
|
373
|
+
XFormDataTable2.prototype.onClickAddRow = function () {
|
|
374
|
+
if (this.props.onClickAddRow) {
|
|
375
|
+
// custom add row
|
|
376
|
+
this.props.onClickAddRow();
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
// default add row
|
|
380
|
+
this.props.form.onTableAddRow(this.props.assocField, {}, this.dataKey, this.state.selectedRow);
|
|
381
|
+
}
|
|
340
382
|
};
|
|
341
383
|
;
|
|
342
|
-
XFormDataTable2.prototype.
|
|
384
|
+
XFormDataTable2.prototype.onClickRemoveRowBySelection = function () {
|
|
343
385
|
if (this.state.selectedRow !== undefined) {
|
|
344
|
-
this.
|
|
386
|
+
this.removeRow(this.state.selectedRow);
|
|
345
387
|
}
|
|
346
388
|
else {
|
|
347
389
|
alert("Please select the row.");
|
|
348
390
|
}
|
|
349
391
|
};
|
|
350
392
|
;
|
|
393
|
+
XFormDataTable2.prototype.removeRow = function (row) {
|
|
394
|
+
if (this.props.onClickRemoveRow) {
|
|
395
|
+
// custom remove
|
|
396
|
+
this.props.onClickRemoveRow(row);
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
// default remove
|
|
400
|
+
this.props.form.onTableRemoveRow(this.props.assocField, row);
|
|
401
|
+
}
|
|
402
|
+
};
|
|
403
|
+
XFormDataTable2.prototype.validate = function () {
|
|
404
|
+
var e_3, _a, e_4, _b;
|
|
405
|
+
// zvalidujeme vsetky rows a pripadne chyby zapiseme do specialneho fieldu __x_rowTechData
|
|
406
|
+
var object = this.props.form.getXObject();
|
|
407
|
+
var rowList = object[this.props.assocField];
|
|
408
|
+
try {
|
|
409
|
+
for (var rowList_1 = __values(rowList), rowList_1_1 = rowList_1.next(); !rowList_1_1.done; rowList_1_1 = rowList_1.next()) {
|
|
410
|
+
var row = rowList_1_1.value;
|
|
411
|
+
var xRowTechData = XFormBase_1.XFormBase.getXRowTechData(row);
|
|
412
|
+
var xErrorMap = {};
|
|
413
|
+
try {
|
|
414
|
+
for (var _c = (e_4 = void 0, __values(xRowTechData.xFormComponentDTList)), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
415
|
+
var xFormComponentDT = _d.value;
|
|
416
|
+
var errorItem = xFormComponentDT.validate();
|
|
417
|
+
if (errorItem) {
|
|
418
|
+
//console.log("Mame field = " + errorItem.field);
|
|
419
|
+
xErrorMap[errorItem.field] = errorItem.xError;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
424
|
+
finally {
|
|
425
|
+
try {
|
|
426
|
+
if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
|
|
427
|
+
}
|
|
428
|
+
finally { if (e_4) throw e_4.error; }
|
|
429
|
+
}
|
|
430
|
+
xRowTechData.errorMap = xErrorMap;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
434
|
+
finally {
|
|
435
|
+
try {
|
|
436
|
+
if (rowList_1_1 && !rowList_1_1.done && (_a = rowList_1.return)) _a.call(rowList_1);
|
|
437
|
+
}
|
|
438
|
+
finally { if (e_3) throw e_3.error; }
|
|
439
|
+
}
|
|
440
|
+
};
|
|
441
|
+
XFormDataTable2.prototype.getErrorMessages = function () {
|
|
442
|
+
var e_5, _a;
|
|
443
|
+
var msg = "";
|
|
444
|
+
var object = this.props.form.getXObject();
|
|
445
|
+
var rowList = object[this.props.assocField];
|
|
446
|
+
try {
|
|
447
|
+
for (var rowList_2 = __values(rowList), rowList_2_1 = rowList_2.next(); !rowList_2_1.done; rowList_2_1 = rowList_2.next()) {
|
|
448
|
+
var row = rowList_2_1.value;
|
|
449
|
+
var xRowTechData = XFormBase_1.XFormBase.getXRowTechData(row);
|
|
450
|
+
msg += XUtils_1.XUtils.getErrorMessages(xRowTechData.errorMap);
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
454
|
+
finally {
|
|
455
|
+
try {
|
|
456
|
+
if (rowList_2_1 && !rowList_2_1.done && (_a = rowList_2.return)) _a.call(rowList_2);
|
|
457
|
+
}
|
|
458
|
+
finally { if (e_5) throw e_5.error; }
|
|
459
|
+
}
|
|
460
|
+
return msg;
|
|
461
|
+
};
|
|
351
462
|
XFormDataTable2.prototype.render = function () {
|
|
352
463
|
var _this = this;
|
|
353
464
|
var paginator = this.props.paginator !== undefined ? this.props.paginator : false;
|
|
@@ -360,12 +471,11 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
360
471
|
rows = 5; // default
|
|
361
472
|
}
|
|
362
473
|
}
|
|
474
|
+
var filterDisplay = this.props.filterDisplay !== "none" ? this.props.filterDisplay : undefined;
|
|
363
475
|
var label = this.props.label !== undefined ? this.props.label : this.props.assocField;
|
|
364
476
|
var readOnly = this.props.readOnly !== undefined ? this.props.readOnly : false;
|
|
365
477
|
// v bloku function (child) nejde pouzit priamo this, thisLocal uz ide pouzit
|
|
366
478
|
var thisLocal = this;
|
|
367
|
-
var onClickAddRow = this.props.onClickAddRow !== undefined ? this.props.onClickAddRow : this.onClickAddRowDefault;
|
|
368
|
-
var onClickRemoveRow = this.props.onClickRemoveRow !== undefined ? this.props.onClickRemoveRow : this.onClickRemoveRowDefault;
|
|
369
479
|
var object = this.props.form.state.object;
|
|
370
480
|
var valueList = object !== null ? object[this.props.assocField] : [];
|
|
371
481
|
var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(this.getEntity());
|
|
@@ -404,31 +514,35 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
404
514
|
var childColumnProps = childColumn.props;
|
|
405
515
|
// je dolezite, aby field obsahoval cely path az po zobrazovany atribut, lebo podla neho sa vykonava filtrovanie a sortovanie
|
|
406
516
|
// (aj ked, da sa to prebit na stlpcoch (na elemente Column), su na to atributy)
|
|
407
|
-
var field =
|
|
517
|
+
var field = thisLocal.getPathForColumn(childColumnProps);
|
|
408
518
|
// TODO - toto by sa mohlo vytiahnut vyssie, aj v bodyTemplate sa vola metoda XUtilsMetadata.getXFieldByPath
|
|
409
519
|
var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, field);
|
|
410
520
|
// *********** header ***********
|
|
411
521
|
var header = XFormDataTable2.getHeader(childColumnProps, xEntity, field, xField);
|
|
412
522
|
// *********** filterElement ***********
|
|
413
523
|
var filterElement;
|
|
414
|
-
if (
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
524
|
+
if (thisLocal.props.filterDisplay !== "none") {
|
|
525
|
+
if (xField.type === "boolean") {
|
|
526
|
+
var checkboxValue = thisLocal.getCheckboxFilterValue(field);
|
|
527
|
+
filterElement = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: checkboxValue, onChange: function (e) { return thisLocal.onCheckboxFilterChange(field, e.value); } });
|
|
528
|
+
}
|
|
529
|
+
else if (childColumnProps.dropdownInFilter) {
|
|
530
|
+
var dropdownValue = thisLocal.getDropdownFilterValue(field);
|
|
531
|
+
filterElement = react_1.default.createElement(XDropdownDTFilter_1.XDropdownDTFilter, { entity: thisLocal.getEntity(), path: field, value: dropdownValue, onValueChange: thisLocal.onDropdownFilterChange });
|
|
532
|
+
}
|
|
421
533
|
}
|
|
422
534
|
// *********** showFilterMenu ***********
|
|
423
|
-
var showFilterMenu;
|
|
424
|
-
if (
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
if (
|
|
431
|
-
|
|
535
|
+
var showFilterMenu = false;
|
|
536
|
+
if (thisLocal.props.filterDisplay !== "none") {
|
|
537
|
+
if (childColumnProps.showFilterMenu !== undefined) {
|
|
538
|
+
showFilterMenu = childColumnProps.showFilterMenu;
|
|
539
|
+
}
|
|
540
|
+
else {
|
|
541
|
+
showFilterMenu = true; // default
|
|
542
|
+
if (thisLocal.props.filterDisplay === "row") {
|
|
543
|
+
if (xField.type === "boolean" || childColumnProps.dropdownInFilter) {
|
|
544
|
+
showFilterMenu = false;
|
|
545
|
+
}
|
|
432
546
|
}
|
|
433
547
|
}
|
|
434
548
|
}
|
|
@@ -438,10 +552,10 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
438
552
|
// *********** width/headerStyle ***********
|
|
439
553
|
var width = XUtils_1.XUtils.processPropWidth(childColumn.props.width);
|
|
440
554
|
if (width === undefined || width === "default") {
|
|
441
|
-
// TODO - if filter not used at all, then buttons flags should be false
|
|
442
555
|
var filterMenuInFilterRow = thisLocal.props.filterDisplay === "row" && showFilterMenu;
|
|
556
|
+
var sortableButtonInHeader = thisLocal.props.sortable;
|
|
443
557
|
var filterButtonInHeader = thisLocal.props.filterDisplay === "menu";
|
|
444
|
-
width = XUtilsMetadata_1.XUtilsMetadata.computeColumnWidth(xField, filterMenuInFilterRow, childColumnProps.type, header, filterButtonInHeader);
|
|
558
|
+
width = XUtilsMetadata_1.XUtilsMetadata.computeColumnWidth(xField, filterMenuInFilterRow, childColumnProps.type, header, sortableButtonInHeader, filterButtonInHeader);
|
|
445
559
|
}
|
|
446
560
|
var headerStyle = {};
|
|
447
561
|
if (width !== undefined) {
|
|
@@ -463,24 +577,32 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
463
577
|
align = "center";
|
|
464
578
|
}
|
|
465
579
|
// }
|
|
466
|
-
return react_1.default.createElement(column_1.Column, { field: field, header: header, filter:
|
|
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); } });
|
|
467
581
|
});
|
|
582
|
+
if (this.props.removeButtonInRow) {
|
|
583
|
+
// 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 }); } }));
|
|
585
|
+
}
|
|
468
586
|
return (react_1.default.createElement("div", null,
|
|
469
587
|
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
470
588
|
react_1.default.createElement("label", null, label)),
|
|
471
589
|
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
472
|
-
react_1.default.createElement(datatable_1.DataTable, { ref: function (el) { return _this.dt = el; }, value: valueList, dataKey: this.dataKey, paginator: paginator, rows: rows, totalRecords: valueList.length, filterDisplay:
|
|
590
|
+
react_1.default.createElement(datatable_1.DataTable, { ref: function (el) { return _this.dt = el; }, value: valueList, dataKey: this.dataKey, paginator: paginator, rows: rows, totalRecords: valueList.length, filterDisplay: filterDisplay, filters: this.state.filters, onFilter: this.onFilter, sortMode: "multiple", removableSort: true, selectionMode: "single", selection: this.state.selectedRow, onSelectionChange: this.onSelectionChange, className: "p-datatable-sm x-form-datatable", resizableColumns: true, columnResizeMode: "expand", tableStyle: tableStyle, scrollable: this.props.scrollable, scrollHeight: scrollHeight, style: style }, columnElemList)),
|
|
473
591
|
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
474
|
-
react_1.default.createElement(XButton_1.XButton, { label:
|
|
475
|
-
react_1.default.createElement(XButton_1.XButton, { label:
|
|
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 }))));
|
|
476
594
|
};
|
|
477
595
|
XFormDataTable2.defaultProps = {
|
|
478
596
|
filterDisplay: "row",
|
|
597
|
+
sortable: true,
|
|
479
598
|
scrollable: true,
|
|
480
599
|
scrollWidth: '100%',
|
|
481
600
|
scrollHeight: '200vh',
|
|
482
601
|
// tym ze pouzivame 200vh (max-height pre body), tak realne scrollovanie sa zapne az pri velmi vela riadkoch
|
|
483
|
-
shrinkWidth: true
|
|
602
|
+
shrinkWidth: true,
|
|
603
|
+
removeButtonInRow: false,
|
|
604
|
+
addRowLabel: 'Add row',
|
|
605
|
+
removeRowLabel: 'Remove row'
|
|
484
606
|
};
|
|
485
607
|
return XFormDataTable2;
|
|
486
608
|
}(react_1.Component));
|
|
@@ -501,6 +623,14 @@ exports.XFormDropdownColumn = XFormDropdownColumn;
|
|
|
501
623
|
exports.XFormDropdownColumn.defaultProps = {
|
|
502
624
|
type: "dropdown"
|
|
503
625
|
};
|
|
626
|
+
var XFormAutoCompleteColumn = function (props) {
|
|
627
|
+
// nevadi ze tu nic nevraciame, field a header vieme precitat a zvysok by sme aj tak zahodili lebo vytvarame novy element
|
|
628
|
+
return (null);
|
|
629
|
+
};
|
|
630
|
+
exports.XFormAutoCompleteColumn = XFormAutoCompleteColumn;
|
|
631
|
+
exports.XFormAutoCompleteColumn.defaultProps = {
|
|
632
|
+
type: "autoComplete"
|
|
633
|
+
};
|
|
504
634
|
var XFormSearchButtonColumn = function (props) {
|
|
505
635
|
// nevadi ze tu nic nevraciame, field a header vieme precitat a zvysok by sme aj tak zahodili lebo vytvarame novy element
|
|
506
636
|
return (null);
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { XFormComponent, XFormComponentProps } from "./XFormComponent";
|
|
3
3
|
import { XField } from "../serverApi/XEntityMetadata";
|
|
4
|
-
export interface XInputProps extends XFormComponentProps {
|
|
4
|
+
export interface XInputProps<T> extends XFormComponentProps<T> {
|
|
5
5
|
field: string;
|
|
6
6
|
inputStyle?: React.CSSProperties;
|
|
7
7
|
}
|
|
8
|
-
export declare abstract class XInput<P extends XInputProps
|
|
8
|
+
export declare abstract class XInput<T, P extends XInputProps<T>> extends XFormComponent<T, P> {
|
|
9
9
|
protected xField: XField;
|
|
10
10
|
protected constructor(props: P);
|
|
11
11
|
getField(): string;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { XField } from "../serverApi/XEntityMetadata";
|
|
2
|
+
import { XFormComponentDT, XFormComponentDTProps } from "./XFormComponentDT";
|
|
3
|
+
export interface XInputDTProps extends XFormComponentDTProps {
|
|
4
|
+
field: string;
|
|
5
|
+
}
|
|
6
|
+
export declare abstract class XInputDT<P extends XInputDTProps> extends XFormComponentDT<P> {
|
|
7
|
+
protected xField: XField;
|
|
8
|
+
protected constructor(props: P);
|
|
9
|
+
getField(): string;
|
|
10
|
+
isNotNull(): boolean;
|
|
11
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.XInputDT = void 0;
|
|
19
|
+
var XUtilsMetadata_1 = require("./XUtilsMetadata");
|
|
20
|
+
var XFormComponentDT_1 = require("./XFormComponentDT");
|
|
21
|
+
// spolocna nadtrieda pre jednoduche inputy (nie asociacne)
|
|
22
|
+
var XInputDT = /** @class */ (function (_super) {
|
|
23
|
+
__extends(XInputDT, _super);
|
|
24
|
+
function XInputDT(props) {
|
|
25
|
+
var _this = _super.call(this, props) || this;
|
|
26
|
+
_this.xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPathStr(props.entity, props.field);
|
|
27
|
+
return _this;
|
|
28
|
+
}
|
|
29
|
+
XInputDT.prototype.getField = function () {
|
|
30
|
+
return this.props.field;
|
|
31
|
+
};
|
|
32
|
+
XInputDT.prototype.isNotNull = function () {
|
|
33
|
+
return !this.xField.isNullable;
|
|
34
|
+
};
|
|
35
|
+
return XInputDT;
|
|
36
|
+
}(XFormComponentDT_1.XFormComponentDT));
|
|
37
|
+
exports.XInputDT = XInputDT;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
import { XFormBase } from "./XFormBase";
|
|
2
|
+
import React from "react";
|
|
3
3
|
export declare const XInputDate: (props: {
|
|
4
4
|
form: XFormBase;
|
|
5
5
|
field: string;
|
|
6
6
|
label?: string | undefined;
|
|
7
7
|
readOnly?: boolean | undefined;
|
|
8
|
+
labelStyle?: React.CSSProperties | undefined;
|
|
8
9
|
}) => JSX.Element;
|
|
@@ -11,7 +11,7 @@ var XUtilsMetadata_1 = require("./XUtilsMetadata");
|
|
|
11
11
|
var XUtilsCommon_1 = require("../serverApi/XUtilsCommon");
|
|
12
12
|
var XUtils_1 = require("./XUtils");
|
|
13
13
|
var XInputDate = function (props) {
|
|
14
|
-
var _a;
|
|
14
|
+
var _a, _b;
|
|
15
15
|
props.form.addField(props.field);
|
|
16
16
|
var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPathStr(props.form.getEntity(), props.field);
|
|
17
17
|
var showTime = (xField.type === 'datetime');
|
|
@@ -49,8 +49,10 @@ var XInputDate = function (props) {
|
|
|
49
49
|
}
|
|
50
50
|
// fieldValue zostalo undefined (konvertujeme null -> undefined) - Calendar pozaduje undefined, nechce null
|
|
51
51
|
}
|
|
52
|
+
var labelStyle = (_b = props.labelStyle) !== null && _b !== void 0 ? _b : {};
|
|
53
|
+
XUtils_1.XUtils.addCssPropIfNotExists(labelStyle, { width: XUtils_1.XUtils.FIELD_LABEL_WIDTH });
|
|
52
54
|
return (react_1.default.createElement("div", { className: "field grid" },
|
|
53
|
-
react_1.default.createElement("label", { htmlFor: props.field, className: "col-fixed", style:
|
|
55
|
+
react_1.default.createElement("label", { htmlFor: props.field, className: "col-fixed", style: labelStyle }, label),
|
|
54
56
|
react_1.default.createElement(calendar_1.Calendar, { id: props.field, value: fieldValue, onChange: onValueChange, disabled: readOnly, showIcon: true, dateFormat: (0, XUtilsConversions_1.dateFormatCalendar)(), showTime: showTime, showSeconds: showTime, inputClassName: cssClassName, showOnFocus: false })));
|
|
55
57
|
};
|
|
56
58
|
exports.XInputDate = XInputDate;
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { XFormComponentProps } from "./XFormComponent";
|
|
3
|
-
|
|
3
|
+
import { XInput } from "./XInput";
|
|
4
|
+
export interface XInputDecimalProps extends XFormComponentProps<number> {
|
|
4
5
|
field: string;
|
|
5
6
|
size?: number;
|
|
6
7
|
inputStyle?: React.CSSProperties;
|
|
7
8
|
}
|
|
8
|
-
export declare
|
|
9
|
+
export declare class XInputDecimal extends XInput<number, XInputDecimalProps> {
|
|
10
|
+
constructor(props: XInputDecimalProps);
|
|
11
|
+
getValue(): number | undefined;
|
|
12
|
+
onValueChange(e: any): void;
|
|
13
|
+
onBlur(e: any): void;
|
|
14
|
+
render(): JSX.Element;
|
|
15
|
+
}
|