@michalrakus/x-react-web-lib 1.10.0 → 1.11.1
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/XEditBrowse.d.ts +3 -0
- package/XEditBrowse.js +5 -0
- package/XObject.d.ts +3 -0
- package/XObject.js +5 -0
- package/gulpfile.js +2 -1
- package/lib/administration/XBrowseMetaBrowse.d.ts +2 -1
- package/lib/administration/XUserBrowse.d.ts +2 -1
- package/lib/administration/XUserBrowse.js +1 -1
- package/lib/administration/XUserForm.d.ts +6 -3
- package/lib/administration/XUserForm.js +9 -16
- package/lib/components/XAutoComplete.d.ts +6 -4
- package/lib/components/XAutoComplete.js +13 -22
- package/lib/components/XAutoCompleteBase.d.ts +15 -5
- package/lib/components/XAutoCompleteBase.js +115 -96
- package/lib/components/XAutoCompleteDT.d.ts +4 -3
- package/lib/components/XAutoCompleteDT.js +8 -7
- package/lib/components/XCheckboxDT.d.ts +2 -1
- package/lib/components/XCheckboxDT.js +2 -9
- package/lib/components/XDropdownDT.d.ts +2 -2
- package/lib/components/XDropdownDT.js +2 -3
- package/lib/components/{XBrowse.d.ts → XEditBrowse.d.ts} +3 -3
- package/lib/components/{XBrowse.js → XEditBrowse.js} +22 -22
- package/lib/components/XFormBase.d.ts +10 -9
- package/lib/components/XFormBase.js +20 -12
- package/lib/components/XFormComponent.d.ts +3 -3
- package/lib/components/XFormComponentDT.d.ts +4 -4
- package/lib/components/XFormComponentDT.js +10 -11
- package/lib/components/XFormDataTable2.d.ts +10 -8
- package/lib/components/XFormDataTable2.js +36 -28
- package/lib/components/XFormNavigator3.d.ts +3 -3
- package/lib/components/XFormNavigator3.js +2 -2
- package/lib/components/XInputDateDT.d.ts +2 -1
- package/lib/components/XInputDateDT.js +2 -9
- package/lib/components/XInputTextDT.d.ts +2 -1
- package/lib/components/XInputTextDT.js +2 -9
- package/lib/components/XLazyDataTable.d.ts +9 -2
- package/lib/components/XLazyDataTable.js +17 -15
- package/lib/components/{SearchTableParams.d.ts → XSearchBrowseParams.d.ts} +2 -2
- package/lib/components/XSearchButton.d.ts +2 -2
- package/lib/components/XSearchButton.js +7 -11
- package/lib/components/XSearchButtonDT.d.ts +4 -3
- package/lib/components/XSearchButtonDT.js +10 -6
- package/lib/components/XUtils.d.ts +24 -1
- package/lib/components/XUtils.js +92 -8
- package/lib/components/locale/x-en.json +4 -1
- package/package.json +1 -1
- package/XBrowse.d.ts +0 -3
- package/XBrowse.js +0 -5
- /package/lib/components/{SearchTableParams.js → XSearchBrowseParams.js} +0 -0
|
@@ -7,16 +7,8 @@ exports.XCheckboxDT = void 0;
|
|
|
7
7
|
var react_1 = __importDefault(require("react"));
|
|
8
8
|
var tristatecheckbox_1 = require("primereact/tristatecheckbox");
|
|
9
9
|
var XUtilsCommon_1 = require("../serverApi/XUtilsCommon");
|
|
10
|
+
var XUtils_1 = require("./XUtils");
|
|
10
11
|
var XCheckboxDT = function (props) {
|
|
11
|
-
// ak mame path, field je vzdy readOnly
|
|
12
|
-
var readOnly;
|
|
13
|
-
var posDot = props.field.indexOf(".");
|
|
14
|
-
if (posDot !== -1) {
|
|
15
|
-
readOnly = true;
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
readOnly = props.readOnly !== undefined ? props.readOnly : false;
|
|
19
|
-
}
|
|
20
12
|
var onValueChange = function (field, rowData, newValue) {
|
|
21
13
|
// pri klikani na TriStateCheckbox prichadza v newValue cyklicky: true -> false -> null
|
|
22
14
|
// ak mame not null atribut, tak pri null hodnote skocime rovno na true
|
|
@@ -41,6 +33,7 @@ var XCheckboxDT = function (props) {
|
|
|
41
33
|
// konvertovat null hodnotu na "" (vo funkcii stringAsUI) je dolezite aby sa prejavila zmena na null v modeli (a tiez aby korektne pridal novy riadok)
|
|
42
34
|
fieldValue = rowDataValue;
|
|
43
35
|
}
|
|
36
|
+
var readOnly = XUtils_1.XUtils.isReadOnlyTableField(props.field, props.readOnly, props.form.state.object, props.rowData);
|
|
44
37
|
return (react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { id: props.field, value: fieldValue, onChange: function (e) { return onValueChange(props.field, props.rowData, e.value); }, disabled: readOnly }));
|
|
45
38
|
};
|
|
46
39
|
exports.XCheckboxDT = XCheckboxDT;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { XFormBase } from "./XFormBase";
|
|
3
|
-
import { XDropdownOptionsMap } from "./XFormDataTable2";
|
|
3
|
+
import { XDropdownOptionsMap, XTableFieldReadOnlyProp } from "./XFormDataTable2";
|
|
4
4
|
import { XCustomFilter } from "../serverApi/FindParam";
|
|
5
5
|
export declare const XDropdownDT: (props: {
|
|
6
6
|
form: XFormBase;
|
|
@@ -12,5 +12,5 @@ export declare const XDropdownDT: (props: {
|
|
|
12
12
|
dropdownOptionsMap: XDropdownOptionsMap;
|
|
13
13
|
onDropdownOptionsMapChange: (dropdownOptionsMap: XDropdownOptionsMap) => void;
|
|
14
14
|
rowData: any;
|
|
15
|
-
readOnly?:
|
|
15
|
+
readOnly?: XTableFieldReadOnlyProp | undefined;
|
|
16
16
|
}) => JSX.Element;
|
|
@@ -103,7 +103,6 @@ var XDropdownDT = function (props) {
|
|
|
103
103
|
}
|
|
104
104
|
});
|
|
105
105
|
}); };
|
|
106
|
-
var readOnly = props.readOnly !== undefined ? props.readOnly : false;
|
|
107
106
|
var onValueChange = function (assocField, rowData, newValue) {
|
|
108
107
|
// zmenime hodnotu v modeli (odtial sa hodnota cita)
|
|
109
108
|
var newValueOrNull;
|
|
@@ -118,7 +117,6 @@ var XDropdownDT = function (props) {
|
|
|
118
117
|
// kedze "rowData" je sucastou "props.form.state.object", tak nam staci zavolat setState({object: object}), aby sa zmena prejavila
|
|
119
118
|
props.form.onObjectDataChange();
|
|
120
119
|
};
|
|
121
|
-
// TODO - readOnly implementovat
|
|
122
120
|
// Dropdown setuje do atributu object.assocField asociovany objekt zo zoznamu objektov ktore ziskame podla asociacie
|
|
123
121
|
var assocObject = null;
|
|
124
122
|
if (props.rowData !== null) {
|
|
@@ -129,7 +127,8 @@ var XDropdownDT = function (props) {
|
|
|
129
127
|
}
|
|
130
128
|
}
|
|
131
129
|
var options = props.dropdownOptionsMap[props.assocField] !== undefined ? props.dropdownOptionsMap[props.assocField] : []; // mozno mozme do options prasknut rovno undefined...
|
|
130
|
+
var readOnly = XUtils_1.XUtils.isReadOnlyTableField(undefined, props.readOnly, props.form.state.object, props.rowData);
|
|
132
131
|
// appendTo={document.body} appenduje overlay panel na element body - eliminuje problem s overflow (pozri poznamku v XDropdownDTFilter)
|
|
133
|
-
return (react_1.default.createElement(dropdown_1.Dropdown, { appendTo: document.body, id: props.assocField, optionLabel: props.displayField, value: assocObject, options: options, dataKey: idField, onChange: function (e) { return onValueChange(props.assocField, props.rowData, e.target.value); } }));
|
|
132
|
+
return (react_1.default.createElement(dropdown_1.Dropdown, { appendTo: document.body, id: props.assocField, optionLabel: props.displayField, value: assocObject, options: options, dataKey: idField, onChange: function (e) { return onValueChange(props.assocField, props.rowData, e.target.value); }, readOnly: readOnly, disabled: readOnly }));
|
|
134
133
|
};
|
|
135
134
|
exports.XDropdownDT = XDropdownDT;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Component } from "react";
|
|
2
2
|
import { XEditColumnDialogValues } from "./XEditColumnDialog";
|
|
3
3
|
import { XBrowseMeta } from "../serverApi/XBrowseMetadata";
|
|
4
|
-
export interface
|
|
4
|
+
export interface XEditBrowseProps {
|
|
5
5
|
entity: string;
|
|
6
6
|
browseId?: string;
|
|
7
7
|
}
|
|
8
|
-
export declare class
|
|
8
|
+
export declare class XEditBrowse extends Component<XEditBrowseProps> {
|
|
9
9
|
state: {
|
|
10
10
|
xBrowseMeta: XBrowseMeta;
|
|
11
11
|
editMode: boolean;
|
|
@@ -14,7 +14,7 @@ export declare class XBrowse extends Component<XBrowseProps> {
|
|
|
14
14
|
indexForAddColumn?: number;
|
|
15
15
|
addColumn: boolean;
|
|
16
16
|
xEditColumnDialogValues?: XEditColumnDialogValues;
|
|
17
|
-
constructor(props:
|
|
17
|
+
constructor(props: XEditBrowseProps);
|
|
18
18
|
getXBrowseMeta(): XBrowseMeta;
|
|
19
19
|
createDefaultXBrowseMeta(): XBrowseMeta;
|
|
20
20
|
onEditModeStart(): void;
|
|
@@ -101,7 +101,7 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
101
101
|
return ar;
|
|
102
102
|
};
|
|
103
103
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
104
|
-
exports.
|
|
104
|
+
exports.XEditBrowse = void 0;
|
|
105
105
|
var react_1 = __importStar(require("react"));
|
|
106
106
|
var SourceCodeLinkEntity_1 = require("./SourceCodeLinkEntity");
|
|
107
107
|
var XEditColumnDialog_1 = require("./XEditColumnDialog");
|
|
@@ -109,10 +109,10 @@ var _ = __importStar(require("lodash"));
|
|
|
109
109
|
var XUtilsMetadata_1 = require("./XUtilsMetadata");
|
|
110
110
|
var XUtils_1 = require("./XUtils");
|
|
111
111
|
var XLazyDataTable_1 = require("./XLazyDataTable");
|
|
112
|
-
// TODO - pouzit extends
|
|
113
|
-
var
|
|
114
|
-
__extends(
|
|
115
|
-
function
|
|
112
|
+
// TODO - pouzit extends XEditBrowseBase, ako je tomu pri CarForm?
|
|
113
|
+
var XEditBrowse = /** @class */ (function (_super) {
|
|
114
|
+
__extends(XEditBrowse, _super);
|
|
115
|
+
function XEditBrowse(props) {
|
|
116
116
|
var _this = _super.call(this, props) || this;
|
|
117
117
|
console.log("************* XBrowse const entity = " + _this.props.entity);
|
|
118
118
|
_this.getXBrowseMeta = _this.getXBrowseMeta.bind(_this);
|
|
@@ -137,14 +137,14 @@ var XBrowse = /** @class */ (function (_super) {
|
|
|
137
137
|
_this.onEdit = _this.onEdit.bind(_this);
|
|
138
138
|
return _this;
|
|
139
139
|
}
|
|
140
|
-
|
|
140
|
+
XEditBrowse.prototype.getXBrowseMeta = function () {
|
|
141
141
|
var xBrowseMeta = XUtilsMetadata_1.XUtilsMetadata.getXBrowseMeta(this.props.entity, this.props.browseId);
|
|
142
142
|
if (xBrowseMeta === undefined) {
|
|
143
143
|
xBrowseMeta = this.createDefaultXBrowseMeta();
|
|
144
144
|
}
|
|
145
145
|
return xBrowseMeta;
|
|
146
146
|
};
|
|
147
|
-
|
|
147
|
+
XEditBrowse.prototype.createDefaultXBrowseMeta = function () {
|
|
148
148
|
var e_1, _a;
|
|
149
149
|
var xColumnMetaList = [];
|
|
150
150
|
var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(this.props.entity);
|
|
@@ -164,12 +164,12 @@ var XBrowse = /** @class */ (function (_super) {
|
|
|
164
164
|
}
|
|
165
165
|
return { entity: this.props.entity, rows: 15, columnMetaList: xColumnMetaList };
|
|
166
166
|
};
|
|
167
|
-
|
|
167
|
+
XEditBrowse.prototype.onEditModeStart = function () {
|
|
168
168
|
// zmeny budeme robit na klonovanych datach - aby sme sa vedeli cez cancel vratit do povodneho stavu
|
|
169
169
|
var xBrowseMetaCloned = _.cloneDeep(this.state.xBrowseMeta);
|
|
170
170
|
this.setState({ xBrowseMeta: xBrowseMetaCloned, editMode: true });
|
|
171
171
|
};
|
|
172
|
-
|
|
172
|
+
XEditBrowse.prototype.onEditModeSave = function () {
|
|
173
173
|
return __awaiter(this, void 0, void 0, function () {
|
|
174
174
|
var xBrowseMeta, columnOrder, _a, _b, xColumnMeta, e_2;
|
|
175
175
|
var e_3, _c;
|
|
@@ -213,19 +213,19 @@ var XBrowse = /** @class */ (function (_super) {
|
|
|
213
213
|
});
|
|
214
214
|
});
|
|
215
215
|
};
|
|
216
|
-
|
|
216
|
+
XEditBrowse.prototype.onEditModeCancel = function () {
|
|
217
217
|
// vratime formular z cache, resp. defaultny formular
|
|
218
218
|
var xBrowseMeta = this.getXBrowseMeta();
|
|
219
219
|
this.setState({ editMode: false, xBrowseMeta: xBrowseMeta });
|
|
220
220
|
};
|
|
221
|
-
|
|
221
|
+
XEditBrowse.prototype.onAddColumn = function (field) {
|
|
222
222
|
console.log("onAddColumn: " + field);
|
|
223
223
|
this.indexForAddColumn = this.getIndexForColumn(field);
|
|
224
224
|
this.addColumn = true;
|
|
225
225
|
this.xEditColumnDialogValues = { field: "", header: "", dropdownInFilter: false }; // values are used for dialog initialization
|
|
226
226
|
this.setState({ editColumnDialogOpened: true });
|
|
227
227
|
};
|
|
228
|
-
|
|
228
|
+
XEditBrowse.prototype.editColumnDialogOnHide = function (xEditColumnDialogValues) {
|
|
229
229
|
if (xEditColumnDialogValues !== null) {
|
|
230
230
|
if (this.indexForAddColumn !== undefined) {
|
|
231
231
|
var xBrowseMeta = this.state.xBrowseMeta;
|
|
@@ -248,7 +248,7 @@ var XBrowse = /** @class */ (function (_super) {
|
|
|
248
248
|
}
|
|
249
249
|
this.setState({ editColumnDialogOpened: false });
|
|
250
250
|
};
|
|
251
|
-
|
|
251
|
+
XEditBrowse.prototype.onEditColumn = function (field) {
|
|
252
252
|
var _a;
|
|
253
253
|
console.log("onEditColumn: " + field);
|
|
254
254
|
this.indexForAddColumn = this.getIndexForColumn(field);
|
|
@@ -260,7 +260,7 @@ var XBrowse = /** @class */ (function (_super) {
|
|
|
260
260
|
this.setState({ editColumnDialogOpened: true });
|
|
261
261
|
}
|
|
262
262
|
};
|
|
263
|
-
|
|
263
|
+
XEditBrowse.prototype.onRemoveColumn = function (field) {
|
|
264
264
|
console.log("onRemoveColumn: " + field);
|
|
265
265
|
var index = this.getIndexForColumn(field);
|
|
266
266
|
if (index !== undefined) {
|
|
@@ -270,13 +270,13 @@ var XBrowse = /** @class */ (function (_super) {
|
|
|
270
270
|
this.setState({ xBrowseMeta: xBrowseMeta });
|
|
271
271
|
}
|
|
272
272
|
};
|
|
273
|
-
|
|
273
|
+
XEditBrowse.prototype.onMoveColumnLeft = function (field) {
|
|
274
274
|
this.moveColumn(field, -1);
|
|
275
275
|
};
|
|
276
|
-
|
|
276
|
+
XEditBrowse.prototype.onMoveColumnRight = function (field) {
|
|
277
277
|
this.moveColumn(field, 1);
|
|
278
278
|
};
|
|
279
|
-
|
|
279
|
+
XEditBrowse.prototype.moveColumn = function (field, offset) {
|
|
280
280
|
var index = this.getIndexForColumn(field);
|
|
281
281
|
if (index !== undefined) {
|
|
282
282
|
var xBrowseMeta = this.state.xBrowseMeta;
|
|
@@ -285,7 +285,7 @@ var XBrowse = /** @class */ (function (_super) {
|
|
|
285
285
|
this.setState({ xBrowseMeta: xBrowseMeta });
|
|
286
286
|
}
|
|
287
287
|
};
|
|
288
|
-
|
|
288
|
+
XEditBrowse.prototype.getIndexForColumn = function (field) {
|
|
289
289
|
var e_4, _a;
|
|
290
290
|
var searchedIndex = undefined;
|
|
291
291
|
var xBrowseMeta = this.state.xBrowseMeta;
|
|
@@ -307,7 +307,7 @@ var XBrowse = /** @class */ (function (_super) {
|
|
|
307
307
|
}
|
|
308
308
|
return searchedIndex;
|
|
309
309
|
};
|
|
310
|
-
|
|
310
|
+
XEditBrowse.prototype.onEdit = function (selectedRow) {
|
|
311
311
|
var formElement = XUtils_1.XUtils.getAppForm(this.props.entity);
|
|
312
312
|
if (formElement !== undefined) {
|
|
313
313
|
var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(this.props.entity);
|
|
@@ -321,7 +321,7 @@ var XBrowse = /** @class */ (function (_super) {
|
|
|
321
321
|
console.log("XBrowse entity = ".concat(this.props.entity, ": form not found/registered."));
|
|
322
322
|
}
|
|
323
323
|
};
|
|
324
|
-
|
|
324
|
+
XEditBrowse.prototype.render = function () {
|
|
325
325
|
var xBrowseMeta = this.state.xBrowseMeta;
|
|
326
326
|
var xEditModeHandlers = {
|
|
327
327
|
onStart: this.onEditModeStart,
|
|
@@ -355,6 +355,6 @@ var XBrowse = /** @class */ (function (_super) {
|
|
|
355
355
|
entitySourceCodeLink,
|
|
356
356
|
react_1.default.createElement(XEditColumnDialog_1.XEditColumnDialog, { dialogOpened: this.state.editColumnDialogOpened, entity: xBrowseMeta.entity, addColumn: this.addColumn, xEditColumnDialogValues: this.xEditColumnDialogValues, onHideDialog: this.editColumnDialogOnHide })));
|
|
357
357
|
};
|
|
358
|
-
return
|
|
358
|
+
return XEditBrowse;
|
|
359
359
|
}(react_1.Component));
|
|
360
|
-
exports.
|
|
360
|
+
exports.XEditBrowse = XEditBrowse;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Component } from "react";
|
|
2
2
|
import { XObject } from "./XObject";
|
|
3
3
|
import { OperationType } from "./XUtils";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { XFieldOnChange, XFormComponent } from "./XFormComponent";
|
|
5
|
+
import { XTableFieldOnChange, XFormDataTable2, XRowTechData } from "./XFormDataTable2";
|
|
6
6
|
import { XErrorMap, XErrors } from "./XErrors";
|
|
7
7
|
export type XOnSaveOrCancelProp = (object: XObject | null, objectChange: OperationType) => void;
|
|
8
|
-
export interface
|
|
8
|
+
export interface XFormProps {
|
|
9
9
|
id?: number;
|
|
10
|
-
|
|
10
|
+
initValues?: object;
|
|
11
11
|
onSaveOrCancel?: XOnSaveOrCancelProp;
|
|
12
12
|
}
|
|
13
13
|
export declare function Form(entity: string): <T extends new (...args: any[]) => {}>(constructor: T) => {
|
|
@@ -15,7 +15,7 @@ export declare function Form(entity: string): <T extends new (...args: any[]) =>
|
|
|
15
15
|
entity: string;
|
|
16
16
|
};
|
|
17
17
|
} & T;
|
|
18
|
-
export declare abstract class XFormBase extends Component<
|
|
18
|
+
export declare abstract class XFormBase extends Component<XFormProps> {
|
|
19
19
|
entity?: string;
|
|
20
20
|
fields: Set<string>;
|
|
21
21
|
state: {
|
|
@@ -29,18 +29,18 @@ export declare abstract class XFormBase extends Component<FormProps> {
|
|
|
29
29
|
assoc: string;
|
|
30
30
|
sortField: string;
|
|
31
31
|
}>;
|
|
32
|
-
constructor(props:
|
|
32
|
+
constructor(props: XFormProps);
|
|
33
33
|
componentDidMount(): Promise<void>;
|
|
34
34
|
getEntity(): string;
|
|
35
35
|
getXObject(): XObject;
|
|
36
36
|
getObject(): any;
|
|
37
37
|
isAddRow(): any;
|
|
38
|
-
onFieldChange(field: string, value: any, error?: string | undefined, onChange?:
|
|
39
|
-
onTableFieldChange(rowData: any, field: string, value: any, error?: string | undefined, onChange?:
|
|
38
|
+
onFieldChange(field: string, value: any, error?: string | undefined, onChange?: XFieldOnChange, assocObjectChange?: OperationType): void;
|
|
39
|
+
onTableFieldChange(rowData: any, field: string, value: any, error?: string | undefined, onChange?: XTableFieldOnChange, assocObjectChange?: OperationType): void;
|
|
40
40
|
/**
|
|
41
41
|
* @deprecated - mal by sa pouzivat onTableFieldChange
|
|
42
42
|
*/
|
|
43
|
-
onObjectDataChange(row?: any, onChange?:
|
|
43
|
+
onObjectDataChange(row?: any, onChange?: XTableFieldOnChange): void;
|
|
44
44
|
setStateXForm(): void;
|
|
45
45
|
onTableAddRow(assocField: string, newRow: any, dataKey?: string, selectedRow?: {}): void;
|
|
46
46
|
static getNextRowId(rowList: any[], dataKey: string): number;
|
|
@@ -61,6 +61,7 @@ export declare abstract class XFormBase extends Component<FormProps> {
|
|
|
61
61
|
getErrorMessagesForAssoc(oneToManyAssoc: string): string;
|
|
62
62
|
static saveErrorsIntoXRowTechData(row: any, xErrors: XErrors): void;
|
|
63
63
|
formReadOnly(object: XObject, field: string): boolean;
|
|
64
|
+
createNewObject(): XObject;
|
|
64
65
|
preInitForm(object: XObject, operationType: OperationType.Insert | OperationType.Update): void;
|
|
65
66
|
validate(object: XObject): XErrors;
|
|
66
67
|
preSave(object: XObject): void;
|
|
@@ -116,20 +116,20 @@ var XFormBase = /** @class */ (function (_super) {
|
|
|
116
116
|
function XFormBase(props) {
|
|
117
117
|
var _this = _super.call(this, props) || this;
|
|
118
118
|
// check
|
|
119
|
-
if (props.id !== undefined && props.
|
|
120
|
-
throw "Form cannot have both props id and
|
|
119
|
+
if (props.id !== undefined && props.initValues !== undefined) {
|
|
120
|
+
throw "Form cannot have both props id and initValues defined. Only one of them can be defined.";
|
|
121
121
|
}
|
|
122
122
|
//this.entity = props.entity; - nastavuje sa cez decorator @Form
|
|
123
123
|
var object = null;
|
|
124
|
-
if (props.id === undefined) {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
}
|
|
124
|
+
// if (props.id === undefined) {
|
|
125
|
+
// // add row operation
|
|
126
|
+
// if (props.object !== undefined) {
|
|
127
|
+
// object = props.object;
|
|
128
|
+
// }
|
|
129
|
+
// else {
|
|
130
|
+
// object = {}; // empty new object
|
|
131
|
+
// }
|
|
132
|
+
// }
|
|
133
133
|
_this.fields = new Set();
|
|
134
134
|
_this.state = {
|
|
135
135
|
object: object,
|
|
@@ -182,7 +182,11 @@ var XFormBase = /** @class */ (function (_super) {
|
|
|
182
182
|
return [3 /*break*/, 3];
|
|
183
183
|
case 2:
|
|
184
184
|
// add new row
|
|
185
|
-
object = this.
|
|
185
|
+
object = this.createNewObject();
|
|
186
|
+
// pridame pripadne "init values", ktore pridu cez prop object (pouziva sa napr. pri insertovani cez XAutoComplete na predplnenie hodnoty)
|
|
187
|
+
if (this.props.initValues !== undefined) {
|
|
188
|
+
object = __assign(__assign({}, object), this.props.initValues); // values from this.props.object will override values from object (if key is the same)
|
|
189
|
+
}
|
|
186
190
|
operationType = XUtils_1.OperationType.Insert;
|
|
187
191
|
_d.label = 3;
|
|
188
192
|
case 3:
|
|
@@ -590,6 +594,10 @@ var XFormBase = /** @class */ (function (_super) {
|
|
|
590
594
|
XFormBase.prototype.formReadOnly = function (object, field) {
|
|
591
595
|
return false;
|
|
592
596
|
};
|
|
597
|
+
// this method can be overriden in subclass if needed (to set some default values for insert)
|
|
598
|
+
XFormBase.prototype.createNewObject = function () {
|
|
599
|
+
return {};
|
|
600
|
+
};
|
|
593
601
|
// this method can be overriden in subclass if needed (to modify/save object after read from DB and before set into the form)
|
|
594
602
|
XFormBase.prototype.preInitForm = function (object, operationType) {
|
|
595
603
|
};
|
|
@@ -4,7 +4,7 @@ import { XError } from "./XErrors";
|
|
|
4
4
|
import { OperationType } from "./XUtils";
|
|
5
5
|
import { XFieldChangeEvent } from "./XFieldChangeEvent";
|
|
6
6
|
import { XCustomFilter } from "../serverApi/FindParam";
|
|
7
|
-
export type
|
|
7
|
+
export type XFieldOnChange = (e: XFieldChangeEvent<any>) => void;
|
|
8
8
|
export type XReadOnlyProp = boolean | ((object: any) => boolean);
|
|
9
9
|
export type XFilterProp = XCustomFilter | ((object: any) => XCustomFilter | undefined);
|
|
10
10
|
export interface XFormComponentProps<T> {
|
|
@@ -13,13 +13,13 @@ export interface XFormComponentProps<T> {
|
|
|
13
13
|
readOnly?: XReadOnlyProp;
|
|
14
14
|
labelStyle?: React.CSSProperties;
|
|
15
15
|
inline?: boolean;
|
|
16
|
-
onChange?:
|
|
16
|
+
onChange?: XFieldOnChange;
|
|
17
17
|
}
|
|
18
18
|
export declare abstract class XFormComponent<T, P extends XFormComponentProps<T>> extends Component<P> {
|
|
19
19
|
protected constructor(props: P);
|
|
20
20
|
abstract getField(): string;
|
|
21
21
|
getValueFromObject(): any;
|
|
22
|
-
onValueChangeBase(value: any, onChange?:
|
|
22
|
+
onValueChangeBase(value: any, onChange?: XFieldOnChange, assocObjectChange?: OperationType): void;
|
|
23
23
|
abstract isNotNull(): boolean;
|
|
24
24
|
isReadOnly(): boolean;
|
|
25
25
|
getLabel(): string;
|
|
@@ -3,19 +3,19 @@ import { Component } from "react";
|
|
|
3
3
|
import { OperationType } from "./XUtils";
|
|
4
4
|
import { XError } from "./XErrors";
|
|
5
5
|
import { XCustomFilter } from "../serverApi/FindParam";
|
|
6
|
-
import { XTableFieldFilterProp,
|
|
6
|
+
import { XTableFieldFilterProp, XTableFieldOnChange, XTableFieldReadOnlyProp } from "./XFormDataTable2";
|
|
7
7
|
export interface XFormComponentDTProps {
|
|
8
8
|
form: XFormBase;
|
|
9
9
|
entity: string;
|
|
10
10
|
rowData: any;
|
|
11
|
-
readOnly?:
|
|
12
|
-
onChange?:
|
|
11
|
+
readOnly?: XTableFieldReadOnlyProp;
|
|
12
|
+
onChange?: XTableFieldOnChange;
|
|
13
13
|
}
|
|
14
14
|
export declare abstract class XFormComponentDT<P extends XFormComponentDTProps> extends Component<P> {
|
|
15
15
|
protected constructor(props: P);
|
|
16
16
|
abstract getField(): string;
|
|
17
17
|
getValueFromRowData(): any;
|
|
18
|
-
onValueChangeBase(value: any, onChange?:
|
|
18
|
+
onValueChangeBase(value: any, onChange?: XTableFieldOnChange, assocObjectChange?: OperationType): void;
|
|
19
19
|
abstract isNotNull(): boolean;
|
|
20
20
|
isReadOnly(): boolean;
|
|
21
21
|
validate(): {
|
|
@@ -60,17 +60,16 @@ var XFormComponentDT = /** @class */ (function (_super) {
|
|
|
60
60
|
else if (typeof this.props.readOnly === 'boolean') {
|
|
61
61
|
readOnly = this.props.readOnly;
|
|
62
62
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
// }
|
|
63
|
+
else if (typeof this.props.readOnly === 'function') {
|
|
64
|
+
// TODO - tazko povedat ci niekedy bude object === null (asi ano vid metodu getFilterBase)
|
|
65
|
+
var object = this.props.form.state.object;
|
|
66
|
+
if (object) {
|
|
67
|
+
readOnly = this.props.readOnly(this.props.form.getXObject(), this.props.rowData);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
readOnly = true;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
74
73
|
else {
|
|
75
74
|
// readOnly is undefined
|
|
76
75
|
readOnly = false;
|
|
@@ -66,8 +66,8 @@ export declare class XFormDataTable2 extends Component<XFormDataTableProps> {
|
|
|
66
66
|
};
|
|
67
67
|
constructor(props: XFormDataTableProps);
|
|
68
68
|
getPathForColumn(columnProps: XFormColumnProps): string;
|
|
69
|
-
getDisplayFieldOrId(columnPropsAutoComplete: XFormAutoCompleteColumnProps): string;
|
|
70
69
|
static getHeader(columnProps: XFormColumnProps, xEntity: XEntity, field: string, xField: XField): string;
|
|
70
|
+
static isReadOnlyHeader(path: string | undefined, readOnly: XTableFieldReadOnlyProp | undefined): boolean;
|
|
71
71
|
getEntity(): string;
|
|
72
72
|
createInitFilters(): DataTableFilterMeta;
|
|
73
73
|
getFilterMatchMode(xField: XField): FilterMatchMode;
|
|
@@ -86,16 +86,17 @@ export declare class XFormDataTable2 extends Component<XFormDataTableProps> {
|
|
|
86
86
|
isReadOnly(): boolean;
|
|
87
87
|
render(): JSX.Element;
|
|
88
88
|
}
|
|
89
|
-
export type
|
|
89
|
+
export type XTableFieldOnChange = (e: XTableFieldChangeEvent<any, any>) => void;
|
|
90
|
+
export type XTableFieldReadOnlyProp = boolean | ((object: any, tableRow: any) => boolean);
|
|
90
91
|
export type XTableFieldFilterProp = XCustomFilter | ((object: any, rowData: any) => XCustomFilter | undefined);
|
|
91
92
|
export interface XFormColumnProps {
|
|
92
93
|
type: "inputSimple" | "dropdown" | "autoComplete" | "searchButton";
|
|
93
94
|
header?: any;
|
|
94
|
-
readOnly?:
|
|
95
|
+
readOnly?: XTableFieldReadOnlyProp;
|
|
95
96
|
dropdownInFilter?: boolean;
|
|
96
97
|
showFilterMenu?: boolean;
|
|
97
98
|
width?: string;
|
|
98
|
-
onChange?:
|
|
99
|
+
onChange?: XTableFieldOnChange;
|
|
99
100
|
}
|
|
100
101
|
export interface XFormInputSimpleColumnProps extends XFormColumnProps {
|
|
101
102
|
field: string;
|
|
@@ -108,15 +109,16 @@ export interface XFormDropdownColumnProps extends XFormColumnProps {
|
|
|
108
109
|
}
|
|
109
110
|
export interface XFormAutoCompleteColumnProps extends XFormColumnProps {
|
|
110
111
|
assocField: string;
|
|
111
|
-
displayField: string
|
|
112
|
-
|
|
113
|
-
assocForm?:
|
|
112
|
+
displayField: string;
|
|
113
|
+
searchBrowse?: JSX.Element;
|
|
114
|
+
assocForm?: JSX.Element;
|
|
114
115
|
filter?: XTableFieldFilterProp;
|
|
116
|
+
suggestions?: any[];
|
|
115
117
|
}
|
|
116
118
|
export interface XFormSearchButtonColumnProps extends XFormColumnProps {
|
|
117
119
|
assocField: string;
|
|
118
120
|
displayField: string;
|
|
119
|
-
|
|
121
|
+
searchBrowse: JSX.Element;
|
|
120
122
|
}
|
|
121
123
|
export declare const XFormColumn: {
|
|
122
124
|
(props: XFormInputSimpleColumnProps): null;
|
|
@@ -79,6 +79,7 @@ var tristatecheckbox_1 = require("primereact/tristatecheckbox");
|
|
|
79
79
|
var api_1 = require("primereact/api");
|
|
80
80
|
var XAutoCompleteDT_1 = require("./XAutoCompleteDT");
|
|
81
81
|
var XButtonIconNarrow_1 = require("./XButtonIconNarrow");
|
|
82
|
+
var XUtilsCommon_1 = require("../serverApi/XUtilsCommon");
|
|
82
83
|
var XLocale_1 = require("./XLocale");
|
|
83
84
|
var XInputIntervalDT_1 = require("./XInputIntervalDT");
|
|
84
85
|
var XFormDataTable2 = /** @class */ (function (_super) {
|
|
@@ -140,7 +141,7 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
140
141
|
}
|
|
141
142
|
else if (columnProps.type === "autoComplete") {
|
|
142
143
|
var columnPropsAutoComplete = columnProps;
|
|
143
|
-
return columnPropsAutoComplete.assocField + '.' +
|
|
144
|
+
return columnPropsAutoComplete.assocField + '.' + columnPropsAutoComplete.displayField;
|
|
144
145
|
}
|
|
145
146
|
else if (columnProps.type === "searchButton") {
|
|
146
147
|
var columnPropsSearchButton = columnProps;
|
|
@@ -150,21 +151,8 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
150
151
|
throw "Unknown prop type = " + columnProps.type;
|
|
151
152
|
}
|
|
152
153
|
};
|
|
153
|
-
XFormDataTable2.prototype.getDisplayFieldOrId = function (columnPropsAutoComplete) {
|
|
154
|
-
// toto je hack - ak ratame displayField cez funkciu, tak nam potom v kode chyba (hociaky) atribut asociovaneho objektu
|
|
155
|
-
// aby sme nemuseli robit nejake velke prerabky a zmeny, tak podsunieme id-ckovy atribut
|
|
156
|
-
if (typeof columnPropsAutoComplete.displayField === 'string') {
|
|
157
|
-
return columnPropsAutoComplete.displayField; // vsetko ok
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
// v displayField mame funkciu, zistime id-ckovy atribut
|
|
161
|
-
// TODO - problem - sortovanie/filtrovanie bude fungovat podla tohto id atributu
|
|
162
|
-
var xAssoc = XUtilsMetadata_1.XUtilsMetadata.getXAssocToOne(XUtilsMetadata_1.XUtilsMetadata.getXEntity(this.getEntity()), columnPropsAutoComplete.assocField);
|
|
163
|
-
return XUtilsMetadata_1.XUtilsMetadata.getXEntity(xAssoc.entityName).idField;
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
154
|
XFormDataTable2.getHeader = function (columnProps, xEntity, field, xField) {
|
|
167
|
-
var _a
|
|
155
|
+
var _a;
|
|
168
156
|
// poznamky - parametre field a xField by sme mohli vyratavat na zaklade columnProps ale kedze ich uz mame, setrime performance a neduplikujeme vypocet
|
|
169
157
|
// nie je to tu uplne idealne nakodene, ale je to pomerne prehladne
|
|
170
158
|
var isNullable = true;
|
|
@@ -172,35 +160,58 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
172
160
|
if (columnProps.type === "inputSimple") {
|
|
173
161
|
var columnPropsInputSimple = columnProps;
|
|
174
162
|
isNullable = xField.isNullable;
|
|
175
|
-
readOnly =
|
|
163
|
+
readOnly = XFormDataTable2.isReadOnlyHeader(columnPropsInputSimple.field, columnProps.readOnly);
|
|
176
164
|
}
|
|
177
165
|
else if (columnProps.type === "dropdown") {
|
|
178
166
|
var columnPropsDropdown = columnProps;
|
|
179
167
|
var xAssoc = XUtilsMetadata_1.XUtilsMetadata.getXAssocToOne(xEntity, columnPropsDropdown.assocField);
|
|
180
168
|
isNullable = xAssoc.isNullable;
|
|
181
|
-
readOnly = (
|
|
169
|
+
readOnly = XFormDataTable2.isReadOnlyHeader(undefined, columnProps.readOnly);
|
|
182
170
|
}
|
|
183
171
|
else if (columnProps.type === "autoComplete") {
|
|
184
172
|
var columnPropsAutoComplete = columnProps;
|
|
185
173
|
var xAssoc = XUtilsMetadata_1.XUtilsMetadata.getXAssocToOne(xEntity, columnPropsAutoComplete.assocField);
|
|
186
174
|
isNullable = xAssoc.isNullable;
|
|
187
|
-
readOnly = (
|
|
175
|
+
readOnly = XFormDataTable2.isReadOnlyHeader(undefined, columnProps.readOnly);
|
|
188
176
|
}
|
|
189
177
|
else if (columnProps.type === "searchButton") {
|
|
190
178
|
var columnPropsSearchButton = columnProps;
|
|
191
179
|
var xAssoc = XUtilsMetadata_1.XUtilsMetadata.getXAssocToOne(xEntity, columnPropsSearchButton.assocField);
|
|
192
180
|
isNullable = xAssoc.isNullable;
|
|
193
|
-
readOnly = (
|
|
181
|
+
readOnly = XFormDataTable2.isReadOnlyHeader(undefined, columnProps.readOnly);
|
|
194
182
|
}
|
|
195
183
|
else {
|
|
196
184
|
throw "Unknown prop type = " + columnProps.type;
|
|
197
185
|
}
|
|
198
|
-
var header = (
|
|
186
|
+
var header = (_a = columnProps.header) !== null && _a !== void 0 ? _a : field;
|
|
199
187
|
if (!isNullable && !readOnly) {
|
|
200
188
|
header = XUtils_1.XUtils.markNotNull(header);
|
|
201
189
|
}
|
|
202
190
|
return header;
|
|
203
191
|
};
|
|
192
|
+
// helper
|
|
193
|
+
XFormDataTable2.isReadOnlyHeader = function (path, readOnly) {
|
|
194
|
+
var isReadOnly;
|
|
195
|
+
if (path && !XUtilsCommon_1.XUtilsCommon.isSingleField(path)) {
|
|
196
|
+
// if the length of field is 2 or more, then readOnly
|
|
197
|
+
isReadOnly = true;
|
|
198
|
+
}
|
|
199
|
+
// formReadOnlyBase is called on the level XFormDataTable2
|
|
200
|
+
// else if (this.props.form.formReadOnlyBase("xxx")) {
|
|
201
|
+
// isReadOnly = true;
|
|
202
|
+
// }
|
|
203
|
+
else if (typeof readOnly === 'boolean') {
|
|
204
|
+
isReadOnly = readOnly;
|
|
205
|
+
}
|
|
206
|
+
else if (typeof readOnly === 'function') {
|
|
207
|
+
isReadOnly = false;
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
// readOnly is undefined
|
|
211
|
+
isReadOnly = false;
|
|
212
|
+
}
|
|
213
|
+
return isReadOnly;
|
|
214
|
+
};
|
|
204
215
|
XFormDataTable2.prototype.getEntity = function () {
|
|
205
216
|
if (this.entity === undefined) {
|
|
206
217
|
throw "Unexpected error: this.entity is undefined";
|
|
@@ -337,12 +348,11 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
337
348
|
*/
|
|
338
349
|
// body={(rowData: any) => bodyTemplate(childColumn.props.field, rowData)}
|
|
339
350
|
XFormDataTable2.prototype.bodyTemplate = function (columnProps, tableReadOnly, rowData, xEntity) {
|
|
340
|
-
var _a, _b;
|
|
341
351
|
var body;
|
|
352
|
+
// tableReadOnly has higher prio then property readOnly
|
|
353
|
+
var readOnly = tableReadOnly ? true : columnProps.readOnly;
|
|
342
354
|
if (columnProps.type === "inputSimple") {
|
|
343
355
|
var columnPropsInputSimple = columnProps;
|
|
344
|
-
// tableReadOnly has higher prio then property readOnly
|
|
345
|
-
var readOnly = tableReadOnly || ((_a = columnPropsInputSimple.readOnly) !== null && _a !== void 0 ? _a : false);
|
|
346
356
|
var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, columnPropsInputSimple.field);
|
|
347
357
|
if (xField.type === "decimal" || xField.type === "number") {
|
|
348
358
|
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 });
|
|
@@ -363,17 +373,15 @@ var XFormDataTable2 = /** @class */ (function (_super) {
|
|
|
363
373
|
}
|
|
364
374
|
else if (columnProps.type === "dropdown") {
|
|
365
375
|
var columnPropsDropdown = columnProps;
|
|
366
|
-
body = react_1.default.createElement(XDropdownDT_1.XDropdownDT, { form: this.props.form, entity: this.getEntity(), assocField: columnPropsDropdown.assocField, displayField: columnPropsDropdown.displayField, sortField: columnPropsDropdown.sortField, filter: columnPropsDropdown.filter, dropdownOptionsMap: this.state.dropdownOptionsMap, onDropdownOptionsMapChange: this.onDropdownOptionsMapChange, rowData: rowData });
|
|
376
|
+
body = react_1.default.createElement(XDropdownDT_1.XDropdownDT, { form: this.props.form, entity: this.getEntity(), assocField: columnPropsDropdown.assocField, displayField: columnPropsDropdown.displayField, sortField: columnPropsDropdown.sortField, filter: columnPropsDropdown.filter, dropdownOptionsMap: this.state.dropdownOptionsMap, onDropdownOptionsMapChange: this.onDropdownOptionsMapChange, rowData: rowData, readOnly: readOnly });
|
|
367
377
|
}
|
|
368
378
|
else if (columnProps.type === "autoComplete") {
|
|
369
379
|
var columnPropsAutoComplete = columnProps;
|
|
370
|
-
|
|
371
|
-
var readOnly = tableReadOnly || ((_b = columnPropsAutoComplete.readOnly) !== null && _b !== void 0 ? _b : false);
|
|
372
|
-
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 });
|
|
380
|
+
body = react_1.default.createElement(XAutoCompleteDT_1.XAutoCompleteDT, { form: this.props.form, entity: this.getEntity(), assocField: columnPropsAutoComplete.assocField, displayField: columnPropsAutoComplete.displayField, searchBrowse: columnPropsAutoComplete.searchBrowse, assocForm: columnPropsAutoComplete.assocForm, filter: columnPropsAutoComplete.filter, suggestions: columnPropsAutoComplete.suggestions, rowData: rowData, readOnly: readOnly });
|
|
373
381
|
}
|
|
374
382
|
else if (columnProps.type === "searchButton") {
|
|
375
383
|
var columnPropsSearchButton = columnProps;
|
|
376
|
-
body = react_1.default.createElement(XSearchButtonDT_1.XSearchButtonDT, { form: this.props.form, entity: this.getEntity(), assocField: columnPropsSearchButton.assocField, displayField: columnPropsSearchButton.displayField,
|
|
384
|
+
body = react_1.default.createElement(XSearchButtonDT_1.XSearchButtonDT, { form: this.props.form, entity: this.getEntity(), assocField: columnPropsSearchButton.assocField, displayField: columnPropsSearchButton.displayField, searchBrowse: columnPropsSearchButton.searchBrowse, rowData: rowData, readOnly: columnPropsSearchButton.readOnly });
|
|
377
385
|
}
|
|
378
386
|
else {
|
|
379
387
|
throw "Unknown prop type = " + columnProps.type;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Component } from "react";
|
|
2
2
|
export interface XFormNavigator3Props {
|
|
3
|
-
rootFormElement?:
|
|
3
|
+
rootFormElement?: JSX.Element;
|
|
4
4
|
}
|
|
5
5
|
export declare class XFormNavigator3 extends Component<XFormNavigator3Props> {
|
|
6
6
|
state: {
|
|
7
|
-
formElements:
|
|
7
|
+
formElements: JSX.Element[];
|
|
8
8
|
};
|
|
9
9
|
constructor(props: XFormNavigator3Props);
|
|
10
|
-
openForm(newFormElement:
|
|
10
|
+
openForm(newFormElement: JSX.Element | null): void;
|
|
11
11
|
render(): JSX.Element;
|
|
12
12
|
}
|