@michalrakus/x-react-web-lib 1.21.0 → 1.23.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/XMultiSelect.d.ts +3 -0
- package/XMultiSelect.js +5 -0
- package/XMultiSelectBase.d.ts +3 -0
- package/XMultiSelectBase.js +5 -0
- package/gulpfile.js +3 -0
- package/lib/administration/XBrowseMetaBrowse.d.ts +2 -2
- package/lib/administration/XBrowseMetaForm.d.ts +2 -2
- package/lib/administration/XParamBrowse.d.ts +2 -2
- package/lib/administration/XParamBrowse.js +1 -1
- package/lib/administration/XParamForm.d.ts +2 -2
- package/lib/administration/XParamForm.js +2 -0
- package/lib/administration/XUserBrowse.d.ts +2 -2
- package/lib/administration/XUserBrowse.js +1 -1
- package/lib/administration/XUserForm.d.ts +2 -2
- package/lib/administration/XUserForm.js +12 -9
- package/lib/components/SourceCodeLinkEntity.d.ts +2 -2
- package/lib/components/XAutoComplete.d.ts +2 -1
- package/lib/components/XAutoComplete.js +2 -2
- package/lib/components/XAutoCompleteBase.d.ts +5 -11
- package/lib/components/XAutoCompleteBase.js +28 -11
- package/lib/components/XAutoCompleteDT.d.ts +1 -1
- package/lib/components/XButton.d.ts +1 -1
- package/lib/components/XButtonIconMedium.d.ts +1 -1
- package/lib/components/XButtonIconNarrow.d.ts +1 -1
- package/lib/components/XButtonIconSmall.d.ts +1 -1
- package/lib/components/XCalendar.d.ts +16 -9
- package/lib/components/XCalendar.js +21 -2
- package/lib/components/XChangePasswordForm.d.ts +2 -2
- package/lib/components/XCheckboxDT.d.ts +2 -2
- package/lib/components/XDataTable.d.ts +2 -2
- package/lib/components/XDropdown.d.ts +2 -2
- package/lib/components/XDropdown.js +1 -1
- package/lib/components/XDropdownDT.d.ts +2 -2
- package/lib/components/XDropdownDTFilter.d.ts +2 -2
- package/lib/components/XDropdownForEntity.d.ts +2 -2
- package/lib/components/XDropdownForEntity.js +1 -1
- package/lib/components/XDropdownFormDTFilter.d.ts +2 -2
- package/lib/components/XEditBrowse.d.ts +2 -2
- package/lib/components/XEditColumnDialog.d.ts +2 -2
- package/lib/components/XEditor.d.ts +1 -1
- package/lib/components/XEditorBase.d.ts +1 -1
- package/lib/components/XEditorBase.js +1 -1
- package/lib/components/XFieldSelector.d.ts +2 -2
- package/lib/components/XFormComponent.d.ts +1 -0
- package/lib/components/XFormDataTable2.d.ts +1 -1
- package/lib/components/XFormFooter.d.ts +2 -2
- package/lib/components/XFormHeader.d.ts +4 -0
- package/lib/components/XFormHeader.js +11 -0
- package/lib/components/XFormNavigator3.d.ts +2 -2
- package/lib/components/XFormRowCol/XFormCol.d.ts +1 -1
- package/lib/components/XFormRowCol/XFormInlineRow.d.ts +1 -1
- package/lib/components/XFormRowCol/XFormRow.d.ts +1 -1
- package/lib/components/XFormRowCol/XFormRowCol.d.ts +1 -1
- package/lib/components/XFtsInput.d.ts +2 -2
- package/lib/components/XHolders.d.ts +3 -3
- package/lib/components/XInputDate.d.ts +2 -2
- package/lib/components/XInputDate.js +1 -1
- package/lib/components/XInputDateDT.d.ts +2 -2
- package/lib/components/XInputDateDT.js +1 -1
- package/lib/components/XInputDecimal.d.ts +1 -1
- package/lib/components/XInputDecimalBase.d.ts +2 -2
- package/lib/components/XInputDecimalDT.d.ts +2 -2
- package/lib/components/XInputDecimalDT.js +1 -1
- package/lib/components/XInputFileList.d.ts +2 -1
- package/lib/components/XInputInterval.d.ts +1 -1
- package/lib/components/XInputIntervalBase.d.ts +2 -2
- package/lib/components/XInputIntervalBase.js +1 -1
- package/lib/components/XInputIntervalDT.d.ts +2 -2
- package/lib/components/XInputText.d.ts +2 -2
- package/lib/components/XInputText.js +14 -3
- package/lib/components/XInputTextDT.d.ts +2 -2
- package/lib/components/XInputTextarea.d.ts +1 -1
- package/lib/components/XInputTextarea.js +13 -3
- package/lib/components/XInputTextareaBase.d.ts +3 -1
- package/lib/components/XInputTextareaBase.js +1 -1
- package/lib/components/XInputTextareaDT.d.ts +2 -2
- package/lib/components/XLazyDataTable/XExportRowsDialog.d.ts +12 -7
- package/lib/components/XLazyDataTable/XExportRowsDialog.js +79 -44
- package/lib/components/XLazyDataTable/XLazyDataTable.d.ts +2 -1
- package/lib/components/XLazyDataTable/XLazyDataTable.js +55 -24
- package/lib/components/XLazyDataTable/XMultilineSwitch.d.ts +2 -2
- package/lib/components/XLazyDataTable/XMultilineSwitch.js +1 -1
- package/lib/components/XLazyDataTable/XOcfDropdown.d.ts +2 -2
- package/lib/components/XLazyDataTable/XOcfDropdown.js +1 -0
- package/lib/components/XLoginDialog.d.ts +2 -2
- package/lib/components/XLoginForm.d.ts +2 -2
- package/lib/components/XMultiSelect.d.ts +25 -0
- package/lib/components/XMultiSelect.js +97 -0
- package/lib/components/XMultiSelectBase.d.ts +27 -0
- package/lib/components/XMultiSelectBase.js +145 -0
- package/lib/components/XSearchBrowseParams.d.ts +1 -1
- package/lib/components/XSearchButton.d.ts +1 -1
- package/lib/components/XSearchButtonDT.d.ts +2 -2
- package/lib/components/XSearchButtonOld.d.ts +1 -1
- package/lib/components/XToOneAssocButton.d.ts +2 -2
- package/lib/components/XToken.d.ts +1 -1
- package/lib/components/XUtils.d.ts +12 -3
- package/lib/components/XUtils.js +83 -31
- package/lib/components/locale/x-en.json +1 -0
- package/lib/serverApi/ExportImportParam.d.ts +28 -11
- package/lib/serverApi/ExportImportParam.js +11 -1
- package/lib/serverApi/XUtilsCommon.d.ts +1 -0
- package/lib/serverApi/XUtilsCommon.js +12 -0
- package/lib/serverApi/XUtilsConversions.d.ts +11 -5
- package/lib/serverApi/XUtilsConversions.js +95 -24
- package/lib/serverApi/XUtilsMetadataCommon.d.ts +4 -1
- package/lib/serverApi/XUtilsMetadataCommon.js +26 -3
- package/package.json +3 -3
|
@@ -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;
|
|
@@ -38,6 +38,7 @@ export interface XSearchBrowseProps {
|
|
|
38
38
|
}
|
|
39
39
|
export interface XLazyDataTableProps {
|
|
40
40
|
entity: string;
|
|
41
|
+
label?: string;
|
|
41
42
|
dataKey?: string;
|
|
42
43
|
paginator: boolean;
|
|
43
44
|
rows: number;
|
|
@@ -74,7 +75,7 @@ export interface XLazyDataTableProps {
|
|
|
74
75
|
children: ReactChild[];
|
|
75
76
|
}
|
|
76
77
|
export declare const XLazyDataTable: {
|
|
77
|
-
(props: XLazyDataTableProps): JSX.Element;
|
|
78
|
+
(props: XLazyDataTableProps): React.JSX.Element;
|
|
78
79
|
defaultProps: {
|
|
79
80
|
paginator: boolean;
|
|
80
81
|
rows: number;
|
|
@@ -245,11 +245,11 @@ var XLazyDataTable = function (props) {
|
|
|
245
245
|
var _k = __read((0, react_1.useState)(XUtils_1.XUtils.createMultiSortMeta(props.sortField)), 2), multiSortMeta = _k[0], setMultiSortMeta = _k[1];
|
|
246
246
|
var _l = __read((0, react_1.useState)(null), 2), selectedRow = _l[0], setSelectedRow = _l[1];
|
|
247
247
|
var _m = __read((_a = props.dataLoadedState) !== null && _a !== void 0 ? _a : (0, react_1.useState)(false), 2), dataLoaded = _m[0], setDataLoaded = _m[1]; // priznak kde si zapiseme, ci uz sme nacitali data
|
|
248
|
-
var _o = __read((0, react_1.useState)(false), 2),
|
|
249
|
-
|
|
250
|
-
var
|
|
251
|
-
var
|
|
252
|
-
var
|
|
248
|
+
var _o = __read((0, react_1.useState)({ dialogOpened: false }), 2), exportRowsDialogState = _o[0], setExportRowsDialogState = _o[1];
|
|
249
|
+
//const [exportRowsDialogRowCount, setExportRowsDialogRowCount] = useState<number>(); // param pre dialog
|
|
250
|
+
var _p = __read((0, react_1.useState)(filtersInit), 2), filtersAfterFiltering = _p[0], setFiltersAfterFiltering = _p[1]; // sem si odkladame stav filtra po kliknuti na button Filter (chceme exportovat presne to co vidno vyfiltrovane)
|
|
251
|
+
var _q = __read((0, react_1.useState)(initFtsInputValue), 2), ftsInputValueAfterFiltering = _q[0], setFtsInputValueAfterFiltering = _q[1]; // tak isto ako filtersAfterFiltering
|
|
252
|
+
var _r = __read((0, react_1.useState)(undefined), 2), optionalCustomFilterAfterFiltering = _r[0], setOptionalCustomFilterAfterFiltering = _r[1]; // tak isto ako filtersAfterFiltering
|
|
253
253
|
// parameter [] zabezpeci ze sa metoda zavola len po prvom renderingu (a nie po kazdej zmene stavu (zavolani setNieco()))
|
|
254
254
|
(0, react_1.useEffect)(function () {
|
|
255
255
|
// jednoduchy sposob - nepouzivame parameter props.displayed a priznak dataLoaded
|
|
@@ -430,6 +430,28 @@ var XLazyDataTable = function (props) {
|
|
|
430
430
|
}
|
|
431
431
|
return headers;
|
|
432
432
|
};
|
|
433
|
+
var getWidths = function () {
|
|
434
|
+
var e_5, _a;
|
|
435
|
+
var _b;
|
|
436
|
+
// vrati sirky stlpcov napr. ['7.75rem', '20rem', '8.5rem', '8.5rem', '6rem']
|
|
437
|
+
// nevracia aktualne sirky stlpcov (po manualnom rozsireni) ale tie ktore boli nastavene/vypocitane v kode
|
|
438
|
+
var widths = [];
|
|
439
|
+
var columns = dataTableEl.current.props.children;
|
|
440
|
+
try {
|
|
441
|
+
for (var columns_5 = __values(columns), columns_5_1 = columns_5.next(); !columns_5_1.done; columns_5_1 = columns_5.next()) {
|
|
442
|
+
var column = columns_5_1.value;
|
|
443
|
+
widths.push((_b = column.props.headerStyle) === null || _b === void 0 ? void 0 : _b.width);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
447
|
+
finally {
|
|
448
|
+
try {
|
|
449
|
+
if (columns_5_1 && !columns_5_1.done && (_a = columns_5.return)) _a.call(columns_5);
|
|
450
|
+
}
|
|
451
|
+
finally { if (e_5) throw e_5.error; }
|
|
452
|
+
}
|
|
453
|
+
return widths;
|
|
454
|
+
};
|
|
433
455
|
var hasContentTypeHtml = function () {
|
|
434
456
|
var columns = props.children;
|
|
435
457
|
return columns.some(function (column) { return column.props.contentType === "html"; });
|
|
@@ -467,7 +489,7 @@ var XLazyDataTable = function (props) {
|
|
|
467
489
|
}
|
|
468
490
|
};
|
|
469
491
|
var onClickRemoveRow = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
470
|
-
var reread,
|
|
492
|
+
var reread, e_6, e_7;
|
|
471
493
|
return __generator(this, function (_a) {
|
|
472
494
|
switch (_a.label) {
|
|
473
495
|
case 0:
|
|
@@ -482,8 +504,8 @@ var XLazyDataTable = function (props) {
|
|
|
482
504
|
reread = _a.sent();
|
|
483
505
|
return [3 /*break*/, 4];
|
|
484
506
|
case 3:
|
|
485
|
-
|
|
486
|
-
XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'),
|
|
507
|
+
e_6 = _a.sent();
|
|
508
|
+
XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'), e_6);
|
|
487
509
|
return [3 /*break*/, 4];
|
|
488
510
|
case 4:
|
|
489
511
|
if (reread) {
|
|
@@ -505,8 +527,8 @@ var XLazyDataTable = function (props) {
|
|
|
505
527
|
_a.sent();
|
|
506
528
|
return [3 /*break*/, 9];
|
|
507
529
|
case 8:
|
|
508
|
-
|
|
509
|
-
XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'),
|
|
530
|
+
e_7 = _a.sent();
|
|
531
|
+
XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'), e_7);
|
|
510
532
|
return [3 /*break*/, 9];
|
|
511
533
|
case 9:
|
|
512
534
|
loadData();
|
|
@@ -531,10 +553,11 @@ var XLazyDataTable = function (props) {
|
|
|
531
553
|
}
|
|
532
554
|
};
|
|
533
555
|
var onClickExport = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
534
|
-
var findParam, findResult;
|
|
556
|
+
var fields, findParam, findResult, exportParams;
|
|
535
557
|
return __generator(this, function (_a) {
|
|
536
558
|
switch (_a.label) {
|
|
537
559
|
case 0:
|
|
560
|
+
fields = getFields(false);
|
|
538
561
|
findParam = {
|
|
539
562
|
resultType: FindParam_1.ResultType.OnlyRowCount,
|
|
540
563
|
first: first,
|
|
@@ -544,36 +567,41 @@ var XLazyDataTable = function (props) {
|
|
|
544
567
|
customFilterItems: createXCustomFilterItems(customFilterItems, optionalCustomFilterAfterFiltering),
|
|
545
568
|
multiSortMeta: multiSortMeta,
|
|
546
569
|
entity: props.entity,
|
|
547
|
-
fields:
|
|
570
|
+
fields: fields,
|
|
548
571
|
aggregateItems: aggregateItems
|
|
549
572
|
};
|
|
550
573
|
return [4 /*yield*/, findByFilter(findParam)];
|
|
551
574
|
case 1:
|
|
552
575
|
findResult = _a.sent();
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
setExportRowsDialogOpened(true);
|
|
576
|
+
exportParams = createExportParams(fields, findResult.totalRecords);
|
|
577
|
+
setExportRowsDialogState({ dialogOpened: true, exportParams: exportParams });
|
|
556
578
|
return [2 /*return*/];
|
|
557
579
|
}
|
|
558
580
|
});
|
|
559
581
|
}); };
|
|
560
|
-
var createExportParams = function () {
|
|
582
|
+
var createExportParams = function (fields, rowCount) {
|
|
561
583
|
var queryParam = {
|
|
562
584
|
filters: filtersAfterFiltering,
|
|
563
585
|
fullTextSearch: createXFullTextSearch(ftsInputValueAfterFiltering),
|
|
564
586
|
customFilterItems: createXCustomFilterItems(customFilterItems, optionalCustomFilterAfterFiltering),
|
|
565
587
|
multiSortMeta: multiSortMeta,
|
|
566
588
|
entity: props.entity,
|
|
567
|
-
fields:
|
|
568
|
-
fieldsToDuplicateValues: props.exportFieldsToDuplicateValues
|
|
589
|
+
fields: fields
|
|
569
590
|
};
|
|
570
591
|
return {
|
|
571
|
-
|
|
592
|
+
rowCount: rowCount,
|
|
593
|
+
existsToManyAssoc: existsToManyAssoc(fields),
|
|
572
594
|
queryParam: queryParam,
|
|
573
595
|
headers: getHeaders(),
|
|
596
|
+
widths: getWidths(),
|
|
597
|
+
fieldsToDuplicateValues: props.exportFieldsToDuplicateValues,
|
|
574
598
|
fileName: "".concat(props.entity)
|
|
575
599
|
};
|
|
576
600
|
};
|
|
601
|
+
var existsToManyAssoc = function (fields) {
|
|
602
|
+
var xEntity = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(props.entity);
|
|
603
|
+
return fields.some(function (value) { return XUtilsMetadataCommon_1.XUtilsMetadataCommon.hasPathToManyAssoc(xEntity, value); });
|
|
604
|
+
};
|
|
577
605
|
var onClickChoose = function () {
|
|
578
606
|
//console.log("zavolany onClickChoose");
|
|
579
607
|
if (selectedRow !== null) {
|
|
@@ -852,12 +880,12 @@ var XLazyDataTable = function (props) {
|
|
|
852
880
|
// display: 'flex' umiestni XCalendar elementy vedla seba
|
|
853
881
|
filterElement =
|
|
854
882
|
react_1.default.createElement("div", { style: betweenFilter === "row" ? { display: 'flex' } : undefined },
|
|
855
|
-
react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value); }, datetime: xField.type === "datetime" }),
|
|
856
|
-
react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value); }, datetime: xField.type === "datetime" }));
|
|
883
|
+
react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value); }, scale: xField.scale, datetime: xField.type === "datetime" }),
|
|
884
|
+
react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value); }, scale: xField.scale, datetime: xField.type === "datetime" }));
|
|
857
885
|
}
|
|
858
886
|
else {
|
|
859
887
|
var dateValue = getFilterValue(childColumn.props.field);
|
|
860
|
-
filterElement = react_1.default.createElement(XCalendar_1.XCalendar, { value: dateValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value); }, datetime: xField.type === "datetime" });
|
|
888
|
+
filterElement = react_1.default.createElement(XCalendar_1.XCalendar, { value: dateValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value); }, scale: xField.scale, datetime: xField.type === "datetime" });
|
|
861
889
|
}
|
|
862
890
|
}
|
|
863
891
|
else if (xField.type === "decimal" || xField.type === "number") {
|
|
@@ -953,13 +981,16 @@ var XLazyDataTable = function (props) {
|
|
|
953
981
|
return react_1.default.createElement(column_1.Column, { field: childColumn.props.field, header: header, footer: footer, filter: true, sortable: true, filterElement: filterElement, dataType: dataType, showFilterMenu: showFilterMenu, showClearButton: showClearButton, body: body, headerStyle: headerStyle, align: align });
|
|
954
982
|
});
|
|
955
983
|
// align-items-center centruje vertikalne (posuva smerom dolu do stredu)
|
|
984
|
+
// x-lazy-datatable-label-right-compensation - vyvazuje label, aby item-y v strede isli aspon priblizne do stredu
|
|
956
985
|
return (react_1.default.createElement("div", null,
|
|
957
986
|
react_1.default.createElement("div", { className: "flex justify-content-center align-items-center" },
|
|
987
|
+
props.label ? react_1.default.createElement("div", { className: "x-lazy-datatable-label" }, props.label) : null,
|
|
958
988
|
ftsInputValue ? react_1.default.createElement(XFtsInput_1.XFtsInput, { value: ftsInputValue, onChange: function (value) { return setFtsInputValue(value); } }) : null,
|
|
959
989
|
react_1.default.createElement(XButton_1.XButton, { key: "filter", label: (0, XLocale_1.xLocaleOption)('filter'), onClick: onClickFilter }),
|
|
960
990
|
react_1.default.createElement(XButton_1.XButton, { key: "clearFilter", label: (0, XLocale_1.xLocaleOption)('clearFilter'), onClick: onClickClearFilter }),
|
|
961
991
|
props.optionalCustomFilters ? react_1.default.createElement(XOcfDropdown_1.XOcfDropdown, { optionalCustomFilters: props.optionalCustomFilters, value: optionalCustomFilter, onChange: function (value) { return setOptionalCustomFilter(value); }, className: "m-1" }) : null,
|
|
962
|
-
props.multilineSwitch ? react_1.default.createElement(XMultilineSwitch_1.XMultilineSwitch, { value: multilineSwitchValue, onChange: function (value) { return setMultilineSwitchValue(value); }, className: "m-1" }) : null
|
|
992
|
+
props.multilineSwitch ? react_1.default.createElement(XMultilineSwitch_1.XMultilineSwitch, { value: multilineSwitchValue, onChange: function (value) { return setMultilineSwitchValue(value); }, className: "m-1" }) : null,
|
|
993
|
+
props.label ? react_1.default.createElement("div", { className: "x-lazy-datatable-label-right-compensation" }) : null),
|
|
963
994
|
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
964
995
|
react_1.default.createElement(datatable_1.DataTable, { value: value.rowList, dataKey: dataKey, paginator: props.paginator, rows: rows, totalRecords: value.totalRecords, lazy: true, first: first, onPage: onPage, loading: loading, filterDisplay: props.filterDisplay, filters: filters, onFilter: onFilter, sortMode: "multiple", removableSort: true, multiSortMeta: multiSortMeta, onSort: onSort, selectionMode: "single", selection: selectedRow, onSelectionChange: onSelectionChange, onRowDoubleClick: onRowDoubleClick, rowClassName: props.rowClassName, ref: dataTableEl, className: "p-datatable-sm x-lazy-datatable", resizableColumns: true, columnResizeMode: "expand", tableStyle: tableStyle, paginatorLeft: paginatorLeft, paginatorRight: paginatorRight, scrollable: props.scrollable, scrollHeight: scrollHeight, style: style }, columnElemList)),
|
|
965
996
|
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
@@ -970,7 +1001,7 @@ var XLazyDataTable = function (props) {
|
|
|
970
1001
|
props.appButtonsForRow ? props.appButtonsForRow.map(function (xAppButton) { return react_1.default.createElement(XButton_1.XButton, { key: xAppButton.key, icon: xAppButton.icon, label: xAppButton.label, onClick: function () { return onClickAppButtonForRow(xAppButton.onClick); } }); }) : null,
|
|
971
1002
|
props.appButtons,
|
|
972
1003
|
props.searchBrowseParams !== undefined ? react_1.default.createElement(XButton_1.XButton, { key: "choose", label: (0, XLocale_1.xLocaleOption)('chooseRow'), onClick: onClickChoose }) : null,
|
|
973
|
-
exportRows ? react_1.default.createElement(XExportRowsDialog_1.XExportRowsDialog, { key: "exportRowsDialog",
|
|
1004
|
+
exportRows ? react_1.default.createElement(XExportRowsDialog_1.XExportRowsDialog, { key: "exportRowsDialog", dialogState: exportRowsDialogState, hideDialog: function () { return setExportRowsDialogState({ dialogOpened: false }); } }) : null),
|
|
974
1005
|
hasContentTypeHtml() ? react_1.default.createElement(editor_1.Editor, { style: { display: 'none' }, showHeader: false }) : null /* we want to import css if needed (<style type="text/css" data-primereact-style-id="editor">) */));
|
|
975
1006
|
};
|
|
976
1007
|
exports.XLazyDataTable = XLazyDataTable;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
import React from "react";
|
|
2
2
|
import { XMultilineRenderType } from "./XLazyDataTable";
|
|
3
3
|
export declare const XMultilineSwitch: (props: {
|
|
4
4
|
value: XMultilineRenderType;
|
|
5
5
|
onChange: (value: XMultilineRenderType) => void;
|
|
6
6
|
className?: string | undefined;
|
|
7
|
-
}) => JSX.Element;
|
|
7
|
+
}) => React.JSX.Element;
|
|
@@ -15,6 +15,6 @@ var XMultilineSwitch = function (props) {
|
|
|
15
15
|
var itemTemplate = function (option) {
|
|
16
16
|
return react_1.default.createElement("i", { className: option.icon });
|
|
17
17
|
};
|
|
18
|
-
return (react_1.default.createElement(selectbutton_1.SelectButton, { value: props.value, onChange: function (e) { return props.onChange(e.value); }, options: options, optionValue: "value", itemTemplate: itemTemplate, className: props.className }));
|
|
18
|
+
return (react_1.default.createElement(selectbutton_1.SelectButton, { value: props.value, onChange: function (e) { return props.onChange(e.value); }, options: options, optionValue: "value", itemTemplate: itemTemplate, allowEmpty: false, className: props.className }));
|
|
19
19
|
};
|
|
20
20
|
exports.XMultilineSwitch = XMultilineSwitch;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
import React from "react";
|
|
2
2
|
import { XOptionalCustomFilter } from "./XLazyDataTable";
|
|
3
3
|
export declare const XOcfDropdown: (props: {
|
|
4
4
|
optionalCustomFilters: XOptionalCustomFilter[];
|
|
5
5
|
value: XOptionalCustomFilter | undefined;
|
|
6
6
|
onChange: (value: XOptionalCustomFilter | undefined) => void;
|
|
7
7
|
className?: string | undefined;
|
|
8
|
-
}) => JSX.Element;
|
|
8
|
+
}) => React.JSX.Element;
|
|
@@ -31,6 +31,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
31
31
|
exports.XOcfDropdown = void 0;
|
|
32
32
|
var react_1 = __importDefault(require("react"));
|
|
33
33
|
var dropdown_1 = require("primereact/dropdown");
|
|
34
|
+
// dropdown for optional custom filter (ocf)
|
|
34
35
|
var XOcfDropdown = function (props) {
|
|
35
36
|
var onChange = function (e) {
|
|
36
37
|
var value;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
import React from 'react';
|
|
2
2
|
import { XToken } from "./XToken";
|
|
3
3
|
export declare const XLoginDialog: (props: {
|
|
4
4
|
dialogOpened: boolean;
|
|
5
5
|
setXToken: (xToken: XToken | null) => void;
|
|
6
6
|
onHideDialog: (ok: boolean) => void;
|
|
7
7
|
customUserService?: string | undefined;
|
|
8
|
-
}) => JSX.Element;
|
|
8
|
+
}) => React.JSX.Element;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
import { XToken } from "./XToken";
|
|
2
|
+
import React from "react";
|
|
3
3
|
export declare const XLoginForm: (props: {
|
|
4
4
|
setXToken: (xToken: XToken | null) => void;
|
|
5
5
|
onLogin?: (() => void) | undefined;
|
|
6
6
|
customUserService?: string | undefined;
|
|
7
|
-
}) => JSX.Element;
|
|
7
|
+
}) => React.JSX.Element;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { XFilterProp, XFormComponent, XFormComponentProps } from "./XFormComponent";
|
|
3
|
+
import { XAssoc } from "../serverApi/XEntityMetadata";
|
|
4
|
+
import { XObject } from "./XObject";
|
|
5
|
+
import { DataTableSortMeta } from "primereact/datatable";
|
|
6
|
+
export interface XMultiSelectProps extends XFormComponentProps<XObject> {
|
|
7
|
+
assocToMany: string;
|
|
8
|
+
assocManyToOne?: string;
|
|
9
|
+
displayField: string;
|
|
10
|
+
filter?: XFilterProp;
|
|
11
|
+
sortField?: string | DataTableSortMeta[];
|
|
12
|
+
fields?: string[];
|
|
13
|
+
width?: string;
|
|
14
|
+
scrollHeight?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare class XMultiSelect extends XFormComponent<XObject, XMultiSelectProps> {
|
|
17
|
+
protected xAssocToMany: XAssoc;
|
|
18
|
+
protected xAssocManyToOne?: XAssoc;
|
|
19
|
+
constructor(props: XMultiSelectProps);
|
|
20
|
+
getField(): string;
|
|
21
|
+
isNotNull(): boolean;
|
|
22
|
+
getValue(): any[];
|
|
23
|
+
onChange(value: any[]): void;
|
|
24
|
+
render(): React.JSX.Element;
|
|
25
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
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 __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.XMultiSelect = void 0;
|
|
22
|
+
var react_1 = __importDefault(require("react"));
|
|
23
|
+
var XFormComponent_1 = require("./XFormComponent");
|
|
24
|
+
var XUtilsMetadataCommon_1 = require("../serverApi/XUtilsMetadataCommon");
|
|
25
|
+
var XMultiSelectBase_1 = require("./XMultiSelectBase");
|
|
26
|
+
var XUtilsCommon_1 = require("../serverApi/XUtilsCommon");
|
|
27
|
+
var XMultiSelect = /** @class */ (function (_super) {
|
|
28
|
+
__extends(XMultiSelect, _super);
|
|
29
|
+
function XMultiSelect(props) {
|
|
30
|
+
var _this = _super.call(this, props) || this;
|
|
31
|
+
_this.xAssocToMany = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXAssocToManyByPath(XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(props.form.getEntity()), props.assocToMany);
|
|
32
|
+
if (props.assocManyToOne) {
|
|
33
|
+
_this.xAssocManyToOne = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXAssocToOneByPath(XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(_this.xAssocToMany.entityName), props.assocManyToOne);
|
|
34
|
+
}
|
|
35
|
+
if (props.assocManyToOne) {
|
|
36
|
+
props.form.addField(props.assocToMany + '.' + props.assocManyToOne + '.' + props.displayField);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
props.form.addField(props.assocToMany + '.' + props.displayField);
|
|
40
|
+
}
|
|
41
|
+
_this.onChange = _this.onChange.bind(_this);
|
|
42
|
+
return _this;
|
|
43
|
+
}
|
|
44
|
+
XMultiSelect.prototype.getField = function () {
|
|
45
|
+
return this.props.assocToMany;
|
|
46
|
+
};
|
|
47
|
+
XMultiSelect.prototype.isNotNull = function () {
|
|
48
|
+
return !this.xAssocToMany.isNullable;
|
|
49
|
+
};
|
|
50
|
+
XMultiSelect.prototype.getValue = function () {
|
|
51
|
+
var _this = this;
|
|
52
|
+
var optionRowList;
|
|
53
|
+
var rowList = this.getValueFromObject();
|
|
54
|
+
if (this.props.assocManyToOne) {
|
|
55
|
+
// assoc "assocToMany" contains link rows - these link rows have to be transformed to option rows
|
|
56
|
+
if (rowList !== null) {
|
|
57
|
+
optionRowList = rowList.map(function (linkRow) { return XUtilsCommon_1.XUtilsCommon.getValueByPath(linkRow, _this.props.assocManyToOne); });
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// this.props.form.state.object was not initialised yet
|
|
61
|
+
optionRowList = [];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
// assoc "assocToMany" contains option rows - no transformation needed
|
|
66
|
+
optionRowList = rowList !== null && rowList !== void 0 ? rowList : [];
|
|
67
|
+
}
|
|
68
|
+
return optionRowList;
|
|
69
|
+
};
|
|
70
|
+
XMultiSelect.prototype.onChange = function (value) {
|
|
71
|
+
var _this = this;
|
|
72
|
+
// value coming from XMultiSelectBase is list of selected option rows
|
|
73
|
+
var rowList;
|
|
74
|
+
if (this.props.assocManyToOne) {
|
|
75
|
+
// assoc "assocToMany" expects link rows - we wrap options row into link rows, id is left undefined,
|
|
76
|
+
// during save will be all old links deleted and these new links will be inserted (because id is undefined)
|
|
77
|
+
rowList = value.map(function (optionRow) {
|
|
78
|
+
var linkRow = {};
|
|
79
|
+
linkRow[_this.props.assocManyToOne] = optionRow;
|
|
80
|
+
return linkRow;
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
// assoc "assocToMany" expects option rows - no transformation needed
|
|
85
|
+
rowList = value;
|
|
86
|
+
}
|
|
87
|
+
this.onValueChangeBase(rowList, this.props.onChange);
|
|
88
|
+
};
|
|
89
|
+
XMultiSelect.prototype.render = function () {
|
|
90
|
+
var _this = this;
|
|
91
|
+
return (react_1.default.createElement("div", { className: "field grid" },
|
|
92
|
+
react_1.default.createElement("label", { htmlFor: this.props.assocToMany, className: "col-fixed", style: this.getLabelStyle() }, this.getLabel()),
|
|
93
|
+
react_1.default.createElement(XMultiSelectBase_1.XMultiSelectBase, { value: this.getValue(), onChange: this.onChange, displayField: this.props.displayField, optionsQuery: { entity: this.xAssocManyToOne ? this.xAssocManyToOne.entityName : this.xAssocToMany.entityName, filter: function () { return _this.getFilterBase(_this.props.filter); }, sortField: this.props.sortField, fields: this.props.fields }, width: this.props.width, scrollHeight: this.props.scrollHeight, readOnly: this.isReadOnly(), error: this.getError() })));
|
|
94
|
+
};
|
|
95
|
+
return XMultiSelect;
|
|
96
|
+
}(XFormComponent_1.XFormComponent));
|
|
97
|
+
exports.XMultiSelect = XMultiSelect;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React, { Component } from "react";
|
|
2
|
+
import { XQuery } from "./XUtils";
|
|
3
|
+
import { DataTableSortMeta } from "primereact/datatable";
|
|
4
|
+
import { XDropdownForEntityProps } from "./XDropdownForEntity";
|
|
5
|
+
export interface XMultiSelectBaseProps {
|
|
6
|
+
value: any[];
|
|
7
|
+
onChange: (value: any[]) => void;
|
|
8
|
+
optionsQuery?: XQuery;
|
|
9
|
+
displayField: string;
|
|
10
|
+
maxSelectedLabels?: number;
|
|
11
|
+
width?: string;
|
|
12
|
+
scrollHeight?: string;
|
|
13
|
+
readOnly?: boolean;
|
|
14
|
+
error?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare class XMultiSelectBase extends Component<XMultiSelectBaseProps> {
|
|
17
|
+
static defaultProps: {};
|
|
18
|
+
protected idField: string;
|
|
19
|
+
state: {
|
|
20
|
+
options: any[];
|
|
21
|
+
};
|
|
22
|
+
constructor(props: XDropdownForEntityProps);
|
|
23
|
+
componentDidMount(): void;
|
|
24
|
+
loadOptions(): Promise<void>;
|
|
25
|
+
getSortField(): string | DataTableSortMeta[] | undefined;
|
|
26
|
+
render(): React.JSX.Element;
|
|
27
|
+
}
|