@michalrakus/x-react-web-lib 1.1.0 → 1.3.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 +8 -4
- package/lib/components/XAutoCompleteBase.js +68 -27
- package/lib/components/XAutoCompleteDT.d.ts +33 -0
- package/lib/components/XAutoCompleteDT.js +140 -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 +5 -3
- package/lib/components/XExportRowsDialog.js +2 -2
- package/lib/components/XFieldChangeEvent.d.ts +11 -0
- package/lib/components/XFieldChangeEvent.js +2 -0
- package/lib/components/XFormBase.d.ts +19 -9
- package/lib/components/XFormBase.js +95 -34
- package/lib/components/XFormComponent.d.ts +13 -4
- package/lib/components/XFormComponent.js +57 -5
- package/lib/components/XFormComponentDT.d.ts +30 -0
- package/lib/components/XFormComponentDT.js +145 -0
- package/lib/components/XFormDataTable2.d.ts +48 -7
- package/lib/components/XFormDataTable2.js +208 -45
- 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 +5 -3
- 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 +39 -24
- 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/ExportImportParam.d.ts +2 -0
- 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
|
@@ -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);
|
|
@@ -303,29 +334,38 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
303
334
|
}
|
|
304
335
|
*/
|
|
305
336
|
// body={(rowData: any) => bodyTemplate(childColumn.props.field, rowData)}
|
|
306
|
-
XFormDataTable2.prototype.bodyTemplate = function (columnProps, rowData, xEntity) {
|
|
337
|
+
XFormDataTable2.prototype.bodyTemplate = function (columnProps, tableReadOnly, rowData, xEntity) {
|
|
338
|
+
var _a, _b;
|
|
307
339
|
var body;
|
|
308
340
|
if (columnProps.type === "inputSimple") {
|
|
309
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);
|
|
310
344
|
var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, columnPropsInputSimple.field);
|
|
311
345
|
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.
|
|
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 });
|
|
313
347
|
}
|
|
314
348
|
else if (xField.type === "date" || xField.type === "datetime") {
|
|
315
|
-
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 });
|
|
316
350
|
}
|
|
317
351
|
else if (xField.type === "boolean") {
|
|
318
|
-
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 });
|
|
319
353
|
}
|
|
320
354
|
else {
|
|
321
355
|
// xField.type === "string", pripadne ine jednoduche typy
|
|
322
|
-
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 });
|
|
323
357
|
}
|
|
324
358
|
}
|
|
325
359
|
else if (columnProps.type === "dropdown") {
|
|
326
360
|
var columnPropsDropdown = columnProps;
|
|
327
361
|
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
362
|
}
|
|
363
|
+
else if (columnProps.type === "autoComplete") {
|
|
364
|
+
var columnPropsAutoComplete = columnProps;
|
|
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 });
|
|
368
|
+
}
|
|
329
369
|
else if (columnProps.type === "searchButton") {
|
|
330
370
|
var columnPropsSearchButton = columnProps;
|
|
331
371
|
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 +375,123 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
335
375
|
}
|
|
336
376
|
return body;
|
|
337
377
|
};
|
|
338
|
-
XFormDataTable2.prototype.
|
|
339
|
-
|
|
378
|
+
XFormDataTable2.prototype.onClickAddRow = function () {
|
|
379
|
+
if (this.props.onClickAddRow) {
|
|
380
|
+
// custom add row
|
|
381
|
+
this.props.onClickAddRow();
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
// default add row
|
|
385
|
+
this.props.form.onTableAddRow(this.props.assocField, {}, this.dataKey, this.state.selectedRow);
|
|
386
|
+
}
|
|
340
387
|
};
|
|
341
388
|
;
|
|
342
|
-
XFormDataTable2.prototype.
|
|
389
|
+
XFormDataTable2.prototype.onClickRemoveRowBySelection = function () {
|
|
343
390
|
if (this.state.selectedRow !== undefined) {
|
|
344
|
-
this.
|
|
391
|
+
this.removeRow(this.state.selectedRow);
|
|
345
392
|
}
|
|
346
393
|
else {
|
|
347
394
|
alert("Please select the row.");
|
|
348
395
|
}
|
|
349
396
|
};
|
|
350
397
|
;
|
|
398
|
+
XFormDataTable2.prototype.removeRow = function (row) {
|
|
399
|
+
if (this.props.onClickRemoveRow) {
|
|
400
|
+
// custom remove
|
|
401
|
+
this.props.onClickRemoveRow(row);
|
|
402
|
+
}
|
|
403
|
+
else {
|
|
404
|
+
// default remove
|
|
405
|
+
this.props.form.onTableRemoveRow(this.props.assocField, row);
|
|
406
|
+
}
|
|
407
|
+
};
|
|
408
|
+
XFormDataTable2.prototype.validate = function () {
|
|
409
|
+
var e_3, _a, e_4, _b;
|
|
410
|
+
// zvalidujeme vsetky rows a pripadne chyby zapiseme do specialneho fieldu __x_rowTechData
|
|
411
|
+
var object = this.props.form.getXObject();
|
|
412
|
+
var rowList = object[this.props.assocField];
|
|
413
|
+
try {
|
|
414
|
+
for (var rowList_1 = __values(rowList), rowList_1_1 = rowList_1.next(); !rowList_1_1.done; rowList_1_1 = rowList_1.next()) {
|
|
415
|
+
var row = rowList_1_1.value;
|
|
416
|
+
var xRowTechData = XFormBase_1.XFormBase.getXRowTechData(row);
|
|
417
|
+
var xErrorMap = {};
|
|
418
|
+
try {
|
|
419
|
+
for (var _c = (e_4 = void 0, __values(xRowTechData.xFormComponentDTList)), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
420
|
+
var xFormComponentDT = _d.value;
|
|
421
|
+
var errorItem = xFormComponentDT.validate();
|
|
422
|
+
if (errorItem) {
|
|
423
|
+
//console.log("Mame field = " + errorItem.field);
|
|
424
|
+
xErrorMap[errorItem.field] = errorItem.xError;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
429
|
+
finally {
|
|
430
|
+
try {
|
|
431
|
+
if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
|
|
432
|
+
}
|
|
433
|
+
finally { if (e_4) throw e_4.error; }
|
|
434
|
+
}
|
|
435
|
+
xRowTechData.errorMap = xErrorMap;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
439
|
+
finally {
|
|
440
|
+
try {
|
|
441
|
+
if (rowList_1_1 && !rowList_1_1.done && (_a = rowList_1.return)) _a.call(rowList_1);
|
|
442
|
+
}
|
|
443
|
+
finally { if (e_3) throw e_3.error; }
|
|
444
|
+
}
|
|
445
|
+
};
|
|
446
|
+
XFormDataTable2.prototype.getErrorMessages = function () {
|
|
447
|
+
var e_5, _a;
|
|
448
|
+
var msg = "";
|
|
449
|
+
var object = this.props.form.getXObject();
|
|
450
|
+
var rowList = object[this.props.assocField];
|
|
451
|
+
try {
|
|
452
|
+
for (var rowList_2 = __values(rowList), rowList_2_1 = rowList_2.next(); !rowList_2_1.done; rowList_2_1 = rowList_2.next()) {
|
|
453
|
+
var row = rowList_2_1.value;
|
|
454
|
+
var xRowTechData = XFormBase_1.XFormBase.getXRowTechData(row);
|
|
455
|
+
msg += XUtils_1.XUtils.getErrorMessages(xRowTechData.errorMap);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
459
|
+
finally {
|
|
460
|
+
try {
|
|
461
|
+
if (rowList_2_1 && !rowList_2_1.done && (_a = rowList_2.return)) _a.call(rowList_2);
|
|
462
|
+
}
|
|
463
|
+
finally { if (e_5) throw e_5.error; }
|
|
464
|
+
}
|
|
465
|
+
return msg;
|
|
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
|
+
};
|
|
351
495
|
XFormDataTable2.prototype.render = function () {
|
|
352
496
|
var _this = this;
|
|
353
497
|
var paginator = this.props.paginator !== undefined ? this.props.paginator : false;
|
|
@@ -360,12 +504,11 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
360
504
|
rows = 5; // default
|
|
361
505
|
}
|
|
362
506
|
}
|
|
507
|
+
var filterDisplay = this.props.filterDisplay !== "none" ? this.props.filterDisplay : undefined;
|
|
363
508
|
var label = this.props.label !== undefined ? this.props.label : this.props.assocField;
|
|
364
|
-
var readOnly = this.
|
|
509
|
+
var readOnly = this.isReadOnly();
|
|
365
510
|
// v bloku function (child) nejde pouzit priamo this, thisLocal uz ide pouzit
|
|
366
511
|
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
512
|
var object = this.props.form.state.object;
|
|
370
513
|
var valueList = object !== null ? object[this.props.assocField] : [];
|
|
371
514
|
var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(this.getEntity());
|
|
@@ -404,31 +547,35 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
404
547
|
var childColumnProps = childColumn.props;
|
|
405
548
|
// je dolezite, aby field obsahoval cely path az po zobrazovany atribut, lebo podla neho sa vykonava filtrovanie a sortovanie
|
|
406
549
|
// (aj ked, da sa to prebit na stlpcoch (na elemente Column), su na to atributy)
|
|
407
|
-
var field =
|
|
550
|
+
var field = thisLocal.getPathForColumn(childColumnProps);
|
|
408
551
|
// TODO - toto by sa mohlo vytiahnut vyssie, aj v bodyTemplate sa vola metoda XUtilsMetadata.getXFieldByPath
|
|
409
552
|
var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, field);
|
|
410
553
|
// *********** header ***********
|
|
411
554
|
var header = XFormDataTable2.getHeader(childColumnProps, xEntity, field, xField);
|
|
412
555
|
// *********** filterElement ***********
|
|
413
556
|
var filterElement;
|
|
414
|
-
if (
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
557
|
+
if (thisLocal.props.filterDisplay !== "none") {
|
|
558
|
+
if (xField.type === "boolean") {
|
|
559
|
+
var checkboxValue = thisLocal.getCheckboxFilterValue(field);
|
|
560
|
+
filterElement = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: checkboxValue, onChange: function (e) { return thisLocal.onCheckboxFilterChange(field, e.value); } });
|
|
561
|
+
}
|
|
562
|
+
else if (childColumnProps.dropdownInFilter) {
|
|
563
|
+
var dropdownValue = thisLocal.getDropdownFilterValue(field);
|
|
564
|
+
filterElement = react_1.default.createElement(XDropdownDTFilter_1.XDropdownDTFilter, { entity: thisLocal.getEntity(), path: field, value: dropdownValue, onValueChange: thisLocal.onDropdownFilterChange });
|
|
565
|
+
}
|
|
421
566
|
}
|
|
422
567
|
// *********** showFilterMenu ***********
|
|
423
|
-
var showFilterMenu;
|
|
424
|
-
if (
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
if (
|
|
431
|
-
|
|
568
|
+
var showFilterMenu = false;
|
|
569
|
+
if (thisLocal.props.filterDisplay !== "none") {
|
|
570
|
+
if (childColumnProps.showFilterMenu !== undefined) {
|
|
571
|
+
showFilterMenu = childColumnProps.showFilterMenu;
|
|
572
|
+
}
|
|
573
|
+
else {
|
|
574
|
+
showFilterMenu = true; // default
|
|
575
|
+
if (thisLocal.props.filterDisplay === "row") {
|
|
576
|
+
if (xField.type === "boolean" || childColumnProps.dropdownInFilter) {
|
|
577
|
+
showFilterMenu = false;
|
|
578
|
+
}
|
|
432
579
|
}
|
|
433
580
|
}
|
|
434
581
|
}
|
|
@@ -438,10 +585,10 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
438
585
|
// *********** width/headerStyle ***********
|
|
439
586
|
var width = XUtils_1.XUtils.processPropWidth(childColumn.props.width);
|
|
440
587
|
if (width === undefined || width === "default") {
|
|
441
|
-
// TODO - if filter not used at all, then buttons flags should be false
|
|
442
588
|
var filterMenuInFilterRow = thisLocal.props.filterDisplay === "row" && showFilterMenu;
|
|
589
|
+
var sortableButtonInHeader = thisLocal.props.sortable;
|
|
443
590
|
var filterButtonInHeader = thisLocal.props.filterDisplay === "menu";
|
|
444
|
-
width = XUtilsMetadata_1.XUtilsMetadata.computeColumnWidth(xField, filterMenuInFilterRow, childColumnProps.type, header, filterButtonInHeader);
|
|
591
|
+
width = XUtilsMetadata_1.XUtilsMetadata.computeColumnWidth(xField, filterMenuInFilterRow, childColumnProps.type, header, sortableButtonInHeader, filterButtonInHeader);
|
|
445
592
|
}
|
|
446
593
|
var headerStyle = {};
|
|
447
594
|
if (width !== undefined) {
|
|
@@ -463,24 +610,32 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
463
610
|
align = "center";
|
|
464
611
|
}
|
|
465
612
|
// }
|
|
466
|
-
return react_1.default.createElement(column_1.Column, { field: field, header: header, filter:
|
|
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); } });
|
|
467
614
|
});
|
|
615
|
+
if (this.props.removeButtonInRow) {
|
|
616
|
+
// je dolezite nastavit sirku header-a, lebo inac ma stlpec sirku 0 a nevidno ho
|
|
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 }); } }));
|
|
618
|
+
}
|
|
468
619
|
return (react_1.default.createElement("div", null,
|
|
469
620
|
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
470
621
|
react_1.default.createElement("label", null, label)),
|
|
471
622
|
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:
|
|
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)),
|
|
473
624
|
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:
|
|
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 }))));
|
|
476
627
|
};
|
|
477
628
|
XFormDataTable2.defaultProps = {
|
|
478
629
|
filterDisplay: "row",
|
|
630
|
+
sortable: true,
|
|
479
631
|
scrollable: true,
|
|
480
632
|
scrollWidth: '100%',
|
|
481
633
|
scrollHeight: '200vh',
|
|
482
634
|
// tym ze pouzivame 200vh (max-height pre body), tak realne scrollovanie sa zapne az pri velmi vela riadkoch
|
|
483
|
-
shrinkWidth: true
|
|
635
|
+
shrinkWidth: true,
|
|
636
|
+
removeButtonInRow: false,
|
|
637
|
+
addRowLabel: 'Add row',
|
|
638
|
+
removeRowLabel: 'Remove row'
|
|
484
639
|
};
|
|
485
640
|
return XFormDataTable2;
|
|
486
641
|
}(react_1.Component));
|
|
@@ -501,6 +656,14 @@ exports.XFormDropdownColumn = XFormDropdownColumn;
|
|
|
501
656
|
exports.XFormDropdownColumn.defaultProps = {
|
|
502
657
|
type: "dropdown"
|
|
503
658
|
};
|
|
659
|
+
var XFormAutoCompleteColumn = function (props) {
|
|
660
|
+
// nevadi ze tu nic nevraciame, field a header vieme precitat a zvysok by sme aj tak zahodili lebo vytvarame novy element
|
|
661
|
+
return (null);
|
|
662
|
+
};
|
|
663
|
+
exports.XFormAutoCompleteColumn = XFormAutoCompleteColumn;
|
|
664
|
+
exports.XFormAutoCompleteColumn.defaultProps = {
|
|
665
|
+
type: "autoComplete"
|
|
666
|
+
};
|
|
504
667
|
var XFormSearchButtonColumn = function (props) {
|
|
505
668
|
// nevadi ze tu nic nevraciame, field a header vieme precitat a zvysok by sme aj tak zahodili lebo vytvarame novy element
|
|
506
669
|
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,13 +11,13 @@ 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');
|
|
18
18
|
var cssClassName = showTime ? 'x-input-datetime' : 'x-input-date';
|
|
19
19
|
var label = (_a = props.label) !== null && _a !== void 0 ? _a : props.field;
|
|
20
|
-
var readOnly = XUtils_1.XUtils.isReadOnly(props.field, props.readOnly);
|
|
20
|
+
var readOnly = XUtils_1.XUtils.isReadOnly(props.field, props.readOnly) || props.form.formReadOnlyBase(props.field);
|
|
21
21
|
if (!xField.isNullable && !readOnly) {
|
|
22
22
|
label = XUtils_1.XUtils.markNotNull(label);
|
|
23
23
|
}
|
|
@@ -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
|
+
}
|