@michalrakus/x-react-web-lib 1.11.1 → 1.13.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 (47) hide show
  1. package/XUtilsConversions.d.ts +1 -1
  2. package/XUtilsConversions.js +1 -1
  3. package/XUtilsMetadataCommon.d.ts +3 -0
  4. package/XUtilsMetadataCommon.js +5 -0
  5. package/gulpfile.js +3 -2
  6. package/lib/components/XAutoComplete.d.ts +3 -1
  7. package/lib/components/XAutoComplete.js +14 -8
  8. package/lib/components/XAutoCompleteBase.d.ts +4 -0
  9. package/lib/components/XAutoCompleteBase.js +33 -2
  10. package/lib/components/XAutoCompleteDT.js +4 -4
  11. package/lib/components/XCalendar.js +1 -1
  12. package/lib/components/XDropdown.js +2 -2
  13. package/lib/components/XDropdownDT.js +4 -4
  14. package/lib/components/XDropdownDTFilter.js +2 -2
  15. package/lib/components/XDropdownForEntity.js +2 -2
  16. package/lib/components/XEditBrowse.js +4 -3
  17. package/lib/components/XExportRowsDialog.js +1 -1
  18. package/lib/components/XFieldSelector.js +4 -4
  19. package/lib/components/XFormDataTable2.js +13 -12
  20. package/lib/components/XFtsInput.d.ts +9 -0
  21. package/lib/components/XFtsInput.js +30 -0
  22. package/lib/components/XInput.js +2 -2
  23. package/lib/components/XInputDT.js +2 -2
  24. package/lib/components/XInputDateDT.js +1 -1
  25. package/lib/components/XInputFileList.js +6 -6
  26. package/lib/components/XInputIntervalBase.js +1 -1
  27. package/lib/components/XInputText.js +1 -1
  28. package/lib/components/XInputTextDT.js +3 -3
  29. package/lib/components/XInputTextarea.js +1 -1
  30. package/lib/components/XLazyDataTable.d.ts +11 -0
  31. package/lib/components/XLazyDataTable.js +58 -55
  32. package/lib/components/XSearchButton.js +4 -4
  33. package/lib/components/XSearchButtonDT.js +3 -3
  34. package/lib/components/XSearchButtonOld.js +5 -5
  35. package/lib/components/XToOneAssocButton.js +3 -3
  36. package/lib/components/XUtils.js +2 -1
  37. package/lib/components/XUtilsMetadata.d.ts +1 -19
  38. package/lib/components/XUtilsMetadata.js +8 -186
  39. package/lib/components/locale/x-en.json +4 -1
  40. package/lib/serverApi/ExportImportParam.d.ts +2 -1
  41. package/lib/serverApi/FindParam.d.ts +6 -0
  42. package/lib/{components → serverApi}/XUtilsConversions.d.ts +18 -1
  43. package/lib/serverApi/XUtilsConversions.js +330 -0
  44. package/lib/serverApi/XUtilsMetadataCommon.d.ts +30 -0
  45. package/lib/serverApi/XUtilsMetadataCommon.js +208 -0
  46. package/package.json +2 -2
  47. package/lib/components/XUtilsConversions.js +0 -177
@@ -69,24 +69,24 @@ exports.XInputFileList = void 0;
69
69
  var react_1 = __importDefault(require("react"));
70
70
  var react_2 = require("react");
71
71
  var fileupload_1 = require("primereact/fileupload");
72
- var XUtilsMetadata_1 = require("./XUtilsMetadata");
73
72
  var XUtils_1 = require("./XUtils");
74
73
  var XButton_1 = require("./XButton");
75
74
  var XButtonIconNarrow_1 = require("./XButtonIconNarrow");
76
- var XUtilsConversions_1 = require("./XUtilsConversions");
75
+ var XUtilsConversions_1 = require("../serverApi/XUtilsConversions");
77
76
  var XLocale_1 = require("./XLocale");
77
+ var XUtilsMetadataCommon_1 = require("../serverApi/XUtilsMetadataCommon");
78
78
  var XInputFileList = /** @class */ (function (_super) {
79
79
  __extends(XInputFileList, _super);
80
80
  function XInputFileList(props) {
81
81
  var _this = _super.call(this, props) || this;
82
82
  _this.fileUploadRef = react_1.default.createRef();
83
83
  _this.props = props;
84
- var xEntityForm = XUtilsMetadata_1.XUtilsMetadata.getXEntity(props.form.getEntity());
85
- var xAssocToMany = XUtilsMetadata_1.XUtilsMetadata.getXAssocToMany(xEntityForm, props.assocField);
84
+ var xEntityForm = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(props.form.getEntity());
85
+ var xAssocToMany = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXAssocToMany(xEntityForm, props.assocField);
86
86
  _this.entity = xAssocToMany.entityName;
87
- var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(_this.entity);
87
+ var xEntity = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(_this.entity);
88
88
  _this.idField = xEntity.idField;
89
- _this.xFileField = XUtilsMetadata_1.XUtilsMetadata.getXAssocToOneByAssocEntity(xEntity, 'XFile').name;
89
+ _this.xFileField = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXAssocToOneByAssocEntity(xEntity, 'XFile').name;
90
90
  _this.onDownloadFile = _this.onDownloadFile.bind(_this);
91
91
  _this.onRemoveFile = _this.onRemoveFile.bind(_this);
92
92
  _this.uploadHandler = _this.uploadHandler.bind(_this);
@@ -53,7 +53,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
53
53
  exports.XInputIntervalBase = void 0;
54
54
  var inputtext_1 = require("primereact/inputtext");
55
55
  var react_1 = __importStar(require("react"));
56
- var XUtilsConversions_1 = require("./XUtilsConversions");
56
+ var XUtilsConversions_1 = require("../serverApi/XUtilsConversions");
57
57
  var XUtils_1 = require("./XUtils");
58
58
  // zatial podporuje len hours a minutes - TODO - pridat aj seconds, ale cez nejaky prepinac
59
59
  var XInputIntervalBase = function (props) {
@@ -31,7 +31,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
31
31
  Object.defineProperty(exports, "__esModule", { value: true });
32
32
  exports.XInputText = void 0;
33
33
  var react_1 = __importDefault(require("react"));
34
- var XUtilsConversions_1 = require("./XUtilsConversions");
34
+ var XUtilsConversions_1 = require("../serverApi/XUtilsConversions");
35
35
  var inputtext_1 = require("primereact/inputtext");
36
36
  var XInput_1 = require("./XInput");
37
37
  var XInputText = /** @class */ (function (_super) {
@@ -6,12 +6,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.XInputTextDT = void 0;
7
7
  var react_1 = __importDefault(require("react"));
8
8
  var inputtext_1 = require("primereact/inputtext");
9
- var XUtilsConversions_1 = require("./XUtilsConversions");
10
- var XUtilsMetadata_1 = require("./XUtilsMetadata");
9
+ var XUtilsConversions_1 = require("../serverApi/XUtilsConversions");
11
10
  var XUtilsCommon_1 = require("../serverApi/XUtilsCommon");
12
11
  var XUtils_1 = require("./XUtils");
12
+ var XUtilsMetadataCommon_1 = require("../serverApi/XUtilsMetadataCommon");
13
13
  var XInputTextDT = function (props) {
14
- var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPathStr(props.entity, props.field);
14
+ var xField = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXFieldByPathStr(props.entity, props.field);
15
15
  var onValueChange = function (field, rowData, newValue) {
16
16
  // zmenime hodnotu v modeli (odtial sa hodnota cita)
17
17
  rowData[field] = (0, XUtilsConversions_1.stringFromUI)(newValue);
@@ -31,7 +31,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
31
31
  Object.defineProperty(exports, "__esModule", { value: true });
32
32
  exports.XInputTextarea = void 0;
33
33
  var react_1 = __importDefault(require("react"));
34
- var XUtilsConversions_1 = require("./XUtilsConversions");
34
+ var XUtilsConversions_1 = require("../serverApi/XUtilsConversions");
35
35
  var XInput_1 = require("./XInput");
36
36
  var inputtextarea_1 = require("primereact/inputtextarea");
37
37
  var XUtils_1 = require("./XUtils");
@@ -4,7 +4,15 @@ import { ColumnBodyOptions, ColumnFilterElementTemplateOptions } from 'primereac
4
4
  import { XSearchBrowseParams } from "./XSearchBrowseParams";
5
5
  import { XAggregateType, XCustomFilter } from "../serverApi/FindParam";
6
6
  import { XOnSaveOrCancelProp } from "./XFormBase";
7
+ import { IconType } from "primereact/utils";
8
+ import { ButtonProps } from "primereact/button";
7
9
  export type XBetweenFilterProp = "row" | "column" | undefined;
10
+ export interface XAppButtonForRow {
11
+ key?: string;
12
+ icon?: IconType<ButtonProps>;
13
+ label: string;
14
+ onClick: (selectedRow: any) => void;
15
+ }
8
16
  export interface XEditModeHandlers {
9
17
  onStart: () => void;
10
18
  onSave: () => void;
@@ -38,10 +46,12 @@ export interface XLazyDataTableProps {
38
46
  onEdit?: (selectedRow: any) => void;
39
47
  removeRow?: ((selectedRow: any) => Promise<boolean>) | boolean;
40
48
  onRemoveRow?: XOnSaveOrCancelProp;
49
+ appButtonsForRow?: XAppButtonForRow[];
41
50
  appButtons?: any;
42
51
  filters?: DataTableFilterMeta;
43
52
  customFilter?: XCustomFilter;
44
53
  sortField?: string;
54
+ fullTextSearch: boolean | string[];
45
55
  searchBrowseParams?: XSearchBrowseParams;
46
56
  width?: string;
47
57
  dataLoadedState?: [boolean, React.Dispatch<React.SetStateAction<boolean>>];
@@ -56,6 +66,7 @@ export declare const XLazyDataTable: {
56
66
  paginator: boolean;
57
67
  rows: number;
58
68
  filterDisplay: string;
69
+ fullTextSearch: boolean;
59
70
  scrollable: boolean;
60
71
  scrollWidth: string;
61
72
  scrollHeight: string;
@@ -105,7 +105,7 @@ var XButton_1 = require("./XButton");
105
105
  var XUtils_1 = require("./XUtils");
106
106
  var XUtilsMetadata_1 = require("./XUtilsMetadata");
107
107
  var XDropdownDTFilter_1 = require("./XDropdownDTFilter");
108
- var XUtilsConversions_1 = require("./XUtilsConversions");
108
+ var XUtilsConversions_1 = require("../serverApi/XUtilsConversions");
109
109
  var FindParam_1 = require("../serverApi/FindParam");
110
110
  var XButtonIconSmall_1 = require("./XButtonIconSmall");
111
111
  var tristatecheckbox_1 = require("primereact/tristatecheckbox");
@@ -115,10 +115,12 @@ var api_1 = require("primereact/api");
115
115
  var XCalendar_1 = require("./XCalendar");
116
116
  var XInputDecimalBase_1 = require("./XInputDecimalBase");
117
117
  var XLocale_1 = require("./XLocale");
118
+ var XFtsInput_1 = require("./XFtsInput");
119
+ var XUtilsMetadataCommon_1 = require("../serverApi/XUtilsMetadataCommon");
118
120
  var XLazyDataTable = function (props) {
119
121
  var _a;
120
122
  // must be here, is used in createInitFilters()
121
- var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(props.entity);
123
+ var xEntity = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(props.entity);
122
124
  var createAggregateItems = function () {
123
125
  var e_1, _a;
124
126
  var aggregateItems = [];
@@ -151,7 +153,7 @@ var XLazyDataTable = function (props) {
151
153
  var column = columns_2_1.value;
152
154
  var xLazyColumn = column; // nevedel som to krajsie...
153
155
  var field = xLazyColumn.props.field;
154
- var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, field);
156
+ var xField = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXFieldByPath(xEntity, field);
155
157
  // TODO column.props.dropdownInFilter - pre "menu" by bolo fajn mat zoznam "enumov"
156
158
  var filterMatchMode = getFilterMatchMode(xField);
157
159
  initFilters[field] = createFilterItem(props.filterDisplay, { value: null, matchMode: filterMatchMode });
@@ -169,7 +171,7 @@ var XLazyDataTable = function (props) {
169
171
  var getFilterMatchMode = function (xField) {
170
172
  var filterMatchMode;
171
173
  if (xField.type === "string") {
172
- filterMatchMode = api_1.FilterMatchMode.STARTS_WITH;
174
+ filterMatchMode = api_1.FilterMatchMode.CONTAINS;
173
175
  }
174
176
  // zatial vsetky ostatne EQUALS
175
177
  else if (xField.type === "decimal" || xField.type === "number" || xField.type === "date" || xField.type === "datetime" || xField.type === "boolean") {
@@ -196,6 +198,9 @@ var XLazyDataTable = function (props) {
196
198
  }
197
199
  return filterItem;
198
200
  };
201
+ var createInitFtsInputValue = function () {
202
+ return { value: null, matchMode: "contains" };
203
+ };
199
204
  // premenne platne pre cely component (obdoba member premennych v class-e)
200
205
  var dataTableEl = (0, react_1.useRef)(null);
201
206
  var customFilterItems = XUtils_1.XUtils.createCustomFilterItems(props.customFilter);
@@ -219,12 +224,15 @@ var XLazyDataTable = function (props) {
219
224
  }
220
225
  }
221
226
  var _f = __read((0, react_1.useState)(filtersInit), 2), filters = _f[0], setFilters = _f[1]; // filtrovanie na "controlled manner" (moze sa sem nainicializovat nejaka hodnota)
222
- var _g = __read((0, react_1.useState)(props.sortField ? [{ field: props.sortField, order: 1 }] : []), 2), multiSortMeta = _g[0], setMultiSortMeta = _g[1];
223
- var _h = __read((0, react_1.useState)(null), 2), selectedRow = _h[0], setSelectedRow = _h[1];
224
- var _j = __read((_a = props.dataLoadedState) !== null && _a !== void 0 ? _a : (0, react_1.useState)(false), 2), dataLoaded = _j[0], setDataLoaded = _j[1]; // priznak kde si zapiseme, ci uz sme nacitali data
225
- var _k = __read((0, react_1.useState)(false), 2), exportRowsDialogOpened = _k[0], setExportRowsDialogOpened = _k[1];
226
- var _l = __read((0, react_1.useState)(), 2), exportRowsDialogRowCount = _l[0], setExportRowsDialogRowCount = _l[1]; // param pre dialog
227
- var _m = __read((0, react_1.useState)(filtersInit), 2), filtersAfterFiltering = _m[0], setFiltersAfterFiltering = _m[1]; // sem si odkladame stav filtra po kliknuti na button Filter (chceme exportovat presne to co vidno vyfiltrovane)
227
+ var initFtsInputValue = props.fullTextSearch ? createInitFtsInputValue() : undefined;
228
+ var _g = __read((0, react_1.useState)(initFtsInputValue), 2), ftsInputValue = _g[0], setFtsInputValue = _g[1];
229
+ var _h = __read((0, react_1.useState)(props.sortField ? [{ field: props.sortField, order: 1 }] : []), 2), multiSortMeta = _h[0], setMultiSortMeta = _h[1];
230
+ var _j = __read((0, react_1.useState)(null), 2), selectedRow = _j[0], setSelectedRow = _j[1];
231
+ var _k = __read((_a = props.dataLoadedState) !== null && _a !== void 0 ? _a : (0, react_1.useState)(false), 2), dataLoaded = _k[0], setDataLoaded = _k[1]; // priznak kde si zapiseme, ci uz sme nacitali data
232
+ var _l = __read((0, react_1.useState)(false), 2), exportRowsDialogOpened = _l[0], setExportRowsDialogOpened = _l[1];
233
+ var _m = __read((0, react_1.useState)(), 2), exportRowsDialogRowCount = _m[0], setExportRowsDialogRowCount = _m[1]; // param pre dialog
234
+ var _o = __read((0, react_1.useState)(filtersInit), 2), filtersAfterFiltering = _o[0], setFiltersAfterFiltering = _o[1]; // sem si odkladame stav filtra po kliknuti na button Filter (chceme exportovat presne to co vidno vyfiltrovane)
235
+ var _p = __read((0, react_1.useState)(initFtsInputValue), 2), ftsInputValueAfterFiltering = _p[0], setFtsInputValueAfterFiltering = _p[1]; // tak isto ako filtersAfterFiltering
228
236
  // parameter [] zabezpeci ze sa metoda zavola len po prvom renderingu (a nie po kazdej zmene stavu (zavolani setNieco()))
229
237
  (0, react_1.useEffect)(function () {
230
238
  // jednoduchy sposob - nepouzivame parameter props.displayed a priznak dataLoaded
@@ -252,12 +260,12 @@ var XLazyDataTable = function (props) {
252
260
  }
253
261
  }); // eslint-disable-line react-hooks/exhaustive-deps
254
262
  // TODO - preco je to tu? presunut dole ak sa da...
255
- var dataKey = props.dataKey !== undefined ? props.dataKey : XUtilsMetadata_1.XUtilsMetadata.getXEntity(props.entity).idField;
263
+ var dataKey = props.dataKey !== undefined ? props.dataKey : XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(props.entity).idField;
256
264
  var onPage = function (event) { return __awaiter(void 0, void 0, void 0, function () {
257
265
  return __generator(this, function (_a) {
258
266
  //console.log("zavolany onPage");
259
267
  setFirst(event.first);
260
- loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: event.first, rows: rows, filters: filters, customFilterItems: customFilterItems, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
268
+ loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: event.first, rows: rows, filters: filters, fullTextSearch: createXFullTextSearch(ftsInputValue), customFilterItems: customFilterItems, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
261
269
  return [2 /*return*/];
262
270
  });
263
271
  }); };
@@ -271,7 +279,7 @@ var XLazyDataTable = function (props) {
271
279
  //console.log("zavolany onSort - this.state.multiSortMeta = " + JSON.stringify(multiSortMeta));
272
280
  //console.log("zavolany onSort - event.multiSortMeta = " + JSON.stringify(event.multiSortMeta));
273
281
  setMultiSortMeta(event.multiSortMeta);
274
- loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: first, rows: rows, filters: filters, customFilterItems: customFilterItems, multiSortMeta: event.multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
282
+ loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: first, rows: rows, filters: filters, fullTextSearch: createXFullTextSearch(ftsInputValue), customFilterItems: customFilterItems, multiSortMeta: event.multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
275
283
  };
276
284
  var onClickFilter = function () {
277
285
  //console.log("zavolany onClickFilter");
@@ -281,9 +289,12 @@ var XLazyDataTable = function (props) {
281
289
  // najjednoduchsi sposob - pomeni aj pripadne nastavene matchMode hodnoty
282
290
  var filtersInit = createInitFilters();
283
291
  setFilters(filtersInit);
292
+ if (ftsInputValue) {
293
+ setFtsInputValue(createInitFtsInputValue());
294
+ }
284
295
  };
285
296
  var loadData = function () {
286
- loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: first, rows: rows, filters: filters, customFilterItems: customFilterItems, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
297
+ loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: first, rows: rows, filters: filters, fullTextSearch: createXFullTextSearch(ftsInputValue), customFilterItems: customFilterItems, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
287
298
  };
288
299
  var loadDataBase = function (findParam) { return __awaiter(void 0, void 0, void 0, function () {
289
300
  var findResult;
@@ -299,6 +310,7 @@ var XLazyDataTable = function (props) {
299
310
  setLoading(false);
300
311
  // odlozime si filter hodnoty pre pripadny export - deep cloning vyzera ze netreba
301
312
  setFiltersAfterFiltering(filters);
313
+ setFtsInputValueAfterFiltering(ftsInputValue ? __assign({}, ftsInputValue) : undefined);
302
314
  return [2 /*return*/];
303
315
  }
304
316
  });
@@ -315,6 +327,17 @@ var XLazyDataTable = function (props) {
315
327
  }
316
328
  });
317
329
  }); };
330
+ var createXFullTextSearch = function (ftsInputValue) {
331
+ var xFullTextSearch = undefined; // default
332
+ if (ftsInputValue && ftsInputValue.value !== null) {
333
+ xFullTextSearch = {
334
+ fields: Array.isArray(props.fullTextSearch) ? props.fullTextSearch : undefined,
335
+ value: ftsInputValue.value,
336
+ matchMode: ftsInputValue.matchMode
337
+ };
338
+ }
339
+ return xFullTextSearch;
340
+ };
318
341
  var getFields = function () {
319
342
  // krasne zobrazi cely objekt!
320
343
  //console.log(dataTableEl.current);
@@ -446,12 +469,20 @@ var XLazyDataTable = function (props) {
446
469
  }
447
470
  });
448
471
  }); };
472
+ var onClickAppButtonForRow = function (onClick) {
473
+ if (selectedRow !== null) {
474
+ onClick(selectedRow);
475
+ }
476
+ else {
477
+ alert((0, XLocale_1.xLocaleOption)('pleaseSelectRow'));
478
+ }
479
+ };
449
480
  var onClickExport = function () { return __awaiter(void 0, void 0, void 0, function () {
450
481
  var findParam, findResult;
451
482
  return __generator(this, function (_a) {
452
483
  switch (_a.label) {
453
484
  case 0:
454
- findParam = { resultType: FindParam_1.ResultType.OnlyRowCount, first: first, rows: rows, filters: filtersAfterFiltering, customFilterItems: customFilterItems, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems };
485
+ findParam = { resultType: FindParam_1.ResultType.OnlyRowCount, first: first, rows: rows, filters: filtersAfterFiltering, fullTextSearch: createXFullTextSearch(ftsInputValueAfterFiltering), customFilterItems: customFilterItems, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems };
455
486
  return [4 /*yield*/, findByFilter(findParam)];
456
487
  case 1:
457
488
  findResult = _a.sent();
@@ -463,7 +494,7 @@ var XLazyDataTable = function (props) {
463
494
  });
464
495
  }); };
465
496
  var createExportParams = function () {
466
- var queryParam = { filters: filtersAfterFiltering, customFilterItems: customFilterItems, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields() };
497
+ var queryParam = { filters: filtersAfterFiltering, fullTextSearch: createXFullTextSearch(ftsInputValueAfterFiltering), customFilterItems: customFilterItems, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields() };
467
498
  return {
468
499
  path: "x-lazy-data-table-export",
469
500
  queryParam: queryParam,
@@ -572,47 +603,15 @@ var XLazyDataTable = function (props) {
572
603
  return betweenFilter;
573
604
  };
574
605
  var valueAsUI = function (value, xField) {
575
- var valueResult = '';
576
- if (xField.type === "decimal") {
577
- // tuto zatial hack, mal by vzdy prist number
578
- var numberValue = null;
579
- if (typeof value === 'string') {
580
- numberValue = parseFloat(value);
581
- }
582
- else if (typeof value === 'number') {
583
- numberValue = value;
584
- }
585
- valueResult = (0, XUtilsConversions_1.numberAsUI)(numberValue, xField.scale);
586
- }
587
- else if (xField.type === "date") {
588
- // tuto zatial hack, mal by prist Date
589
- var dateValue = null;
590
- if (typeof value === 'string') {
591
- dateValue = new Date(value);
592
- }
593
- else if (typeof value === 'object' && value instanceof Date) {
594
- dateValue = value;
595
- }
596
- valueResult = (0, XUtilsConversions_1.dateAsUI)(dateValue);
597
- }
598
- else if (xField.type === "datetime") {
599
- // tuto zatial hack, mal by prist Date
600
- var dateValue = null;
601
- if (typeof value === 'string') {
602
- dateValue = new Date(value);
603
- }
604
- else if (typeof value === 'object' && value instanceof Date) {
605
- dateValue = value;
606
- }
607
- valueResult = (0, XUtilsConversions_1.datetimeAsUI)(dateValue);
608
- }
609
- else if (xField.type === "boolean") {
606
+ var valueResult;
607
+ if (xField.type === "boolean") {
610
608
  // TODO - efektivnejsie by bolo renderovat len prislusne ikonky
611
609
  valueResult = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: value, disabled: true });
612
610
  }
613
611
  else {
614
- // string a ine typy
615
- valueResult = value;
612
+ // ine typy - convertValue vrati string
613
+ // mame zapnutu konverziu fromModel, lebo z json-u nam prichadzaju objekty typu string (napr. pri datumoch)
614
+ valueResult = (0, XUtilsConversions_1.convertValue)(xField, value, true, XUtilsConversions_1.AsUIType.Form);
616
615
  }
617
616
  return valueResult;
618
617
  };
@@ -726,7 +725,7 @@ var XLazyDataTable = function (props) {
726
725
  // priklad je na https://soshace.com/building-react-components-using-children-props-and-context-api/
727
726
  // (vzdy musime robit manipulacie so stlpcom, lebo potrebujeme pridat filter={true} sortable={true}
728
727
  var childColumn = child; // nevedel som to krajsie...
729
- var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, childColumn.props.field);
728
+ var xField = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXFieldByPath(xEntity, childColumn.props.field);
730
729
  // *********** header ***********
731
730
  var headerLabel = childColumn.props.header !== undefined ? childColumn.props.header : childColumn.props.field;
732
731
  var header;
@@ -868,8 +867,10 @@ var XLazyDataTable = function (props) {
868
867
  }
869
868
  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 });
870
869
  });
870
+ // align-items-center centruje vertikalne (posuva smerom doulu do stredu)
871
871
  return (react_1.default.createElement("div", null,
872
- react_1.default.createElement("div", { className: "flex justify-content-center" },
872
+ react_1.default.createElement("div", { className: "flex justify-content-center align-items-center" },
873
+ ftsInputValue ? react_1.default.createElement(XFtsInput_1.XFtsInput, { value: ftsInputValue, onChange: function (value) { return setFtsInputValue(value); } }) : null,
873
874
  react_1.default.createElement(XButton_1.XButton, { key: "filter", label: (0, XLocale_1.xLocaleOption)('filter'), onClick: onClickFilter }),
874
875
  react_1.default.createElement(XButton_1.XButton, { key: "clearFilter", label: (0, XLocale_1.xLocaleOption)('clearFilter'), onClick: onClickClearFilter })),
875
876
  react_1.default.createElement("div", { className: "flex justify-content-center" },
@@ -879,6 +880,7 @@ var XLazyDataTable = function (props) {
879
880
  props.onEdit !== undefined && props.searchBrowseParams === undefined ? react_1.default.createElement(XButton_1.XButton, { key: "editRow", icon: "pi pi-pencil", label: (0, XLocale_1.xLocaleOption)('editRow'), onClick: onClickEdit }) : null,
880
881
  props.removeRow !== undefined && props.removeRow !== false && props.searchBrowseParams === undefined ? react_1.default.createElement(XButton_1.XButton, { key: "removeRow", icon: "pi pi-times", label: (0, XLocale_1.xLocaleOption)('removeRow'), onClick: onClickRemoveRow }) : null,
881
882
  exportRows ? react_1.default.createElement(XButton_1.XButton, { key: "exportRows", icon: "pi pi-file-export", label: (0, XLocale_1.xLocaleOption)('exportRows'), onClick: onClickExport }) : null,
883
+ 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,
882
884
  props.appButtons,
883
885
  props.searchBrowseParams !== undefined ? react_1.default.createElement(XButton_1.XButton, { key: "choose", label: (0, XLocale_1.xLocaleOption)('chooseRow'), onClick: onClickChoose }) : null,
884
886
  exportRows ? react_1.default.createElement(XExportRowsDialog_1.XExportRowsDialog, { key: "exportRowsDialog", dialogOpened: exportRowsDialogOpened, hideDialog: function () { return setExportRowsDialogOpened(false); }, rowCount: exportRowsDialogRowCount, exportParams: createExportParams }) : null)));
@@ -888,6 +890,7 @@ exports.XLazyDataTable.defaultProps = {
888
890
  paginator: true,
889
891
  rows: 10,
890
892
  filterDisplay: "row",
893
+ fullTextSearch: true,
891
894
  scrollable: true,
892
895
  scrollWidth: 'viewport',
893
896
  scrollHeight: 'viewport',
@@ -71,13 +71,13 @@ var inputtext_1 = require("primereact/inputtext");
71
71
  var button_1 = require("primereact/button");
72
72
  var XUtils_1 = require("./XUtils");
73
73
  var dialog_1 = require("primereact/dialog");
74
- var XUtilsMetadata_1 = require("./XUtilsMetadata");
75
74
  var XFormComponent_1 = require("./XFormComponent");
75
+ var XUtilsMetadataCommon_1 = require("../serverApi/XUtilsMetadataCommon");
76
76
  var XSearchButton = /** @class */ (function (_super) {
77
77
  __extends(XSearchButton, _super);
78
78
  function XSearchButton(props) {
79
79
  var _this = _super.call(this, props) || this;
80
- _this.xAssoc = XUtilsMetadata_1.XUtilsMetadata.getXAssocToOne(XUtilsMetadata_1.XUtilsMetadata.getXEntity(props.form.getEntity()), props.assocField);
80
+ _this.xAssoc = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXAssocToOne(XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(props.form.getEntity()), props.assocField);
81
81
  _this.inputTextRef = react_1.default.createRef();
82
82
  // POVODNY KOD
83
83
  //this.overlayPanelEl = React.createRef();
@@ -99,8 +99,8 @@ var XSearchButton = /** @class */ (function (_super) {
99
99
  var _this = this;
100
100
  var _a;
101
101
  var props = this.props;
102
- var xEntityAssoc = XUtilsMetadata_1.XUtilsMetadata.getXEntity(this.xAssoc.entityName);
103
- var xDisplayField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntityAssoc, props.displayField);
102
+ var xEntityAssoc = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(this.xAssoc.entityName);
103
+ var xDisplayField = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXFieldByPath(xEntityAssoc, props.displayField);
104
104
  // tu boli hook-y kedysi...
105
105
  var inputChanged = this.state.inputChanged;
106
106
  var setInputChanged = function (inputChanged) { _this.setState({ inputChanged: inputChanged }); };
@@ -81,7 +81,7 @@ var XUtils_1 = require("./XUtils");
81
81
  var inputtext_1 = require("primereact/inputtext");
82
82
  var button_1 = require("primereact/button");
83
83
  var dialog_1 = require("primereact/dialog");
84
- var XUtilsMetadata_1 = require("./XUtilsMetadata");
84
+ var XUtilsMetadataCommon_1 = require("../serverApi/XUtilsMetadataCommon");
85
85
  var XSearchButtonDT = function (props) {
86
86
  var inputTextRef = (0, react_1.useRef)(null);
87
87
  var _a = __read((0, react_1.useState)(false), 2), inputChanged = _a[0], setInputChanged = _a[1]; // priznak, ci uzivatel typovanim zmenil hodnotu v inpute
@@ -147,8 +147,8 @@ var XSearchButtonDT = function (props) {
147
147
  }
148
148
  else {
149
149
  if (props.assocForm !== undefined) {
150
- var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(props.entity);
151
- var xEntityAssoc = XUtilsMetadata_1.XUtilsMetadata.getXEntityForAssocToOne(xEntity, props.assocField);
150
+ var xEntity = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(props.entity);
151
+ var xEntityAssoc = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntityForAssocToOne(xEntity, props.assocField);
152
152
  if (props.rowData !== null) {
153
153
  var assocObject = props.rowData[props.assocField];
154
154
  // OTAZKA - ziskavat id priamo z root objektu? potom ho vsak treba do root objektu pridat
@@ -81,14 +81,14 @@ var inputtext_1 = require("primereact/inputtext");
81
81
  var button_1 = require("primereact/button");
82
82
  var XUtils_1 = require("./XUtils");
83
83
  var dialog_1 = require("primereact/dialog");
84
- var XUtilsMetadata_1 = require("./XUtilsMetadata");
84
+ var XUtilsMetadataCommon_1 = require("../serverApi/XUtilsMetadataCommon");
85
85
  var XSearchButtonOld = function (props) {
86
86
  var _a, _b, _c;
87
87
  props.form.addField(props.assocField + '.' + props.displayField);
88
- var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(props.form.getEntity());
89
- var xAssoc = XUtilsMetadata_1.XUtilsMetadata.getXAssocToOne(xEntity, props.assocField);
90
- var xEntityAssoc = XUtilsMetadata_1.XUtilsMetadata.getXEntity(xAssoc.entityName);
91
- var xDisplayField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntityAssoc, props.displayField);
88
+ var xEntity = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(props.form.getEntity());
89
+ var xAssoc = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXAssocToOne(xEntity, props.assocField);
90
+ var xEntityAssoc = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(xAssoc.entityName);
91
+ var xDisplayField = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXFieldByPath(xEntityAssoc, props.displayField);
92
92
  // POVODNY KOD
93
93
  //const overlayPanelEl = useRef<any>(null);
94
94
  var inputTextEl = (0, react_1.useRef)(null);
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.XToOneAssocButton = void 0;
7
7
  var react_1 = __importDefault(require("react"));
8
8
  var button_1 = require("primereact/button");
9
- var XUtilsMetadata_1 = require("./XUtilsMetadata");
10
9
  var XUtils_1 = require("./XUtils");
10
+ var XUtilsMetadataCommon_1 = require("../serverApi/XUtilsMetadataCommon");
11
11
  var XToOneAssocButton = function (props) {
12
12
  // mozno lepsie by bolo sem dat xEntityAssoc.idField ale postaci aj *FAKE*
13
13
  props.form.addField(props.assocField + '.*FAKE*');
@@ -15,8 +15,8 @@ var XToOneAssocButton = function (props) {
15
15
  var object = props.form.state.object;
16
16
  var assocObject = object !== null ? object[props.assocField] : null;
17
17
  var onClickButton = function (e) {
18
- var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(props.form.getEntity());
19
- var xEntityAssoc = XUtilsMetadata_1.XUtilsMetadata.getXEntityForAssocToOne(xEntity, props.assocField);
18
+ var xEntity = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(props.form.getEntity());
19
+ var xEntityAssoc = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntityForAssocToOne(xEntity, props.assocField);
20
20
  // OTAZKA - ziskavat id priamo z root objektu? potom ho vsak treba do root objektu pridat
21
21
  var id = assocObject !== null ? assocObject[xEntityAssoc.idField] : null;
22
22
  // klonovanim elementu pridame atribut id
@@ -89,6 +89,7 @@ var XUtilsCommon_1 = require("../serverApi/XUtilsCommon");
89
89
  var ExportImportParam_1 = require("../serverApi/ExportImportParam");
90
90
  var XResponseError_1 = require("./XResponseError");
91
91
  var FindParam_1 = require("../serverApi/FindParam");
92
+ var XUtilsMetadataCommon_1 = require("../serverApi/XUtilsMetadataCommon");
92
93
  var OperationType;
93
94
  (function (OperationType) {
94
95
  OperationType[OperationType["None"] = 0] = "None";
@@ -454,7 +455,7 @@ var XUtils = /** @class */ (function () {
454
455
  return __generator(this, function (_a) {
455
456
  switch (_a.label) {
456
457
  case 0:
457
- xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(entity);
458
+ xEntity = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(entity);
458
459
  id = row[xEntity.idField];
459
460
  return [4 /*yield*/, XUtils.post('removeRow', { entity: entity, id: id })];
460
461
  case 1:
@@ -1,25 +1,10 @@
1
- import { XAssoc, XEntity, XField, XRelationType } from "../serverApi/XEntityMetadata";
1
+ import { XField } from "../serverApi/XEntityMetadata";
2
2
  import { XBrowseMeta } from "../serverApi/XBrowseMetadata";
3
3
  import { XBetweenFilterProp } from "./XLazyDataTable";
4
4
  export declare class XUtilsMetadata {
5
- private static xEntityMap;
6
5
  private static xBrowseMetaMap;
7
6
  static fetchAndSetXEntityMap(): Promise<any>;
8
7
  static fetchAndSetXBrowseMetaMap(): Promise<any>;
9
- static getXEntity(entity: string): XEntity;
10
- static getXField(xEntity: XEntity, field: string): XField;
11
- static getXFieldByPath(xEntity: XEntity, path: string): XField;
12
- static getXFieldByPathStr(entity: string, path: string): XField;
13
- static getXAssocByPath(xEntity: XEntity, path: string): XAssoc;
14
- static getLastXAssocByPath(xEntity: XEntity, path: string): XAssoc;
15
- static getXAssocToOne(xEntity: XEntity, assocField: string): XAssoc;
16
- static getXAssocToMany(xEntity: XEntity, assocField: string): XAssoc;
17
- static getXAssocToOneByAssocEntity(xEntity: XEntity, assocEntityName: string): XAssoc;
18
- static getXAssocToManyByAssocEntity(xEntity: XEntity, assocEntityName: string): XAssoc;
19
- static getXEntityForAssocToOne(xEntity: XEntity, assocField: string): XEntity;
20
- static getXEntityForAssocToMany(xEntity: XEntity, assocField: string): XEntity;
21
- static getXFieldList(xEntity: XEntity): XField[];
22
- static getXAssocList(xEntity: XEntity, relationTypeList?: XRelationType[]): XAssoc[];
23
8
  static getParamsForInputNumber(xField: XField): {
24
9
  useGrouping: boolean;
25
10
  fractionDigits?: number;
@@ -33,7 +18,4 @@ export declare class XUtilsMetadata {
33
18
  static getXBrowseMeta(entity: string, browseId?: string): XBrowseMeta;
34
19
  static setXBrowseMeta(entity: string, browseId: string | undefined, xBrowseMeta: XBrowseMeta): void;
35
20
  static getXBrowseFormMetaKey(entity: string, browseId?: string): string;
36
- private static getXAssoc;
37
- private static getXAssocByAssocEntity;
38
- private static getXEntityForAssoc;
39
21
  }