@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.
Files changed (110) hide show
  1. package/XFormHeader.d.ts +3 -0
  2. package/XFormHeader.js +5 -0
  3. package/XMultiSelect.d.ts +3 -0
  4. package/XMultiSelect.js +5 -0
  5. package/XMultiSelectBase.d.ts +3 -0
  6. package/XMultiSelectBase.js +5 -0
  7. package/gulpfile.js +3 -0
  8. package/lib/administration/XBrowseMetaBrowse.d.ts +2 -2
  9. package/lib/administration/XBrowseMetaForm.d.ts +2 -2
  10. package/lib/administration/XParamBrowse.d.ts +2 -2
  11. package/lib/administration/XParamBrowse.js +1 -1
  12. package/lib/administration/XParamForm.d.ts +2 -2
  13. package/lib/administration/XParamForm.js +2 -0
  14. package/lib/administration/XUserBrowse.d.ts +2 -2
  15. package/lib/administration/XUserBrowse.js +1 -1
  16. package/lib/administration/XUserForm.d.ts +2 -2
  17. package/lib/administration/XUserForm.js +12 -9
  18. package/lib/components/SourceCodeLinkEntity.d.ts +2 -2
  19. package/lib/components/XAutoComplete.d.ts +2 -1
  20. package/lib/components/XAutoComplete.js +2 -2
  21. package/lib/components/XAutoCompleteBase.d.ts +5 -11
  22. package/lib/components/XAutoCompleteBase.js +28 -11
  23. package/lib/components/XAutoCompleteDT.d.ts +1 -1
  24. package/lib/components/XButton.d.ts +1 -1
  25. package/lib/components/XButtonIconMedium.d.ts +1 -1
  26. package/lib/components/XButtonIconNarrow.d.ts +1 -1
  27. package/lib/components/XButtonIconSmall.d.ts +1 -1
  28. package/lib/components/XCalendar.d.ts +16 -9
  29. package/lib/components/XCalendar.js +21 -2
  30. package/lib/components/XChangePasswordForm.d.ts +2 -2
  31. package/lib/components/XCheckboxDT.d.ts +2 -2
  32. package/lib/components/XDataTable.d.ts +2 -2
  33. package/lib/components/XDropdown.d.ts +2 -2
  34. package/lib/components/XDropdown.js +1 -1
  35. package/lib/components/XDropdownDT.d.ts +2 -2
  36. package/lib/components/XDropdownDTFilter.d.ts +2 -2
  37. package/lib/components/XDropdownForEntity.d.ts +2 -2
  38. package/lib/components/XDropdownForEntity.js +1 -1
  39. package/lib/components/XDropdownFormDTFilter.d.ts +2 -2
  40. package/lib/components/XEditBrowse.d.ts +2 -2
  41. package/lib/components/XEditColumnDialog.d.ts +2 -2
  42. package/lib/components/XEditor.d.ts +1 -1
  43. package/lib/components/XEditorBase.d.ts +1 -1
  44. package/lib/components/XEditorBase.js +1 -1
  45. package/lib/components/XFieldSelector.d.ts +2 -2
  46. package/lib/components/XFormComponent.d.ts +1 -0
  47. package/lib/components/XFormDataTable2.d.ts +1 -1
  48. package/lib/components/XFormFooter.d.ts +2 -2
  49. package/lib/components/XFormHeader.d.ts +4 -0
  50. package/lib/components/XFormHeader.js +11 -0
  51. package/lib/components/XFormNavigator3.d.ts +2 -2
  52. package/lib/components/XFormRowCol/XFormCol.d.ts +1 -1
  53. package/lib/components/XFormRowCol/XFormInlineRow.d.ts +1 -1
  54. package/lib/components/XFormRowCol/XFormRow.d.ts +1 -1
  55. package/lib/components/XFormRowCol/XFormRowCol.d.ts +1 -1
  56. package/lib/components/XFtsInput.d.ts +2 -2
  57. package/lib/components/XHolders.d.ts +3 -3
  58. package/lib/components/XInputDate.d.ts +2 -2
  59. package/lib/components/XInputDate.js +1 -1
  60. package/lib/components/XInputDateDT.d.ts +2 -2
  61. package/lib/components/XInputDateDT.js +1 -1
  62. package/lib/components/XInputDecimal.d.ts +1 -1
  63. package/lib/components/XInputDecimalBase.d.ts +2 -2
  64. package/lib/components/XInputDecimalDT.d.ts +2 -2
  65. package/lib/components/XInputDecimalDT.js +1 -1
  66. package/lib/components/XInputFileList.d.ts +2 -1
  67. package/lib/components/XInputInterval.d.ts +1 -1
  68. package/lib/components/XInputIntervalBase.d.ts +2 -2
  69. package/lib/components/XInputIntervalBase.js +1 -1
  70. package/lib/components/XInputIntervalDT.d.ts +2 -2
  71. package/lib/components/XInputText.d.ts +2 -2
  72. package/lib/components/XInputText.js +14 -3
  73. package/lib/components/XInputTextDT.d.ts +2 -2
  74. package/lib/components/XInputTextarea.d.ts +1 -1
  75. package/lib/components/XInputTextarea.js +13 -3
  76. package/lib/components/XInputTextareaBase.d.ts +3 -1
  77. package/lib/components/XInputTextareaBase.js +1 -1
  78. package/lib/components/XInputTextareaDT.d.ts +2 -2
  79. package/lib/components/XLazyDataTable/XExportRowsDialog.d.ts +12 -7
  80. package/lib/components/XLazyDataTable/XExportRowsDialog.js +79 -44
  81. package/lib/components/XLazyDataTable/XLazyDataTable.d.ts +2 -1
  82. package/lib/components/XLazyDataTable/XLazyDataTable.js +55 -24
  83. package/lib/components/XLazyDataTable/XMultilineSwitch.d.ts +2 -2
  84. package/lib/components/XLazyDataTable/XMultilineSwitch.js +1 -1
  85. package/lib/components/XLazyDataTable/XOcfDropdown.d.ts +2 -2
  86. package/lib/components/XLazyDataTable/XOcfDropdown.js +1 -0
  87. package/lib/components/XLoginDialog.d.ts +2 -2
  88. package/lib/components/XLoginForm.d.ts +2 -2
  89. package/lib/components/XMultiSelect.d.ts +25 -0
  90. package/lib/components/XMultiSelect.js +97 -0
  91. package/lib/components/XMultiSelectBase.d.ts +27 -0
  92. package/lib/components/XMultiSelectBase.js +145 -0
  93. package/lib/components/XSearchBrowseParams.d.ts +1 -1
  94. package/lib/components/XSearchButton.d.ts +1 -1
  95. package/lib/components/XSearchButtonDT.d.ts +2 -2
  96. package/lib/components/XSearchButtonOld.d.ts +1 -1
  97. package/lib/components/XToOneAssocButton.d.ts +2 -2
  98. package/lib/components/XToken.d.ts +1 -1
  99. package/lib/components/XUtils.d.ts +12 -3
  100. package/lib/components/XUtils.js +83 -31
  101. package/lib/components/locale/x-en.json +1 -0
  102. package/lib/serverApi/ExportImportParam.d.ts +28 -11
  103. package/lib/serverApi/ExportImportParam.js +11 -1
  104. package/lib/serverApi/XUtilsCommon.d.ts +1 -0
  105. package/lib/serverApi/XUtilsCommon.js +12 -0
  106. package/lib/serverApi/XUtilsConversions.d.ts +11 -5
  107. package/lib/serverApi/XUtilsConversions.js +95 -24
  108. package/lib/serverApi/XUtilsMetadataCommon.d.ts +4 -1
  109. package/lib/serverApi/XUtilsMetadataCommon.js +26 -3
  110. 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 _c = __read((0, react_1.useState)(ExportImportParam_1.ExportType.Csv), 2), exportType = _c[0], setExportType = _c[1];
92
- var _d = __read((0, react_1.useState)(true), 2), createHeaderLine = _d[0], setCreateHeaderLine = _d[1];
93
- var _e = __read((0, react_1.useState)(ExportImportParam_1.CsvSeparator.Semicolon), 2), csvSeparator = _e[0], setCsvSeparator = _e[1];
94
- var _f = __read((0, react_1.useState)(ExportImportParam_1.CsvDecimalFormat.Comma), 2), decimalFormat = _f[0], setDecimalFormat = _f[1];
95
- var _g = __read((0, react_1.useState)(ExportImportParam_1.CsvEncoding.Win1250), 2), csvEncoding = _g[0], setCsvEncoding = _g[1];
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.Csv);
99
- setCreateHeaderLine(true); // excel hadze hlasky koli prvemu riadku header-ov
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, csvParam, exportParam, response, e_1, fileExt, fileName, respBlob, url, a;
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
- if (typeof props.exportParams === 'function') {
113
- exportParams = props.exportParams();
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
- exportParams = props.exportParams;
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
- csvParam = undefined;
119
- if (exportType === ExportImportParam_1.ExportType.Csv) {
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(exportParams.path, exportParam)];
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 elem = null;
153
- if (props.dialogOpened) {
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 = react_1.default.createElement("span", null,
156
- react_1.default.createElement("div", { className: "field grid" },
157
- react_1.default.createElement("label", { className: "col-fixed", style: { width: '10rem' } }, (0, XLocale_1.xLocaleOption)('expCreateHeaderLine')),
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: '10rem' } }, (0, XLocale_1.xLocaleOption)('expDecimalFormat')),
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: '10rem' } }, (0, XLocale_1.xLocaleOption)('expEncoding')),
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: '10rem' } }, (0, XLocale_1.xLocaleOption)('expRowCount')),
175
- react_1.default.createElement(inputtext_1.InputText, { value: (0, XUtilsConversions_1.numberAsUI)((_a = props.rowCount) !== null && _a !== void 0 ? _a : null, 0), readOnly: true }))
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: '10rem' } }, (0, XLocale_1.xLocaleOption)('expExportType')),
179
- react_1.default.createElement(dropdown_1.Dropdown, { value: exportType, options: (_b = props.exportTypeOptions) !== null && _b !== void 0 ? _b : XUtils_1.XUtils.exportTypeOptions, onChange: function (e) { return setExportType(e.value); } })),
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), exportRowsDialogOpened = _o[0], setExportRowsDialogOpened = _o[1];
249
- var _p = __read((0, react_1.useState)(), 2), exportRowsDialogRowCount = _p[0], setExportRowsDialogRowCount = _p[1]; // param pre dialog
250
- var _q = __read((0, react_1.useState)(filtersInit), 2), filtersAfterFiltering = _q[0], setFiltersAfterFiltering = _q[1]; // sem si odkladame stav filtra po kliknuti na button Filter (chceme exportovat presne to co vidno vyfiltrovane)
251
- var _r = __read((0, react_1.useState)(initFtsInputValue), 2), ftsInputValueAfterFiltering = _r[0], setFtsInputValueAfterFiltering = _r[1]; // tak isto ako filtersAfterFiltering
252
- var _s = __read((0, react_1.useState)(undefined), 2), optionalCustomFilterAfterFiltering = _s[0], setOptionalCustomFilterAfterFiltering = _s[1]; // tak isto ako filtersAfterFiltering
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, e_5, e_6;
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
- e_5 = _a.sent();
486
- XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'), e_5);
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
- e_6 = _a.sent();
509
- XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'), e_6);
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: getFields(false),
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
- //setLoading(false);
554
- setExportRowsDialogRowCount(findResult.totalRecords); // param pre dialog
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: getFields(false),
568
- fieldsToDuplicateValues: props.exportFieldsToDuplicateValues
589
+ fields: fields
569
590
  };
570
591
  return {
571
- path: "x-lazy-data-table-export",
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", dialogOpened: exportRowsDialogOpened, hideDialog: function () { return setExportRowsDialogOpened(false); }, rowCount: exportRowsDialogRowCount, exportParams: createExportParams }) : null),
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
- /// <reference types="react" />
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
- /// <reference types="react" />
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
- /// <reference types="react" />
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
+ }