@michalrakus/x-react-web-lib 1.20.0 → 1.22.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/XFormHeader.d.ts +3 -0
- package/XFormHeader.js +5 -0
- package/XParamBrowse.d.ts +3 -0
- package/XParamBrowse.js +5 -0
- package/XParamForm.d.ts +3 -0
- package/XParamForm.js +5 -0
- package/gulpfile.js +5 -2
- package/lib/administration/XParamBrowse.d.ts +6 -0
- package/lib/administration/XParamBrowse.js +25 -0
- package/lib/administration/XParamForm.d.ts +7 -0
- package/lib/administration/XParamForm.js +62 -0
- package/lib/administration/XUserBrowse.js +1 -1
- package/lib/administration/XUserForm.js +12 -9
- package/lib/components/XAutoCompleteBase.js +2 -29
- package/lib/components/XCalendar.d.ts +15 -8
- package/lib/components/XCalendar.js +21 -2
- package/lib/components/XFormComponent.d.ts +1 -0
- package/lib/components/XFormHeader.d.ts +4 -0
- package/lib/components/XFormHeader.js +11 -0
- package/lib/components/XInputDate.js +1 -1
- package/lib/components/XInputDateDT.js +1 -1
- package/lib/components/XInputText.js +1 -1
- package/lib/components/XLazyDataTable/XExportRowsDialog.d.ts +10 -5
- package/lib/components/XLazyDataTable/XExportRowsDialog.js +79 -44
- package/lib/components/XLazyDataTable/XLazyDataTable.d.ts +7 -0
- package/lib/components/XLazyDataTable/XLazyDataTable.js +113 -31
- package/lib/components/XLazyDataTable/XMultilineSwitch.js +1 -1
- package/lib/components/XLazyDataTable/XOcfDropdown.d.ts +8 -0
- package/lib/components/XLazyDataTable/XOcfDropdown.js +53 -0
- package/lib/components/XUtils.d.ts +3 -1
- package/lib/components/XUtils.js +42 -10
- package/lib/components/locale/x-en.json +1 -0
- package/lib/serverApi/ExportImportParam.d.ts +29 -11
- package/lib/serverApi/ExportImportParam.js +11 -1
- package/lib/serverApi/XUtilsCommon.d.ts +5 -0
- package/lib/serverApi/XUtilsCommon.js +90 -3
- package/lib/serverApi/XUtilsConversions.d.ts +13 -5
- package/lib/serverApi/XUtilsConversions.js +110 -34
- package/lib/serverApi/XUtilsMetadataCommon.d.ts +1 -0
- package/lib/serverApi/XUtilsMetadataCommon.js +17 -0
- package/package.json +1 -1
package/XFormHeader.d.ts
ADDED
package/XFormHeader.js
ADDED
package/XParamBrowse.js
ADDED
package/XParamForm.d.ts
ADDED
package/XParamForm.js
ADDED
package/gulpfile.js
CHANGED
|
@@ -13,10 +13,12 @@ function generateApi(cb) {
|
|
|
13
13
|
const fs = require('fs');
|
|
14
14
|
|
|
15
15
|
const apiFileList = [
|
|
16
|
-
"./lib/administration/XUserBrowse",
|
|
17
|
-
"./lib/administration/XUserForm",
|
|
18
16
|
"./lib/administration/XBrowseMetaBrowse",
|
|
19
17
|
"./lib/administration/XBrowseMetaForm",
|
|
18
|
+
"./lib/administration/XParamBrowse",
|
|
19
|
+
"./lib/administration/XParamForm",
|
|
20
|
+
"./lib/administration/XUserBrowse",
|
|
21
|
+
"./lib/administration/XUserForm",
|
|
20
22
|
|
|
21
23
|
"./lib/components/XFormRowCol/XFormCol",
|
|
22
24
|
"./lib/components/XFormRowCol/XFormInlineRow",
|
|
@@ -51,6 +53,7 @@ function generateApi(cb) {
|
|
|
51
53
|
"./lib/components/XFormBaseT",
|
|
52
54
|
"./lib/components/XFormDataTable2",
|
|
53
55
|
"./lib/components/XFormFooter",
|
|
56
|
+
"./lib/components/XFormHeader",
|
|
54
57
|
"./lib/components/XFormNavigator3",
|
|
55
58
|
"./lib/components/XHolders",
|
|
56
59
|
"./lib/components/XInputDate",
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { XBrowseProps } from "../components/XLazyDataTable/XLazyDataTable";
|
|
3
|
+
import { XCustomFilter } from "../serverApi/FindParam";
|
|
4
|
+
export declare const XParamBrowse: (props: XBrowseProps & {
|
|
5
|
+
customFilter?: XCustomFilter;
|
|
6
|
+
}) => JSX.Element;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.XParamBrowse = void 0;
|
|
7
|
+
var react_1 = __importDefault(require("react"));
|
|
8
|
+
var XLazyDataTable_1 = require("../components/XLazyDataTable/XLazyDataTable");
|
|
9
|
+
var XParamForm_1 = require("./XParamForm");
|
|
10
|
+
var XParamBrowse = function (props) {
|
|
11
|
+
var onAddRow = function () {
|
|
12
|
+
// openForm pridavame automaticky v XFormNavigator3 pri renderovani komponentu
|
|
13
|
+
props.openForm(react_1.default.createElement(XParamForm_1.XParamForm, null));
|
|
14
|
+
};
|
|
15
|
+
var onEdit = function (selectedRow) {
|
|
16
|
+
// openForm pridavame automaticky v XFormNavigator3 pri renderovani komponentu
|
|
17
|
+
props.openForm(react_1.default.createElement(XParamForm_1.XParamForm, { id: selectedRow.id }));
|
|
18
|
+
};
|
|
19
|
+
return (react_1.default.createElement(XLazyDataTable_1.XLazyDataTable, { entity: "XParam", label: "Parameters", sortField: "id", rows: 30, customFilter: props.customFilter, onAddRow: onAddRow, onEdit: onEdit, removeRow: true, displayed: props.displayed },
|
|
20
|
+
react_1.default.createElement(XLazyDataTable_1.XLazyColumn, { field: "id", header: "ID", width: "8rem" }),
|
|
21
|
+
react_1.default.createElement(XLazyDataTable_1.XLazyColumn, { field: "code", header: "Code", width: "16rem" }),
|
|
22
|
+
react_1.default.createElement(XLazyDataTable_1.XLazyColumn, { field: "name", header: "Name", width: "45rem" }),
|
|
23
|
+
react_1.default.createElement(XLazyDataTable_1.XLazyColumn, { field: "value", header: "Value", width: "16rem" })));
|
|
24
|
+
};
|
|
25
|
+
exports.XParamBrowse = XParamBrowse;
|
|
@@ -0,0 +1,62 @@
|
|
|
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
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
18
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
19
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
20
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
21
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
22
|
+
};
|
|
23
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
24
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.XParamForm = void 0;
|
|
28
|
+
var react_1 = __importDefault(require("react"));
|
|
29
|
+
var XFormBaseModif_1 = require("../components/XFormBaseModif");
|
|
30
|
+
var XFormBase_1 = require("../components/XFormBase");
|
|
31
|
+
var XInputDecimal_1 = require("../components/XInputDecimal");
|
|
32
|
+
var XInputDate_1 = require("../components/XInputDate");
|
|
33
|
+
var XInputText_1 = require("../components/XInputText");
|
|
34
|
+
var XFormFooter_1 = require("../components/XFormFooter");
|
|
35
|
+
var XFormHeader_1 = require("../components/XFormHeader");
|
|
36
|
+
var XParamForm = /** @class */ (function (_super) {
|
|
37
|
+
__extends(XParamForm, _super);
|
|
38
|
+
function XParamForm() {
|
|
39
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
40
|
+
}
|
|
41
|
+
XParamForm.prototype.createNewObject = function () {
|
|
42
|
+
return { version: 0 };
|
|
43
|
+
};
|
|
44
|
+
XParamForm.prototype.render = function () {
|
|
45
|
+
return (react_1.default.createElement("div", null,
|
|
46
|
+
react_1.default.createElement(XFormHeader_1.XFormHeader, { label: "Parameter" }),
|
|
47
|
+
react_1.default.createElement("div", { className: "x-form-row" },
|
|
48
|
+
react_1.default.createElement("div", { className: "x-form-col" },
|
|
49
|
+
react_1.default.createElement(XInputDecimal_1.XInputDecimal, { form: this, field: "id", label: "ID", readOnly: true }),
|
|
50
|
+
react_1.default.createElement(XInputDate_1.XInputDate, { form: this, field: "modifDate", label: "Modified at", readOnly: true }),
|
|
51
|
+
react_1.default.createElement(XInputText_1.XInputText, { form: this, field: "modifXUser.name", label: "Modified by", inputStyle: { width: '12.5rem' } }),
|
|
52
|
+
react_1.default.createElement(XInputText_1.XInputText, { form: this, field: "code", label: "Code", inputStyle: { width: '16rem' } }),
|
|
53
|
+
react_1.default.createElement(XInputText_1.XInputText, { form: this, field: "name", label: "Name", inputStyle: { width: '45rem' } }),
|
|
54
|
+
react_1.default.createElement(XInputText_1.XInputText, { form: this, field: "value", label: "Value", inputStyle: { width: '45rem' } }))),
|
|
55
|
+
react_1.default.createElement(XFormFooter_1.XFormFooter, { form: this })));
|
|
56
|
+
};
|
|
57
|
+
XParamForm = __decorate([
|
|
58
|
+
(0, XFormBase_1.Form)("XParam")
|
|
59
|
+
], XParamForm);
|
|
60
|
+
return XParamForm;
|
|
61
|
+
}(XFormBaseModif_1.XFormBaseModif));
|
|
62
|
+
exports.XParamForm = XParamForm;
|
|
@@ -75,7 +75,7 @@ var XUserBrowse = function (props) {
|
|
|
75
75
|
}
|
|
76
76
|
});
|
|
77
77
|
}); };
|
|
78
|
-
return (react_1.default.createElement(XLazyDataTable_1.XLazyDataTable, { entity: "XUser", rows: 10, onAddRow: onAddRow, onEdit: onEdit, removeRow: onRemoveRow, displayed: props.displayed },
|
|
78
|
+
return (react_1.default.createElement(XLazyDataTable_1.XLazyDataTable, { entity: "XUser", label: "Users", rows: 10, onAddRow: onAddRow, onEdit: onEdit, removeRow: onRemoveRow, displayed: props.displayed },
|
|
79
79
|
react_1.default.createElement(XLazyDataTable_1.XLazyColumn, { field: "id", header: "ID" }),
|
|
80
80
|
react_1.default.createElement(XLazyDataTable_1.XLazyColumn, { field: "username", header: "Username", width: "17rem" }),
|
|
81
81
|
react_1.default.createElement(XLazyDataTable_1.XLazyColumn, { field: "name", header: "Name", width: "17rem" }),
|
|
@@ -75,6 +75,7 @@ var XCheckbox_1 = require("../components/XCheckbox");
|
|
|
75
75
|
var XEnvVars_1 = require("../components/XEnvVars");
|
|
76
76
|
var XFormBaseModif_1 = require("../components/XFormBaseModif");
|
|
77
77
|
var XInputDate_1 = require("../components/XInputDate");
|
|
78
|
+
var XFormHeader_1 = require("../components/XFormHeader");
|
|
78
79
|
var XUserForm = /** @class */ (function (_super) {
|
|
79
80
|
__extends(XUserForm, _super);
|
|
80
81
|
function XUserForm(props) {
|
|
@@ -100,8 +101,9 @@ var XUserForm = /** @class */ (function (_super) {
|
|
|
100
101
|
var e_1;
|
|
101
102
|
return __generator(this, function (_a) {
|
|
102
103
|
switch (_a.label) {
|
|
103
|
-
case 0:
|
|
104
|
-
|
|
104
|
+
case 0: return [4 /*yield*/, this.validateSave()];
|
|
105
|
+
case 1:
|
|
106
|
+
if (!(_a.sent())) {
|
|
105
107
|
return [2 /*return*/];
|
|
106
108
|
}
|
|
107
109
|
// v deme nedovolime zmenit uzivatelov ktori sa pouzivaju na skusanie dema
|
|
@@ -134,18 +136,18 @@ var XUserForm = /** @class */ (function (_super) {
|
|
|
134
136
|
}
|
|
135
137
|
}
|
|
136
138
|
this.preSave(this.state.object);
|
|
137
|
-
_a.label =
|
|
138
|
-
case 1:
|
|
139
|
-
_a.trys.push([1, 3, , 4]);
|
|
140
|
-
return [4 /*yield*/, XUtils_1.XUtils.post('userSaveRow', { entity: this.getEntity(), object: this.state.object })];
|
|
139
|
+
_a.label = 2;
|
|
141
140
|
case 2:
|
|
142
|
-
_a.
|
|
143
|
-
return [
|
|
141
|
+
_a.trys.push([2, 4, , 5]);
|
|
142
|
+
return [4 /*yield*/, XUtils_1.XUtils.post('userSaveRow', { entity: this.getEntity(), object: this.state.object })];
|
|
144
143
|
case 3:
|
|
144
|
+
_a.sent();
|
|
145
|
+
return [3 /*break*/, 5];
|
|
146
|
+
case 4:
|
|
145
147
|
e_1 = _a.sent();
|
|
146
148
|
XUtils_1.XUtils.showErrorMessage("Save row failed.", e_1);
|
|
147
149
|
return [2 /*return*/]; // zostavame vo formulari
|
|
148
|
-
case
|
|
150
|
+
case 5:
|
|
149
151
|
this.props.openForm(null); // save zbehol, ideme naspet do browsu
|
|
150
152
|
return [2 /*return*/];
|
|
151
153
|
}
|
|
@@ -167,6 +169,7 @@ var XUserForm = /** @class */ (function (_super) {
|
|
|
167
169
|
];
|
|
168
170
|
}
|
|
169
171
|
return (react_1.default.createElement("div", null,
|
|
172
|
+
react_1.default.createElement(XFormHeader_1.XFormHeader, { label: "User" }),
|
|
170
173
|
react_1.default.createElement("div", { className: "x-form-row" },
|
|
171
174
|
react_1.default.createElement("div", { className: "x-form-col" },
|
|
172
175
|
react_1.default.createElement(XInputDecimal_1.XInputDecimal, { form: this, field: "id", label: "ID", readOnly: true, labelStyle: { width: '14rem' } }),
|
|
@@ -614,39 +614,12 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
|
|
|
614
614
|
return itemTemplate;
|
|
615
615
|
};
|
|
616
616
|
XAutoCompleteBase.prototype.computeDefaultDisplayValue = function (suggestion) {
|
|
617
|
-
var
|
|
618
|
-
var displayValue = "";
|
|
617
|
+
var displayValue;
|
|
619
618
|
if (XAutoCompleteBase.isMoreSuggestions(suggestion)) {
|
|
620
619
|
displayValue = suggestion;
|
|
621
620
|
}
|
|
622
621
|
else {
|
|
623
|
-
|
|
624
|
-
for (var _b = __values(this.getFields()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
625
|
-
var field = _c.value;
|
|
626
|
-
// TODO - konverzie na spravny typ/string
|
|
627
|
-
var _d = __read(XUtilsCommon_1.XUtilsCommon.getPrefixAndField(field), 2), prefix = _d[0], fieldOnly = _d[1];
|
|
628
|
-
var value = XUtilsCommon_1.XUtilsCommon.getValueByPath(suggestion, fieldOnly);
|
|
629
|
-
if (value !== null && value !== undefined) {
|
|
630
|
-
var valueStr = value.toString(); // TODO - spravnu konverziu
|
|
631
|
-
if (valueStr !== "") {
|
|
632
|
-
if (displayValue !== "") {
|
|
633
|
-
displayValue += " ";
|
|
634
|
-
}
|
|
635
|
-
if (prefix) {
|
|
636
|
-
displayValue += prefix;
|
|
637
|
-
}
|
|
638
|
-
displayValue += valueStr;
|
|
639
|
-
}
|
|
640
|
-
}
|
|
641
|
-
}
|
|
642
|
-
}
|
|
643
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
644
|
-
finally {
|
|
645
|
-
try {
|
|
646
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
647
|
-
}
|
|
648
|
-
finally { if (e_2) throw e_2.error; }
|
|
649
|
-
}
|
|
622
|
+
displayValue = XUtilsCommon_1.XUtilsCommon.createDisplayValue(suggestion, this.getFields());
|
|
650
623
|
}
|
|
651
624
|
return displayValue;
|
|
652
625
|
};
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
import { XDateScale } from "../serverApi/XUtilsConversions";
|
|
3
|
+
export declare const XCalendar: {
|
|
4
|
+
(props: {
|
|
5
|
+
id?: string | undefined;
|
|
6
|
+
value: Date | null;
|
|
7
|
+
onChange: (value: Date | null) => void;
|
|
8
|
+
readOnly?: boolean | undefined;
|
|
9
|
+
error?: string | undefined;
|
|
10
|
+
scale: XDateScale;
|
|
11
|
+
datetime?: boolean | undefined;
|
|
12
|
+
}): JSX.Element;
|
|
13
|
+
defaultProps: {
|
|
14
|
+
scale: XDateScale;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
@@ -84,7 +84,7 @@ var XCalendar = function (props) {
|
|
|
84
84
|
var onBlur = function (e) {
|
|
85
85
|
if (inputChanged) {
|
|
86
86
|
// poznamka: e.target.value aj inputValueState obsahuju tu istu string hodnotu
|
|
87
|
-
var value = (0, XUtilsConversions_1.dateFromUI)(e.target.value);
|
|
87
|
+
var value = (0, XUtilsConversions_1.dateFromUI)(e.target.value, props.scale);
|
|
88
88
|
props.onChange(value !== null && value !== void 0 ? value : null); // nekorektnu hodnotu reprezentovanu cez undefined budeme riesit akokeby user zadal null (field sa vyprazdni)
|
|
89
89
|
setInputChanged(false);
|
|
90
90
|
setInputValueState(undefined); // pre poriadok
|
|
@@ -100,9 +100,28 @@ var XCalendar = function (props) {
|
|
|
100
100
|
}
|
|
101
101
|
return inputValue;
|
|
102
102
|
};
|
|
103
|
+
var getView = function (dateScale) {
|
|
104
|
+
var view;
|
|
105
|
+
if (dateScale === XUtilsConversions_1.XDateScale.Date) {
|
|
106
|
+
view = "date";
|
|
107
|
+
}
|
|
108
|
+
else if (dateScale === XUtilsConversions_1.XDateScale.Month) {
|
|
109
|
+
view = "month";
|
|
110
|
+
}
|
|
111
|
+
else if (dateScale === XUtilsConversions_1.XDateScale.Year) {
|
|
112
|
+
view = "year";
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
throw "Unimplemented dateScale = " + dateScale;
|
|
116
|
+
}
|
|
117
|
+
return view;
|
|
118
|
+
};
|
|
103
119
|
var datetime = (_a = props.datetime) !== null && _a !== void 0 ? _a : false;
|
|
104
120
|
// poznamka: parseDateTime nerobi ziadny parse, nechceme aby Calendar "rusil" uzivatela pri typovani datumu
|
|
105
121
|
// konverzia (a volanie props.onChange) sa robi az pri onBlur
|
|
106
|
-
return (react_1.default.createElement(calendar_1.Calendar, __assign({ id: props.id, value: getInputValue(), onChange: onChange, disabled: props.readOnly, showIcon: true, showOnFocus: false, dateFormat: (0, XUtilsConversions_1.dateFormatCalendar)(), keepInvalid: true, parseDateTime: function (text) { return text; }, showTime: datetime, showSeconds: datetime, inputClassName: datetime ? 'x-input-datetime' : 'x-input-date', onSelect: onSelect, onBlur: onBlur }, XUtils_1.XUtils.createErrorProps(props.error))));
|
|
122
|
+
return (react_1.default.createElement(calendar_1.Calendar, __assign({ id: props.id, value: getInputValue(), onChange: onChange, disabled: props.readOnly, showIcon: true, showOnFocus: false, view: getView(props.scale), dateFormat: (0, XUtilsConversions_1.dateFormatCalendar)(props.scale), keepInvalid: true, parseDateTime: function (text) { return text; }, showTime: datetime, showSeconds: datetime, inputClassName: datetime ? 'x-input-datetime' : 'x-input-date', onSelect: onSelect, onBlur: onBlur }, XUtils_1.XUtils.createErrorProps(props.error))));
|
|
107
123
|
};
|
|
108
124
|
exports.XCalendar = XCalendar;
|
|
125
|
+
exports.XCalendar.defaultProps = {
|
|
126
|
+
scale: XUtilsConversions_1.XDateScale.Date
|
|
127
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.XFormHeader = void 0;
|
|
7
|
+
var react_1 = __importDefault(require("react"));
|
|
8
|
+
var XFormHeader = function (props) {
|
|
9
|
+
return (react_1.default.createElement("div", { className: "x-form-header" }, props.label));
|
|
10
|
+
};
|
|
11
|
+
exports.XFormHeader = XFormHeader;
|
|
@@ -42,7 +42,7 @@ var XInputDate = /** @class */ (function (_super) {
|
|
|
42
42
|
// note: style overrides size (width of the input according to character count)
|
|
43
43
|
return (react_1.default.createElement("div", { className: "field grid" },
|
|
44
44
|
react_1.default.createElement("label", { htmlFor: this.props.field, className: "col-fixed", style: this.getLabelStyle() }, this.getLabel()),
|
|
45
|
-
react_1.default.createElement(XCalendar_1.XCalendar, { id: this.props.field, value: this.getValue(), onChange: this.onValueChange, readOnly: this.isReadOnly(), error: this.getError(), datetime: this.xField.type === 'datetime' })));
|
|
45
|
+
react_1.default.createElement(XCalendar_1.XCalendar, { id: this.props.field, value: this.getValue(), onChange: this.onValueChange, readOnly: this.isReadOnly(), error: this.getError(), scale: this.xField.scale, datetime: this.xField.type === 'datetime' })));
|
|
46
46
|
};
|
|
47
47
|
return XInputDate;
|
|
48
48
|
}(XInput_1.XInput));
|
|
@@ -37,7 +37,7 @@ var XInputDateDT = /** @class */ (function (_super) {
|
|
|
37
37
|
this.onValueChangeBase(value, this.props.onChange);
|
|
38
38
|
};
|
|
39
39
|
XInputDateDT.prototype.render = function () {
|
|
40
|
-
return (react_1.default.createElement(XCalendar_1.XCalendar, { id: this.props.field, value: this.getValue(), onChange: this.onValueChange, readOnly: this.isReadOnly(), error: this.getError(), datetime: this.xField.type === 'datetime' }));
|
|
40
|
+
return (react_1.default.createElement(XCalendar_1.XCalendar, { id: this.props.field, value: this.getValue(), onChange: this.onValueChange, readOnly: this.isReadOnly(), error: this.getError(), scale: this.xField.scale, datetime: this.xField.type === 'datetime' }));
|
|
41
41
|
};
|
|
42
42
|
return XInputDateDT;
|
|
43
43
|
}(XInputDT_1.XInputDT));
|
|
@@ -63,7 +63,7 @@ var XInputText = /** @class */ (function (_super) {
|
|
|
63
63
|
var label = this.getLabel();
|
|
64
64
|
return (react_1.default.createElement("div", { className: "field grid" },
|
|
65
65
|
label !== undefined ? react_1.default.createElement("label", { htmlFor: this.props.field, className: "col-fixed", style: this.getLabelStyle() }, label) : null,
|
|
66
|
-
react_1.default.createElement(inputtext_1.InputText, __assign({ id: this.props.field, value: this.getValue(), onChange: this.onValueChange, readOnly: this.isReadOnly(), maxLength: this.xField.length, size: size, style: this.props.inputStyle }, this.getClassNameTooltip(), { onBlur: this.onBlur }))));
|
|
66
|
+
react_1.default.createElement(inputtext_1.InputText, __assign({ id: this.props.field, value: this.getValue(), onChange: this.onValueChange, readOnly: this.isReadOnly(), maxLength: this.xField.length, size: size, style: this.props.inputStyle }, this.getClassNameTooltip(), { onBlur: this.onBlur, placeholder: this.props.placeholder }))));
|
|
67
67
|
};
|
|
68
68
|
return XInputText;
|
|
69
69
|
}(XInput_1.XInput));
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { ExportType, LazyDataTableQueryParam } from "../../serverApi/ExportImportParam";
|
|
3
3
|
export interface XExportParams {
|
|
4
|
-
|
|
4
|
+
rowCount: number;
|
|
5
|
+
existsToManyAssoc: boolean;
|
|
5
6
|
queryParam: LazyDataTableQueryParam | any;
|
|
6
|
-
headers
|
|
7
|
+
headers: string[];
|
|
8
|
+
widths: string[];
|
|
9
|
+
fieldsToDuplicateValues?: string[];
|
|
7
10
|
fileName: string;
|
|
8
11
|
}
|
|
9
|
-
export
|
|
12
|
+
export interface XExportRowsDialogState {
|
|
10
13
|
dialogOpened: boolean;
|
|
14
|
+
exportParams?: XExportParams;
|
|
15
|
+
}
|
|
16
|
+
export declare const XExportRowsDialog: (props: {
|
|
17
|
+
dialogState: XExportRowsDialogState;
|
|
11
18
|
hideDialog: () => void;
|
|
12
|
-
rowCount?: number;
|
|
13
19
|
exportTypeOptions?: ExportType[];
|
|
14
|
-
exportParams: XExportParams | (() => XExportParams);
|
|
15
20
|
}) => JSX.Element;
|
|
@@ -87,46 +87,65 @@ var XUtils_1 = require("../XUtils");
|
|
|
87
87
|
var XUtilsConversions_1 = require("../../serverApi/XUtilsConversions");
|
|
88
88
|
var XLocale_1 = require("../XLocale");
|
|
89
89
|
var XExportRowsDialog = function (props) {
|
|
90
|
-
var _a, _b;
|
|
91
|
-
var
|
|
92
|
-
var
|
|
93
|
-
var
|
|
94
|
-
var
|
|
95
|
-
var
|
|
90
|
+
var _a, _b, _c, _d, _e;
|
|
91
|
+
var _f = __read((0, react_1.useState)(ExportImportParam_1.ExportType.Excel), 2), exportType = _f[0], setExportType = _f[1];
|
|
92
|
+
var _g = __read((0, react_1.useState)(true), 2), createHeaderLine = _g[0], setCreateHeaderLine = _g[1];
|
|
93
|
+
var _h = __read((0, react_1.useState)(ExportImportParam_1.XMultilineExportType.Multiline), 2), detailRowsExport = _h[0], setDetailRowsExport = _h[1];
|
|
94
|
+
var _j = __read((0, react_1.useState)(ExportImportParam_1.CsvSeparator.Semicolon), 2), csvSeparator = _j[0], setCsvSeparator = _j[1];
|
|
95
|
+
var _k = __read((0, react_1.useState)(ExportImportParam_1.CsvDecimalFormat.Comma), 2), decimalFormat = _k[0], setDecimalFormat = _k[1];
|
|
96
|
+
var _l = __read((0, react_1.useState)(ExportImportParam_1.CsvEncoding.Win1250), 2), csvEncoding = _l[0], setCsvEncoding = _l[1];
|
|
96
97
|
// bez tejto metody by pri opetovnom otvoreni dialogu ponechal povodne hodnoty
|
|
97
98
|
var onShow = function () {
|
|
98
|
-
setExportType(ExportImportParam_1.ExportType.
|
|
99
|
-
setCreateHeaderLine(true);
|
|
99
|
+
setExportType(ExportImportParam_1.ExportType.Excel);
|
|
100
|
+
setCreateHeaderLine(true);
|
|
101
|
+
setDetailRowsExport(ExportImportParam_1.XMultilineExportType.Multiline);
|
|
100
102
|
setCsvSeparator(ExportImportParam_1.CsvSeparator.Semicolon);
|
|
101
103
|
setDecimalFormat(ExportImportParam_1.CsvDecimalFormat.Comma);
|
|
102
104
|
setCsvEncoding(ExportImportParam_1.CsvEncoding.Win1250);
|
|
103
105
|
};
|
|
104
106
|
var onExport = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
105
|
-
var exportParams,
|
|
107
|
+
var exportParams, apiPath, requestPayload, exportExcelParam, exportCsvParam, exportJsonParam, response, e_1, fileExt, fileName, respBlob, url, a;
|
|
106
108
|
return __generator(this, function (_a) {
|
|
107
109
|
switch (_a.label) {
|
|
108
110
|
case 0:
|
|
109
111
|
// export vykoname az po zatvoreni dialogu - moze dlho trvat a pobezi asynchronne (user zatial moze pracovat s aplikaciou)
|
|
110
112
|
// zavrieme dialog
|
|
111
113
|
props.hideDialog();
|
|
112
|
-
|
|
113
|
-
|
|
114
|
+
exportParams = props.dialogState.exportParams;
|
|
115
|
+
if (exportType === ExportImportParam_1.ExportType.Excel) {
|
|
116
|
+
apiPath = "x-lazy-data-table-export-excel";
|
|
117
|
+
exportExcelParam = {
|
|
118
|
+
queryParam: exportParams.queryParam,
|
|
119
|
+
excelCsvParam: createExcelCsvParam(exportParams),
|
|
120
|
+
widths: exportParams.widths
|
|
121
|
+
};
|
|
122
|
+
requestPayload = exportExcelParam;
|
|
114
123
|
}
|
|
115
|
-
else {
|
|
116
|
-
|
|
124
|
+
else if (exportType === ExportImportParam_1.ExportType.Csv) {
|
|
125
|
+
apiPath = "x-lazy-data-table-export-csv";
|
|
126
|
+
exportCsvParam = {
|
|
127
|
+
queryParam: exportParams.queryParam,
|
|
128
|
+
excelCsvParam: createExcelCsvParam(exportParams),
|
|
129
|
+
csvParam: {
|
|
130
|
+
csvSeparator: csvSeparator, csvDecimalFormat: decimalFormat, csvEncoding: csvEncoding
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
requestPayload = exportCsvParam;
|
|
134
|
+
}
|
|
135
|
+
else if (exportType === ExportImportParam_1.ExportType.Json) {
|
|
136
|
+
apiPath = "x-lazy-data-table-export-json";
|
|
137
|
+
exportJsonParam = {
|
|
138
|
+
queryParam: exportParams.queryParam
|
|
139
|
+
};
|
|
140
|
+
requestPayload = exportJsonParam;
|
|
117
141
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
csvParam = { useHeaderLine: createHeaderLine, csvSeparator: csvSeparator, csvDecimalFormat: decimalFormat, csvEncoding: csvEncoding };
|
|
121
|
-
if (csvParam.useHeaderLine) {
|
|
122
|
-
csvParam.headers = exportParams.headers;
|
|
123
|
-
}
|
|
142
|
+
else {
|
|
143
|
+
throw "Unimplemented exportType = ".concat(exportType);
|
|
124
144
|
}
|
|
125
|
-
exportParam = { exportType: exportType, csvParam: csvParam, queryParam: exportParams.queryParam };
|
|
126
145
|
_a.label = 1;
|
|
127
146
|
case 1:
|
|
128
147
|
_a.trys.push([1, 3, , 4]);
|
|
129
|
-
return [4 /*yield*/, XUtils_1.XUtils.fetchBasicJson(
|
|
148
|
+
return [4 /*yield*/, XUtils_1.XUtils.fetchBasicJson(apiPath, requestPayload)];
|
|
130
149
|
case 2:
|
|
131
150
|
response = _a.sent();
|
|
132
151
|
return [3 /*break*/, 4];
|
|
@@ -135,7 +154,7 @@ var XExportRowsDialog = function (props) {
|
|
|
135
154
|
XUtils_1.XUtils.showErrorMessage("Export failed.", e_1);
|
|
136
155
|
return [2 /*return*/];
|
|
137
156
|
case 4:
|
|
138
|
-
fileExt = exportType;
|
|
157
|
+
fileExt = exportType === ExportImportParam_1.ExportType.Excel ? "xlsx" : exportType;
|
|
139
158
|
fileName = "".concat(exportParams.fileName, ".").concat(fileExt);
|
|
140
159
|
return [4 /*yield*/, response.blob()];
|
|
141
160
|
case 5:
|
|
@@ -149,36 +168,52 @@ var XExportRowsDialog = function (props) {
|
|
|
149
168
|
}
|
|
150
169
|
});
|
|
151
170
|
}); };
|
|
152
|
-
var
|
|
153
|
-
|
|
171
|
+
var createExcelCsvParam = function (exportParams) {
|
|
172
|
+
return {
|
|
173
|
+
headers: createHeaderLine ? exportParams.headers : undefined,
|
|
174
|
+
fieldsToDuplicateValues: exportParams.fieldsToDuplicateValues,
|
|
175
|
+
toManyAssocExport: detailRowsExport,
|
|
176
|
+
multilineTextExport: ExportImportParam_1.XMultilineExportType.Multiline // TODO - dorobit aj tuto dropdown kde si uzivatel vyberie ci chce mat v texte \n alebo nechce - aj na backende treba dorobit
|
|
177
|
+
};
|
|
178
|
+
};
|
|
179
|
+
var elem = [];
|
|
180
|
+
if (props.dialogState.dialogOpened) {
|
|
181
|
+
if (exportType === ExportImportParam_1.ExportType.Excel || exportType === ExportImportParam_1.ExportType.Csv) {
|
|
182
|
+
elem.push(react_1.default.createElement("div", { key: "expCreateHeaderLine", className: "field grid" },
|
|
183
|
+
react_1.default.createElement("label", { className: "col-fixed", style: { width: '12rem' } }, (0, XLocale_1.xLocaleOption)('expCreateHeaderLine')),
|
|
184
|
+
react_1.default.createElement(checkbox_1.Checkbox, { checked: createHeaderLine, onChange: function (e) { return setCreateHeaderLine(e.checked); } })));
|
|
185
|
+
if ((_a = props.dialogState.exportParams) === null || _a === void 0 ? void 0 : _a.existsToManyAssoc) {
|
|
186
|
+
elem.push(react_1.default.createElement("div", { key: "expDetailRowsExport", className: "field grid" },
|
|
187
|
+
react_1.default.createElement("label", { className: "col-fixed", style: { width: '12rem' } }, (0, XLocale_1.xLocaleOption)('expDetailRowsExport')),
|
|
188
|
+
react_1.default.createElement(dropdown_1.Dropdown, { value: detailRowsExport, options: XUtils_1.XUtils.multilineExportTypeOptions, onChange: function (e) { return setDetailRowsExport(e.value); } })));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
154
191
|
if (exportType === ExportImportParam_1.ExportType.Csv) {
|
|
155
|
-
elem
|
|
156
|
-
react_1.default.createElement("div", { className: "field grid" },
|
|
157
|
-
react_1.default.createElement("label", { className: "col-fixed", style: { width: '
|
|
158
|
-
react_1.default.createElement(checkbox_1.Checkbox, { checked: createHeaderLine, onChange: function (e) { return setCreateHeaderLine(e.checked); } })),
|
|
159
|
-
react_1.default.createElement("div", { className: "field grid" },
|
|
160
|
-
react_1.default.createElement("label", { className: "col-fixed", style: { width: '10rem' } }, (0, XLocale_1.xLocaleOption)('expCsvSeparator')),
|
|
192
|
+
elem.push([
|
|
193
|
+
react_1.default.createElement("div", { key: "expCsvSeparator", className: "field grid" },
|
|
194
|
+
react_1.default.createElement("label", { className: "col-fixed", style: { width: '12rem' } }, (0, XLocale_1.xLocaleOption)('expCsvSeparator')),
|
|
161
195
|
react_1.default.createElement(dropdown_1.Dropdown, { value: csvSeparator, options: XUtils_1.XUtils.csvSeparatorOptions, onChange: function (e) { return setCsvSeparator(e.value); } })),
|
|
162
|
-
react_1.default.createElement("div", { className: "field grid" },
|
|
163
|
-
react_1.default.createElement("label", { className: "col-fixed", style: { width: '
|
|
196
|
+
react_1.default.createElement("div", { key: "expDecimalFormat", className: "field grid" },
|
|
197
|
+
react_1.default.createElement("label", { className: "col-fixed", style: { width: '12rem' } }, (0, XLocale_1.xLocaleOption)('expDecimalFormat')),
|
|
164
198
|
react_1.default.createElement(dropdown_1.Dropdown, { value: decimalFormat, options: XUtils_1.XUtils.decimalFormatOptions, onChange: function (e) { return setDecimalFormat(e.value); } })),
|
|
165
|
-
react_1.default.createElement("div", { className: "field grid" },
|
|
166
|
-
react_1.default.createElement("label", { className: "col-fixed", style: { width: '
|
|
167
|
-
react_1.default.createElement(dropdown_1.Dropdown, { value: csvEncoding, options: XUtils_1.XUtils.csvEncodingOptions, onChange: function (e) { return setCsvEncoding(e.value); } }))
|
|
199
|
+
react_1.default.createElement("div", { key: "expEncoding", className: "field grid" },
|
|
200
|
+
react_1.default.createElement("label", { className: "col-fixed", style: { width: '12rem' } }, (0, XLocale_1.xLocaleOption)('expEncoding')),
|
|
201
|
+
react_1.default.createElement(dropdown_1.Dropdown, { value: csvEncoding, options: XUtils_1.XUtils.csvEncodingOptions, onChange: function (e) { return setCsvEncoding(e.value); } }))
|
|
202
|
+
]);
|
|
168
203
|
}
|
|
169
204
|
}
|
|
170
205
|
// poznamka: renderovanie vnutornych komponentov Dialogu sa zavola az po otvoreni dialogu
|
|
171
|
-
return (react_1.default.createElement(dialog_1.Dialog, { visible: props.dialogOpened, onShow: onShow, onHide: function () { return props.hideDialog(); } },
|
|
172
|
-
props.rowCount ?
|
|
173
|
-
react_1.default.createElement("div", { className: "field grid" },
|
|
174
|
-
react_1.default.createElement("label", { className: "col-fixed", style: { width: '
|
|
175
|
-
react_1.default.createElement(inputtext_1.InputText, { value: (0, XUtilsConversions_1.numberAsUI)((
|
|
206
|
+
return (react_1.default.createElement(dialog_1.Dialog, { visible: props.dialogState.dialogOpened, onShow: onShow, onHide: function () { return props.hideDialog(); } },
|
|
207
|
+
((_b = props.dialogState.exportParams) === null || _b === void 0 ? void 0 : _b.rowCount) ?
|
|
208
|
+
react_1.default.createElement("div", { key: "expRowCount", className: "field grid" },
|
|
209
|
+
react_1.default.createElement("label", { className: "col-fixed", style: { width: '12rem' } }, (0, XLocale_1.xLocaleOption)('expRowCount')),
|
|
210
|
+
react_1.default.createElement(inputtext_1.InputText, { value: (0, XUtilsConversions_1.numberAsUI)((_d = (_c = props.dialogState.exportParams) === null || _c === void 0 ? void 0 : _c.rowCount) !== null && _d !== void 0 ? _d : null, 0), readOnly: true }))
|
|
176
211
|
: null,
|
|
177
|
-
react_1.default.createElement("div", { className: "field grid" },
|
|
178
|
-
react_1.default.createElement("label", { className: "col-fixed", style: { width: '
|
|
179
|
-
react_1.default.createElement(dropdown_1.Dropdown, { value: exportType, options: (
|
|
212
|
+
react_1.default.createElement("div", { key: "expExportType", className: "field grid" },
|
|
213
|
+
react_1.default.createElement("label", { className: "col-fixed", style: { width: '12rem' } }, (0, XLocale_1.xLocaleOption)('expExportType')),
|
|
214
|
+
react_1.default.createElement(dropdown_1.Dropdown, { value: exportType, options: (_e = props.exportTypeOptions) !== null && _e !== void 0 ? _e : XUtils_1.XUtils.exportTypeOptions, onChange: function (e) { return setExportType(e.value); } })),
|
|
180
215
|
elem,
|
|
181
|
-
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
216
|
+
react_1.default.createElement("div", { key: "exportRows", className: "flex justify-content-center" },
|
|
182
217
|
react_1.default.createElement(XButton_1.XButton, { label: (0, XLocale_1.xLocaleOption)('exportRows'), onClick: onExport }))));
|
|
183
218
|
};
|
|
184
219
|
exports.XExportRowsDialog = XExportRowsDialog;
|