@michalrakus/x-react-web-lib 1.28.0 → 1.30.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/lib/components/XAutoCompleteBase.js +8 -12
- package/lib/components/XEditBrowse.js +2 -1
- package/lib/components/XFieldSet/XFieldSetBase.d.ts +79 -0
- package/lib/components/XFieldSet/XFieldSetBase.js +135 -0
- package/lib/components/XFormBase.js +1 -1
- package/lib/components/XFormDataTable2.d.ts +5 -2
- package/lib/components/XFormDataTable2.js +14 -7
- package/lib/components/XLazyDataTable/XLazyDataTable.d.ts +3 -2
- package/lib/components/XLazyDataTable/XLazyDataTable.js +121 -40
- package/lib/components/XSearchButton.js +2 -1
- package/lib/components/XUtils.d.ts +1 -25
- package/lib/components/XUtils.js +5 -162
- package/lib/components/locale/x-en.json +6 -1
- package/lib/serverApi/FindParam.d.ts +4 -4
- package/lib/serverApi/FindParam.js +8 -8
- package/lib/serverApi/XUtilsCommon.d.ts +29 -0
- package/lib/serverApi/XUtilsCommon.js +165 -0
- package/lib/serverApi/XUtilsConversions.js +6 -0
- package/package.json +1 -1
|
@@ -131,6 +131,7 @@ var XMultilineSwitch_1 = require("./XMultilineSwitch");
|
|
|
131
131
|
var XMultilineRenderer_1 = require("./XMultilineRenderer");
|
|
132
132
|
var XHtmlRenderer_1 = require("./XHtmlRenderer");
|
|
133
133
|
var XOcfDropdown_1 = require("./XOcfDropdown");
|
|
134
|
+
var XFieldSetBase_1 = require("../XFieldSet/XFieldSetBase");
|
|
134
135
|
var XLazyDataTable = function (props) {
|
|
135
136
|
var _a;
|
|
136
137
|
// must be here, is used in createInitFilters()
|
|
@@ -144,7 +145,7 @@ var XLazyDataTable = function (props) {
|
|
|
144
145
|
var column = columns_1_1.value;
|
|
145
146
|
var xLazyColumn = column; // nevedel som to krajsie...
|
|
146
147
|
if (xLazyColumn.props.aggregateType) {
|
|
147
|
-
aggregateItems.push({ field: xLazyColumn.props.field,
|
|
148
|
+
aggregateItems.push({ field: xLazyColumn.props.field, aggregateFunction: xLazyColumn.props.aggregateType });
|
|
148
149
|
}
|
|
149
150
|
}
|
|
150
151
|
}
|
|
@@ -184,7 +185,7 @@ var XLazyDataTable = function (props) {
|
|
|
184
185
|
};
|
|
185
186
|
var getFilterMatchMode = function (xField) {
|
|
186
187
|
var filterMatchMode;
|
|
187
|
-
if (xField.type === "string") {
|
|
188
|
+
if (xField.type === "string" || xField.type === "jsonb") {
|
|
188
189
|
filterMatchMode = api_1.FilterMatchMode.CONTAINS;
|
|
189
190
|
}
|
|
190
191
|
// zatial vsetky ostatne EQUALS
|
|
@@ -217,12 +218,16 @@ var XLazyDataTable = function (props) {
|
|
|
217
218
|
};
|
|
218
219
|
// premenne platne pre cely component (obdoba member premennych v class-e)
|
|
219
220
|
var dataTableEl = (0, react_1.useRef)(null);
|
|
220
|
-
var customFilterItems =
|
|
221
|
+
var customFilterItems = XUtilsCommon_1.XUtilsCommon.createCustomFilterItems(props.customFilter);
|
|
221
222
|
var aggregateItems = createAggregateItems();
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
var
|
|
223
|
+
// ak mame fieldSet stlpce (stlpce ktore maju zadany fieldSetId a zobrazuju hodnoty podla fieldSet-u),
|
|
224
|
+
// tak sem nacitame mapy umoznujuce ziskanie labelov zakliknutych field-ov
|
|
225
|
+
// poznamka: uz by sa zislo mat vytvorene objekty (instancie) pre stlpce a do nich zapisovat pripadny XFieldSetMap, filter (teraz je vo "filters")
|
|
226
|
+
var _b = __read((0, react_1.useState)({}), 2), xFieldSetMaps = _b[0], setXFieldSetMaps = _b[1];
|
|
227
|
+
var _c = __read((0, react_1.useState)({ rowList: [], totalRecords: 0, aggregateValues: [] }), 2), value = _c[0], setValue = _c[1];
|
|
228
|
+
var _d = __read((0, react_1.useState)(false), 2), loading = _d[0], setLoading = _d[1];
|
|
229
|
+
var _e = __read((0, react_1.useState)(0), 2), first = _e[0], setFirst = _e[1];
|
|
230
|
+
var _f = __read((0, react_1.useState)(props.paginator ? props.rows : undefined), 2), rows = _f[0], setRows = _f[1];
|
|
226
231
|
var filtersInit = createInitFilters();
|
|
227
232
|
if (props.filters) {
|
|
228
233
|
filtersInit = __assign(__assign({}, filtersInit), props.filters); // items from props.filters will replace existing items in filtersInit
|
|
@@ -234,22 +239,22 @@ var XLazyDataTable = function (props) {
|
|
|
234
239
|
}
|
|
235
240
|
// ak mame props.searchBrowseParams.customFilterFunction, pridame filter
|
|
236
241
|
if (props.searchBrowseParams.customFilter) {
|
|
237
|
-
customFilterItems =
|
|
242
|
+
customFilterItems = XUtilsCommon_1.XUtilsCommon.filterAnd(customFilterItems, XUtils_1.XUtils.evalFilter(props.searchBrowseParams.customFilter));
|
|
238
243
|
}
|
|
239
244
|
}
|
|
240
|
-
var
|
|
245
|
+
var _g = __read((0, react_1.useState)(filtersInit), 2), filters = _g[0], setFilters = _g[1]; // filtrovanie na "controlled manner" (moze sa sem nainicializovat nejaka hodnota)
|
|
241
246
|
var initFtsInputValue = props.fullTextSearch ? createInitFtsInputValue() : undefined;
|
|
242
|
-
var
|
|
243
|
-
var
|
|
244
|
-
var
|
|
245
|
-
var
|
|
246
|
-
var
|
|
247
|
-
var
|
|
248
|
-
var
|
|
247
|
+
var _h = __read((0, react_1.useState)(initFtsInputValue), 2), ftsInputValue = _h[0], setFtsInputValue = _h[1];
|
|
248
|
+
var _j = __read((0, react_1.useState)(undefined), 2), optionalCustomFilter = _j[0], setOptionalCustomFilter = _j[1];
|
|
249
|
+
var _k = __read((0, react_1.useState)(props.multilineSwitchInitValue), 2), multilineSwitchValue = _k[0], setMultilineSwitchValue = _k[1];
|
|
250
|
+
var _l = __read((0, react_1.useState)(XUtilsCommon_1.XUtilsCommon.createMultiSortMeta(props.sortField)), 2), multiSortMeta = _l[0], setMultiSortMeta = _l[1];
|
|
251
|
+
var _m = __read((0, react_1.useState)(null), 2), selectedRow = _m[0], setSelectedRow = _m[1];
|
|
252
|
+
var _o = __read((_a = props.dataLoadedState) !== null && _a !== void 0 ? _a : (0, react_1.useState)(false), 2), dataLoaded = _o[0], setDataLoaded = _o[1]; // priznak kde si zapiseme, ci uz sme nacitali data
|
|
253
|
+
var _p = __read((0, react_1.useState)({ dialogOpened: false }), 2), exportRowsDialogState = _p[0], setExportRowsDialogState = _p[1];
|
|
249
254
|
//const [exportRowsDialogRowCount, setExportRowsDialogRowCount] = useState<number>(); // param pre dialog
|
|
250
|
-
var
|
|
251
|
-
var
|
|
252
|
-
var
|
|
255
|
+
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)
|
|
256
|
+
var _r = __read((0, react_1.useState)(initFtsInputValue), 2), ftsInputValueAfterFiltering = _r[0], setFtsInputValueAfterFiltering = _r[1]; // tak isto ako filtersAfterFiltering
|
|
257
|
+
var _s = __read((0, react_1.useState)(undefined), 2), optionalCustomFilterAfterFiltering = _s[0], setOptionalCustomFilterAfterFiltering = _s[1]; // tak isto ako filtersAfterFiltering
|
|
253
258
|
// parameter [] zabezpeci ze sa metoda zavola len po prvom renderingu (a nie po kazdej zmene stavu (zavolani setNieco()))
|
|
254
259
|
(0, react_1.useEffect)(function () {
|
|
255
260
|
// jednoduchy sposob - nepouzivame parameter props.displayed a priznak dataLoaded
|
|
@@ -318,9 +323,22 @@ var XLazyDataTable = function (props) {
|
|
|
318
323
|
setOptionalCustomFilter(undefined);
|
|
319
324
|
}
|
|
320
325
|
};
|
|
321
|
-
var loadData = function () {
|
|
322
|
-
|
|
323
|
-
|
|
326
|
+
var loadData = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
327
|
+
return __generator(this, function (_a) {
|
|
328
|
+
switch (_a.label) {
|
|
329
|
+
case 0:
|
|
330
|
+
// pre poriadok zaserializujeme obidve operacie (aj ked teoreticky by to malo fungovat aj bez serializovania)
|
|
331
|
+
return [4 /*yield*/, loadXFieldSetMaps()];
|
|
332
|
+
case 1:
|
|
333
|
+
// pre poriadok zaserializujeme obidve operacie (aj ked teoreticky by to malo fungovat aj bez serializovania)
|
|
334
|
+
_a.sent();
|
|
335
|
+
return [4 /*yield*/, loadDataBase(createFindParam())];
|
|
336
|
+
case 2:
|
|
337
|
+
_a.sent();
|
|
338
|
+
return [2 /*return*/];
|
|
339
|
+
}
|
|
340
|
+
});
|
|
341
|
+
}); };
|
|
324
342
|
var createFindParam = function () {
|
|
325
343
|
return {
|
|
326
344
|
resultType: FindParam_1.ResultType.RowCountAndPagedRows,
|
|
@@ -335,6 +353,42 @@ var XLazyDataTable = function (props) {
|
|
|
335
353
|
aggregateItems: aggregateItems
|
|
336
354
|
};
|
|
337
355
|
};
|
|
356
|
+
var loadXFieldSetMaps = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
357
|
+
var fieldSetIds, xFieldSetMetaList, xFieldSetMapsLocal, xFieldSetMetaList_1, xFieldSetMetaList_1_1, xFieldSetMeta;
|
|
358
|
+
var e_3, _a;
|
|
359
|
+
return __generator(this, function (_b) {
|
|
360
|
+
switch (_b.label) {
|
|
361
|
+
case 0:
|
|
362
|
+
fieldSetIds = getFieldSetIds();
|
|
363
|
+
if (!(fieldSetIds.length > 0)) return [3 /*break*/, 2];
|
|
364
|
+
return [4 /*yield*/, XUtils_1.XUtils.fetchRows('XFieldSetMeta', { where: "[fieldSetId] IN (:...fieldSetIdList)", params: { fieldSetIdList: fieldSetIds } })];
|
|
365
|
+
case 1:
|
|
366
|
+
xFieldSetMetaList = _b.sent();
|
|
367
|
+
// check
|
|
368
|
+
if (xFieldSetMetaList.length !== fieldSetIds.length) {
|
|
369
|
+
throw "One or more of fieldSetIds \"".concat(fieldSetIds.join(", "), "\" was not found in DB in the table for Entity XFieldSetMeta");
|
|
370
|
+
}
|
|
371
|
+
xFieldSetMapsLocal = {};
|
|
372
|
+
try {
|
|
373
|
+
for (xFieldSetMetaList_1 = __values(xFieldSetMetaList), xFieldSetMetaList_1_1 = xFieldSetMetaList_1.next(); !xFieldSetMetaList_1_1.done; xFieldSetMetaList_1_1 = xFieldSetMetaList_1.next()) {
|
|
374
|
+
xFieldSetMeta = xFieldSetMetaList_1_1.value;
|
|
375
|
+
xFieldSetMapsLocal[xFieldSetMeta.fieldSetId] = XFieldSetBase_1.XFieldSetBase.createXFieldXFieldMetaMap(xFieldSetMeta);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
379
|
+
finally {
|
|
380
|
+
try {
|
|
381
|
+
if (xFieldSetMetaList_1_1 && !xFieldSetMetaList_1_1.done && (_a = xFieldSetMetaList_1.return)) _a.call(xFieldSetMetaList_1);
|
|
382
|
+
}
|
|
383
|
+
finally { if (e_3) throw e_3.error; }
|
|
384
|
+
}
|
|
385
|
+
// save created structures
|
|
386
|
+
setXFieldSetMaps(xFieldSetMapsLocal);
|
|
387
|
+
_b.label = 2;
|
|
388
|
+
case 2: return [2 /*return*/];
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
|
+
}); };
|
|
338
392
|
var loadDataBase = function (findParam) { return __awaiter(void 0, void 0, void 0, function () {
|
|
339
393
|
var findResult;
|
|
340
394
|
return __generator(this, function (_a) {
|
|
@@ -380,12 +434,12 @@ var XLazyDataTable = function (props) {
|
|
|
380
434
|
return xFullTextSearch;
|
|
381
435
|
};
|
|
382
436
|
var createXCustomFilterItems = function (customFilterItems, optionalCustomFilter) {
|
|
383
|
-
return
|
|
437
|
+
return XUtilsCommon_1.XUtilsCommon.filterAnd(customFilterItems, optionalCustomFilter === null || optionalCustomFilter === void 0 ? void 0 : optionalCustomFilter.filter);
|
|
384
438
|
};
|
|
385
439
|
var getFields = function (addPropsFields) {
|
|
386
440
|
// krasne zobrazi cely objekt!
|
|
387
441
|
//console.log(dataTableEl.current);
|
|
388
|
-
var
|
|
442
|
+
var e_4, _a;
|
|
389
443
|
var fields = [];
|
|
390
444
|
var columns = dataTableEl.current.props.children;
|
|
391
445
|
try {
|
|
@@ -394,12 +448,12 @@ var XLazyDataTable = function (props) {
|
|
|
394
448
|
fields.push(column.props.field);
|
|
395
449
|
}
|
|
396
450
|
}
|
|
397
|
-
catch (
|
|
451
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
398
452
|
finally {
|
|
399
453
|
try {
|
|
400
454
|
if (columns_3_1 && !columns_3_1.done && (_a = columns_3.return)) _a.call(columns_3);
|
|
401
455
|
}
|
|
402
|
-
finally { if (
|
|
456
|
+
finally { if (e_4) throw e_4.error; }
|
|
403
457
|
}
|
|
404
458
|
if (addPropsFields) {
|
|
405
459
|
if (props.fields) {
|
|
@@ -411,7 +465,7 @@ var XLazyDataTable = function (props) {
|
|
|
411
465
|
var getHeaders = function () {
|
|
412
466
|
// krasne zobrazi cely objekt!
|
|
413
467
|
//console.log(dataTableEl.current);
|
|
414
|
-
var
|
|
468
|
+
var e_5, _a;
|
|
415
469
|
var headers = [];
|
|
416
470
|
var columns = dataTableEl.current.props.children;
|
|
417
471
|
try {
|
|
@@ -421,17 +475,17 @@ var XLazyDataTable = function (props) {
|
|
|
421
475
|
headers.push(column.props.header);
|
|
422
476
|
}
|
|
423
477
|
}
|
|
424
|
-
catch (
|
|
478
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
425
479
|
finally {
|
|
426
480
|
try {
|
|
427
481
|
if (columns_4_1 && !columns_4_1.done && (_a = columns_4.return)) _a.call(columns_4);
|
|
428
482
|
}
|
|
429
|
-
finally { if (
|
|
483
|
+
finally { if (e_5) throw e_5.error; }
|
|
430
484
|
}
|
|
431
485
|
return headers;
|
|
432
486
|
};
|
|
433
487
|
var getWidths = function () {
|
|
434
|
-
var
|
|
488
|
+
var e_6, _a;
|
|
435
489
|
var _b;
|
|
436
490
|
// vrati sirky stlpcov napr. ['7.75rem', '20rem', '8.5rem', '8.5rem', '6rem']
|
|
437
491
|
// nevracia aktualne sirky stlpcov (po manualnom rozsireni) ale tie ktore boli nastavene/vypocitane v kode
|
|
@@ -443,15 +497,37 @@ var XLazyDataTable = function (props) {
|
|
|
443
497
|
widths.push((_b = column.props.headerStyle) === null || _b === void 0 ? void 0 : _b.width);
|
|
444
498
|
}
|
|
445
499
|
}
|
|
446
|
-
catch (
|
|
500
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
447
501
|
finally {
|
|
448
502
|
try {
|
|
449
503
|
if (columns_5_1 && !columns_5_1.done && (_a = columns_5.return)) _a.call(columns_5);
|
|
450
504
|
}
|
|
451
|
-
finally { if (
|
|
505
|
+
finally { if (e_6) throw e_6.error; }
|
|
452
506
|
}
|
|
453
507
|
return widths;
|
|
454
508
|
};
|
|
509
|
+
var getFieldSetIds = function () {
|
|
510
|
+
var e_7, _a;
|
|
511
|
+
var fieldSetIds = [];
|
|
512
|
+
// warning note: props.children are used to get props of XLazyColumn whereas dataTableEl.current.props.children are used to get props of Primereact DataTable
|
|
513
|
+
var columns = props.children;
|
|
514
|
+
try {
|
|
515
|
+
for (var columns_6 = __values(columns), columns_6_1 = columns_6.next(); !columns_6_1.done; columns_6_1 = columns_6.next()) {
|
|
516
|
+
var column = columns_6_1.value;
|
|
517
|
+
if (column.props.fieldSetId) {
|
|
518
|
+
fieldSetIds.push(column.props.fieldSetId);
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
523
|
+
finally {
|
|
524
|
+
try {
|
|
525
|
+
if (columns_6_1 && !columns_6_1.done && (_a = columns_6.return)) _a.call(columns_6);
|
|
526
|
+
}
|
|
527
|
+
finally { if (e_7) throw e_7.error; }
|
|
528
|
+
}
|
|
529
|
+
return fieldSetIds;
|
|
530
|
+
};
|
|
455
531
|
var hasContentTypeHtml = function () {
|
|
456
532
|
var columns = props.children;
|
|
457
533
|
return columns.some(function (column) { return column.props.contentType === "html"; });
|
|
@@ -489,7 +565,7 @@ var XLazyDataTable = function (props) {
|
|
|
489
565
|
}
|
|
490
566
|
};
|
|
491
567
|
var onClickRemoveRow = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
492
|
-
var reread,
|
|
568
|
+
var reread, e_8, e_9;
|
|
493
569
|
return __generator(this, function (_a) {
|
|
494
570
|
switch (_a.label) {
|
|
495
571
|
case 0:
|
|
@@ -504,8 +580,8 @@ var XLazyDataTable = function (props) {
|
|
|
504
580
|
reread = _a.sent();
|
|
505
581
|
return [3 /*break*/, 4];
|
|
506
582
|
case 3:
|
|
507
|
-
|
|
508
|
-
XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'),
|
|
583
|
+
e_8 = _a.sent();
|
|
584
|
+
XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'), e_8);
|
|
509
585
|
return [3 /*break*/, 4];
|
|
510
586
|
case 4:
|
|
511
587
|
if (reread) {
|
|
@@ -527,8 +603,8 @@ var XLazyDataTable = function (props) {
|
|
|
527
603
|
_a.sent();
|
|
528
604
|
return [3 /*break*/, 9];
|
|
529
605
|
case 8:
|
|
530
|
-
|
|
531
|
-
XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'),
|
|
606
|
+
e_9 = _a.sent();
|
|
607
|
+
XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'), e_9);
|
|
532
608
|
return [3 /*break*/, 9];
|
|
533
609
|
case 9:
|
|
534
610
|
loadData();
|
|
@@ -702,12 +778,17 @@ var XLazyDataTable = function (props) {
|
|
|
702
778
|
}
|
|
703
779
|
return betweenFilter;
|
|
704
780
|
};
|
|
705
|
-
var valueAsUI = function (value, xField, contentType) {
|
|
781
|
+
var valueAsUI = function (value, xField, contentType, fieldSetId) {
|
|
706
782
|
var valueResult;
|
|
707
783
|
if (xField.type === "boolean") {
|
|
708
784
|
// TODO - efektivnejsie by bolo renderovat len prislusne ikonky
|
|
709
785
|
valueResult = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: value, disabled: true });
|
|
710
786
|
}
|
|
787
|
+
else if (xField.type === "jsonb" && fieldSetId) {
|
|
788
|
+
// zatial sem dame; este by sme mohli dat hlbsie do convertValue/convertValueBase (aby fungovalo aj pre excel) ale tam je problem ze nemame k dispozicii "xFieldSetMaps"
|
|
789
|
+
// poznamka: krajsie by bolo brat fieldSetId z xField ale to by sme museli vytvorit decorator na backend-e...
|
|
790
|
+
valueResult = XFieldSetBase_1.XFieldSetBase.xFieldSetValuesAsUI(value, xFieldSetMaps[fieldSetId]);
|
|
791
|
+
}
|
|
711
792
|
else {
|
|
712
793
|
if (contentType === "html") {
|
|
713
794
|
// value should be always string (xField.type === "string")
|
|
@@ -732,11 +813,11 @@ var XLazyDataTable = function (props) {
|
|
|
732
813
|
var bodyValue;
|
|
733
814
|
var rowDataValue = XUtilsCommon_1.XUtilsCommon.getValueOrValueListByPath(rowData, columnProps.field);
|
|
734
815
|
if (Array.isArray(rowDataValue)) {
|
|
735
|
-
var elemList = rowDataValue.map(function (value) { return valueAsUI(value, xField, columnProps.contentType); });
|
|
816
|
+
var elemList = rowDataValue.map(function (value) { return valueAsUI(value, xField, columnProps.contentType, columnProps.fieldSetId); });
|
|
736
817
|
bodyValue = react_1.default.createElement(XMultilineRenderer_1.XMultilineRenderer, { valueList: elemList, renderType: multilineSwitchValue, fewLinesCount: props.multilineSwitchFewLinesCount });
|
|
737
818
|
}
|
|
738
819
|
else {
|
|
739
|
-
bodyValue = valueAsUI(rowDataValue, xField, columnProps.contentType);
|
|
820
|
+
bodyValue = valueAsUI(rowDataValue, xField, columnProps.contentType, columnProps.fieldSetId);
|
|
740
821
|
}
|
|
741
822
|
return bodyValue;
|
|
742
823
|
};
|
|
@@ -73,6 +73,7 @@ var XUtils_1 = require("./XUtils");
|
|
|
73
73
|
var dialog_1 = require("primereact/dialog");
|
|
74
74
|
var XFormComponent_1 = require("./XFormComponent");
|
|
75
75
|
var XUtilsMetadataCommon_1 = require("../serverApi/XUtilsMetadataCommon");
|
|
76
|
+
var XUtilsCommon_1 = require("../serverApi/XUtilsCommon");
|
|
76
77
|
var XSearchButton = /** @class */ (function (_super) {
|
|
77
78
|
__extends(XSearchButton, _super);
|
|
78
79
|
function XSearchButton(props) {
|
|
@@ -138,7 +139,7 @@ var XSearchButton = /** @class */ (function (_super) {
|
|
|
138
139
|
case 1:
|
|
139
140
|
displayFieldFilter = { where: "[".concat(props.displayField, "] LIKE :xDisplayFieldValue"), params: { "xDisplayFieldValue": "".concat(e.target.value, "%") } };
|
|
140
141
|
customFilter = this.getFilterBase(this.props.filter);
|
|
141
|
-
return [4 /*yield*/, XUtils_1.XUtils.fetchRows(this.xAssoc.entityName,
|
|
142
|
+
return [4 /*yield*/, XUtils_1.XUtils.fetchRows(this.xAssoc.entityName, XUtilsCommon_1.XUtilsCommon.filterAnd(displayFieldFilter, customFilter))];
|
|
142
143
|
case 2:
|
|
143
144
|
rows = _a.sent();
|
|
144
145
|
if (rows.length === 0) {
|
|
@@ -3,7 +3,7 @@ import { CsvDecimalFormat, CsvEncoding, CsvSeparator, ExportType, XMultilineExpo
|
|
|
3
3
|
import React from "react";
|
|
4
4
|
import { XEnvVar } from "./XEnvVars";
|
|
5
5
|
import { XError, XErrorMap } from "./XErrors";
|
|
6
|
-
import { XCustomFilter
|
|
6
|
+
import { XCustomFilter } from "../serverApi/FindParam";
|
|
7
7
|
import { DataTableSortMeta } from "primereact/datatable";
|
|
8
8
|
import { XObject } from "./XObject";
|
|
9
9
|
import { XTableFieldReadOnlyProp } from "./XFormDataTable2";
|
|
@@ -86,26 +86,6 @@ export declare class XUtils {
|
|
|
86
86
|
*/
|
|
87
87
|
static getEnvVarValue(envVarEnum: XEnvVar): string;
|
|
88
88
|
static removeRow(entity: string, row: any): Promise<void>;
|
|
89
|
-
static arrayMoveElement(array: any[], position: number, offset: number): void;
|
|
90
|
-
static arraySort(array: any[], fieldOrStringFunction: string | ((item: any) => string)): any[];
|
|
91
|
-
/**
|
|
92
|
-
* returns true, if param item is member of the array
|
|
93
|
-
* remark: null/undefined items in array are ignored, item = null/undefined is ignored
|
|
94
|
-
*
|
|
95
|
-
* @param array
|
|
96
|
-
* @param item
|
|
97
|
-
* @param idField
|
|
98
|
-
*/
|
|
99
|
-
static arrayIncludes<T>(array: T[], item: T, idField: string): boolean;
|
|
100
|
-
/**
|
|
101
|
-
* returns intersection of 2 row lists
|
|
102
|
-
* remark: null/undefined items in both array1 and array2 are ignored
|
|
103
|
-
*
|
|
104
|
-
* @param array1
|
|
105
|
-
* @param array2
|
|
106
|
-
* @param idField
|
|
107
|
-
*/
|
|
108
|
-
static arrayIntersect<T>(array1: T[], array2: T[], idField: string): T[];
|
|
109
89
|
static isReadOnly(path: string, readOnlyInit?: boolean): boolean;
|
|
110
90
|
static isReadOnlyTableField(path: string | undefined, readOnly: XTableFieldReadOnlyProp | undefined, object: XObject | null, tableRow: any): boolean;
|
|
111
91
|
static markNotNull(label: string): string;
|
|
@@ -119,10 +99,6 @@ export declare class XUtils {
|
|
|
119
99
|
static getErrorMessages(xErrorMap: XErrorMap): string;
|
|
120
100
|
static getErrorMessage(xError: XError): string | undefined;
|
|
121
101
|
static normalizeString(value: string): string;
|
|
122
|
-
static createCustomFilterItems(customFilter: XCustomFilter | undefined): XCustomFilterItem[] | undefined;
|
|
123
|
-
static createMultiSortMeta(sortField: string | DataTableSortMeta[] | undefined): DataTableSortMeta[] | undefined;
|
|
124
|
-
static filterAnd(...filters: (XCustomFilter | undefined)[]): XCustomFilterItem[] | undefined;
|
|
125
|
-
static filterIdIn(idField: string, idList: number[]): XCustomFilter;
|
|
126
102
|
static evalFilter(filter: XFilterOrFunction | undefined): XCustomFilter | undefined;
|
|
127
103
|
static isTableRowInserted(tableRow: any): boolean;
|
|
128
104
|
static xViewStatus(xViewStatusOrBoolean: XViewStatusOrBoolean): XViewStatus;
|
package/lib/components/XUtils.js
CHANGED
|
@@ -73,15 +73,6 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
73
73
|
}
|
|
74
74
|
return ar;
|
|
75
75
|
};
|
|
76
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
77
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
78
|
-
if (ar || !(i in from)) {
|
|
79
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
80
|
-
ar[i] = from[i];
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
84
|
-
};
|
|
85
76
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
86
77
|
exports.XUtils = exports.XViewStatus = exports.OperationType = void 0;
|
|
87
78
|
var XUtilsMetadata_1 = require("./XUtilsMetadata");
|
|
@@ -276,7 +267,7 @@ var XUtils = /** @class */ (function () {
|
|
|
276
267
|
return __generator(this, function (_a) {
|
|
277
268
|
switch (_a.label) {
|
|
278
269
|
case 0:
|
|
279
|
-
findParam = { resultType: FindParam_1.ResultType.AllRows, entity: entity, customFilterItems:
|
|
270
|
+
findParam = { resultType: FindParam_1.ResultType.AllRows, entity: entity, customFilterItems: XUtilsCommon_1.XUtilsCommon.createCustomFilterItems(customFilter), multiSortMeta: XUtilsCommon_1.XUtilsCommon.createMultiSortMeta(sortField), fields: fields };
|
|
280
271
|
return [4 /*yield*/, XUtils.fetchOne('lazyDataTableFindRows', findParam)];
|
|
281
272
|
case 1:
|
|
282
273
|
rowList = (_a.sent()).rowList;
|
|
@@ -292,7 +283,7 @@ var XUtils = /** @class */ (function () {
|
|
|
292
283
|
return __generator(this, function (_a) {
|
|
293
284
|
switch (_a.label) {
|
|
294
285
|
case 0:
|
|
295
|
-
findParam = { resultType: FindParam_1.ResultType.OnlyRowCount, entity: entity, customFilterItems:
|
|
286
|
+
findParam = { resultType: FindParam_1.ResultType.OnlyRowCount, entity: entity, customFilterItems: XUtilsCommon_1.XUtilsCommon.createCustomFilterItems(customFilter) };
|
|
296
287
|
return [4 /*yield*/, XUtils.fetchOne('lazyDataTableFindRows', findParam)];
|
|
297
288
|
case 1:
|
|
298
289
|
totalRecords = (_a.sent()).totalRecords;
|
|
@@ -526,85 +517,6 @@ var XUtils = /** @class */ (function () {
|
|
|
526
517
|
});
|
|
527
518
|
});
|
|
528
519
|
};
|
|
529
|
-
// TODO - prehodit do XUtilsCommon
|
|
530
|
-
XUtils.arrayMoveElement = function (array, position, offset) {
|
|
531
|
-
var element = array[position];
|
|
532
|
-
array.splice(position, 1);
|
|
533
|
-
var positionNew = position + offset;
|
|
534
|
-
if (positionNew > array.length) {
|
|
535
|
-
positionNew = positionNew - array.length - 1; // element goes to the begin
|
|
536
|
-
}
|
|
537
|
-
else if (positionNew < 0) {
|
|
538
|
-
positionNew = array.length + positionNew + 1; // element goes to the end
|
|
539
|
-
}
|
|
540
|
-
if (positionNew >= 0 && positionNew <= array.length) {
|
|
541
|
-
array.splice(positionNew, 0, element);
|
|
542
|
-
}
|
|
543
|
-
};
|
|
544
|
-
// TODO - prehodit do XUtilsCommon
|
|
545
|
-
XUtils.arraySort = function (array, fieldOrStringFunction) {
|
|
546
|
-
var stringFunction;
|
|
547
|
-
if (typeof fieldOrStringFunction === 'string') {
|
|
548
|
-
stringFunction = function (item) { return item[fieldOrStringFunction]; };
|
|
549
|
-
}
|
|
550
|
-
else {
|
|
551
|
-
stringFunction = fieldOrStringFunction;
|
|
552
|
-
}
|
|
553
|
-
return array.sort(function (suggestion1, suggestion2) {
|
|
554
|
-
var value1 = stringFunction(suggestion1);
|
|
555
|
-
var value2 = stringFunction(suggestion2);
|
|
556
|
-
if (value1 > value2) {
|
|
557
|
-
return 1;
|
|
558
|
-
}
|
|
559
|
-
else if (value1 < value2) {
|
|
560
|
-
return -1;
|
|
561
|
-
}
|
|
562
|
-
else {
|
|
563
|
-
return 0;
|
|
564
|
-
}
|
|
565
|
-
});
|
|
566
|
-
};
|
|
567
|
-
// TODO - prehodit do XUtilsCommon
|
|
568
|
-
/**
|
|
569
|
-
* returns true, if param item is member of the array
|
|
570
|
-
* remark: null/undefined items in array are ignored, item = null/undefined is ignored
|
|
571
|
-
*
|
|
572
|
-
* @param array
|
|
573
|
-
* @param item
|
|
574
|
-
* @param idField
|
|
575
|
-
*/
|
|
576
|
-
XUtils.arrayIncludes = function (array, item, idField) {
|
|
577
|
-
return item && array.some(function (arrayItem) { return arrayItem && arrayItem[idField] === item[idField]; });
|
|
578
|
-
};
|
|
579
|
-
// TODO - prehodit do XUtilsCommon
|
|
580
|
-
/**
|
|
581
|
-
* returns intersection of 2 row lists
|
|
582
|
-
* remark: null/undefined items in both array1 and array2 are ignored
|
|
583
|
-
*
|
|
584
|
-
* @param array1
|
|
585
|
-
* @param array2
|
|
586
|
-
* @param idField
|
|
587
|
-
*/
|
|
588
|
-
XUtils.arrayIntersect = function (array1, array2, idField) {
|
|
589
|
-
var e_6, _a;
|
|
590
|
-
var array2IdSet = new Set();
|
|
591
|
-
try {
|
|
592
|
-
for (var array2_1 = __values(array2), array2_1_1 = array2_1.next(); !array2_1_1.done; array2_1_1 = array2_1.next()) {
|
|
593
|
-
var item = array2_1_1.value;
|
|
594
|
-
if (item) {
|
|
595
|
-
array2IdSet.add(item[idField]);
|
|
596
|
-
}
|
|
597
|
-
}
|
|
598
|
-
}
|
|
599
|
-
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
600
|
-
finally {
|
|
601
|
-
try {
|
|
602
|
-
if (array2_1_1 && !array2_1_1.done && (_a = array2_1.return)) _a.call(array2_1);
|
|
603
|
-
}
|
|
604
|
-
finally { if (e_6) throw e_6.error; }
|
|
605
|
-
}
|
|
606
|
-
return array1.filter(function (item) { return item && array2IdSet.has(item[idField]); });
|
|
607
|
-
};
|
|
608
520
|
// helper
|
|
609
521
|
XUtils.isReadOnly = function (path, readOnlyInit) {
|
|
610
522
|
// ak mame path dlzky 2 a viac, field je vzdy readOnly
|
|
@@ -696,7 +608,7 @@ var XUtils = /** @class */ (function () {
|
|
|
696
608
|
// pomocna metodka
|
|
697
609
|
// ak nie su v xErrorMap ziadne chyby, vrati ""
|
|
698
610
|
XUtils.getErrorMessages = function (xErrorMap) {
|
|
699
|
-
var
|
|
611
|
+
var e_6, _a;
|
|
700
612
|
var _b;
|
|
701
613
|
var msg = "";
|
|
702
614
|
try {
|
|
@@ -710,12 +622,12 @@ var XUtils = /** @class */ (function () {
|
|
|
710
622
|
}
|
|
711
623
|
}
|
|
712
624
|
}
|
|
713
|
-
catch (
|
|
625
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
714
626
|
finally {
|
|
715
627
|
try {
|
|
716
628
|
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
717
629
|
}
|
|
718
|
-
finally { if (
|
|
630
|
+
finally { if (e_6) throw e_6.error; }
|
|
719
631
|
}
|
|
720
632
|
return msg;
|
|
721
633
|
};
|
|
@@ -749,75 +661,6 @@ var XUtils = /** @class */ (function () {
|
|
|
749
661
|
}
|
|
750
662
|
return value;
|
|
751
663
|
};
|
|
752
|
-
// pomocna metodka - konvertuje XCustomFilter -> XCustomFilterItem[]
|
|
753
|
-
XUtils.createCustomFilterItems = function (customFilter) {
|
|
754
|
-
var customFilterItems = undefined;
|
|
755
|
-
if (customFilter) {
|
|
756
|
-
if (Array.isArray(customFilter)) {
|
|
757
|
-
customFilterItems = customFilter;
|
|
758
|
-
}
|
|
759
|
-
else {
|
|
760
|
-
customFilterItems = [customFilter];
|
|
761
|
-
}
|
|
762
|
-
}
|
|
763
|
-
return customFilterItems;
|
|
764
|
-
};
|
|
765
|
-
// pomocna metodka - konvertuje sortField -> DataTableSortMeta[]
|
|
766
|
-
XUtils.createMultiSortMeta = function (sortField) {
|
|
767
|
-
var multiSortMeta = undefined;
|
|
768
|
-
if (sortField) {
|
|
769
|
-
if (Array.isArray(sortField)) {
|
|
770
|
-
multiSortMeta = sortField;
|
|
771
|
-
}
|
|
772
|
-
else {
|
|
773
|
-
// default order is asc, supported is also value in form "<column name> desc"
|
|
774
|
-
var order = 1;
|
|
775
|
-
var fieldAndOrder = sortField.split(' ');
|
|
776
|
-
if (fieldAndOrder.length === 2) {
|
|
777
|
-
sortField = fieldAndOrder[0];
|
|
778
|
-
if (fieldAndOrder[1].toLowerCase() === "desc") {
|
|
779
|
-
order = -1;
|
|
780
|
-
}
|
|
781
|
-
}
|
|
782
|
-
multiSortMeta = [{ field: sortField, order: order }];
|
|
783
|
-
}
|
|
784
|
-
}
|
|
785
|
-
return multiSortMeta;
|
|
786
|
-
};
|
|
787
|
-
// pomocna metodka
|
|
788
|
-
XUtils.filterAnd = function () {
|
|
789
|
-
var e_8, _a;
|
|
790
|
-
var filters = [];
|
|
791
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
792
|
-
filters[_i] = arguments[_i];
|
|
793
|
-
}
|
|
794
|
-
var customFilterItemsResult = undefined;
|
|
795
|
-
if (filters.length > 0) {
|
|
796
|
-
customFilterItemsResult = [];
|
|
797
|
-
try {
|
|
798
|
-
for (var filters_1 = __values(filters), filters_1_1 = filters_1.next(); !filters_1_1.done; filters_1_1 = filters_1.next()) {
|
|
799
|
-
var filter = filters_1_1.value;
|
|
800
|
-
var customFilterItems = XUtils.createCustomFilterItems(filter);
|
|
801
|
-
if (customFilterItems) {
|
|
802
|
-
customFilterItemsResult.push.apply(customFilterItemsResult, __spreadArray([], __read(customFilterItems), false));
|
|
803
|
-
}
|
|
804
|
-
}
|
|
805
|
-
}
|
|
806
|
-
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
807
|
-
finally {
|
|
808
|
-
try {
|
|
809
|
-
if (filters_1_1 && !filters_1_1.done && (_a = filters_1.return)) _a.call(filters_1);
|
|
810
|
-
}
|
|
811
|
-
finally { if (e_8) throw e_8.error; }
|
|
812
|
-
}
|
|
813
|
-
}
|
|
814
|
-
return customFilterItemsResult;
|
|
815
|
-
};
|
|
816
|
-
// pomocna metodka
|
|
817
|
-
// ak je idList prazdny, vytvori podmienku id IN (0) a nevrati ziadne zaznamy
|
|
818
|
-
XUtils.filterIdIn = function (idField, idList) {
|
|
819
|
-
return { where: "[".concat(idField, "] IN (:...idList)"), params: { "idList": idList.length > 0 ? idList : [0] } };
|
|
820
|
-
};
|
|
821
664
|
// pomocna metodka
|
|
822
665
|
XUtils.evalFilter = function (filter) {
|
|
823
666
|
var customFilter = undefined;
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"removeRowConfirm": "Are you sure to remove the selected row?",
|
|
13
13
|
"removeRowFailed": "Remove row failed.",
|
|
14
14
|
"newRow": "new row",
|
|
15
|
+
"ok": "Ok",
|
|
15
16
|
"save": "Save",
|
|
16
17
|
"cancel": "Cancel",
|
|
17
18
|
"expRowCount": "Row count",
|
|
@@ -27,8 +28,12 @@
|
|
|
27
28
|
"fieldSetSaveEditConfirm": "Are you sure to save the form?",
|
|
28
29
|
"fieldSetCancelEditConfirm": "Are you sure to cancel editing? All changes will be lost.",
|
|
29
30
|
"fieldSetRemoveFieldConfirm": "Are you sure to remove the field?",
|
|
31
|
+
"runStatisticMissingDateField": "Warning:\nThe following statistic fields have date field not filled in:\n\"{fieldsWithoutDate}\".\nNo condition for date will be applied for these statistic fields.",
|
|
30
32
|
"upload": "Upload",
|
|
31
33
|
"yes": "yes",
|
|
32
|
-
"no": "no"
|
|
34
|
+
"no": "no",
|
|
35
|
+
"dateFrom": "Date from",
|
|
36
|
+
"dateTo": "Date to",
|
|
37
|
+
"year": "Year"
|
|
33
38
|
}
|
|
34
39
|
}
|
|
@@ -19,15 +19,15 @@ export interface XFullTextSearch {
|
|
|
19
19
|
splitValue: boolean;
|
|
20
20
|
matchMode: 'startsWith' | 'contains' | 'endsWith' | 'equals';
|
|
21
21
|
}
|
|
22
|
-
export declare enum
|
|
22
|
+
export declare enum XAggregateFunction {
|
|
23
23
|
Min = "MIN",
|
|
24
24
|
Max = "MAX",
|
|
25
25
|
Sum = "SUM",
|
|
26
26
|
Avg = "AVG"
|
|
27
27
|
}
|
|
28
|
-
export interface
|
|
28
|
+
export interface XSimpleAggregateItem {
|
|
29
29
|
field: string;
|
|
30
|
-
|
|
30
|
+
aggregateFunction: XAggregateFunction;
|
|
31
31
|
}
|
|
32
32
|
export interface FindParam {
|
|
33
33
|
resultType: ResultType;
|
|
@@ -39,7 +39,7 @@ export interface FindParam {
|
|
|
39
39
|
multiSortMeta?: DataTableSortMeta[];
|
|
40
40
|
entity: string;
|
|
41
41
|
fields?: string[];
|
|
42
|
-
aggregateItems?:
|
|
42
|
+
aggregateItems?: XSimpleAggregateItem[];
|
|
43
43
|
}
|
|
44
44
|
export interface XLazyAutoCompleteSuggestionsRequest {
|
|
45
45
|
maxRows: number;
|