@michalrakus/x-react-web-lib 1.19.0 → 1.21.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/XEditor.d.ts +3 -0
- package/XEditor.js +5 -0
- package/XEditorBase.d.ts +3 -0
- package/XEditorBase.js +5 -0
- package/XExportRowsDialog.d.ts +1 -1
- package/XExportRowsDialog.js +1 -1
- package/XHtmlRenderer.d.ts +3 -0
- package/XHtmlRenderer.js +5 -0
- package/XLazyDataTable.d.ts +1 -1
- package/XLazyDataTable.js +1 -1
- package/XMultilineRenderer.d.ts +3 -0
- package/XMultilineRenderer.js +5 -0
- package/XParamBrowse.d.ts +3 -0
- package/XParamBrowse.js +5 -0
- package/XParamForm.d.ts +3 -0
- package/XParamForm.js +5 -0
- package/gulpfile.js +11 -4
- package/lib/administration/XBrowseMetaBrowse.d.ts +1 -1
- package/lib/administration/XBrowseMetaBrowse.js +1 -1
- package/lib/administration/XParamBrowse.d.ts +6 -0
- package/lib/administration/XParamBrowse.js +25 -0
- package/lib/administration/XParamForm.d.ts +7 -0
- package/lib/administration/XParamForm.js +60 -0
- package/lib/administration/XUserBrowse.d.ts +1 -1
- package/lib/administration/XUserBrowse.js +1 -1
- package/lib/components/XAutoComplete.d.ts +2 -0
- package/lib/components/XAutoComplete.js +1 -1
- package/lib/components/XAutoCompleteBase.d.ts +5 -1
- package/lib/components/XAutoCompleteBase.js +35 -36
- package/lib/components/XAutoCompleteDT.d.ts +4 -2
- package/lib/components/XAutoCompleteDT.js +1 -1
- package/lib/components/XEditBrowse.js +1 -1
- package/lib/components/XEditor.d.ts +15 -0
- package/lib/components/XEditor.js +64 -0
- package/lib/components/XEditorBase.d.ts +9 -0
- package/lib/components/XEditorBase.js +91 -0
- package/lib/components/XFormBase.d.ts +1 -0
- package/lib/components/XFormBase.js +19 -4
- package/lib/components/XFormComponent.d.ts +1 -0
- package/lib/components/XInputText.js +1 -1
- package/lib/components/XInputTextareaBase.js +3 -4
- package/lib/components/{XExportRowsDialog.d.ts → XLazyDataTable/XExportRowsDialog.d.ts} +1 -1
- package/lib/components/{XExportRowsDialog.js → XLazyDataTable/XExportRowsDialog.js} +5 -5
- package/lib/components/XLazyDataTable/XHtmlRenderer.d.ts +7 -0
- package/lib/components/XLazyDataTable/XHtmlRenderer.js +78 -0
- package/lib/components/{XLazyDataTable.d.ts → XLazyDataTable/XLazyDataTable.d.ts} +22 -6
- package/lib/components/{XLazyDataTable.js → XLazyDataTable/XLazyDataTable.js} +112 -48
- package/lib/components/XLazyDataTable/XMultilineRenderer.d.ts +8 -0
- package/lib/components/XLazyDataTable/XMultilineRenderer.js +80 -0
- package/lib/components/XLazyDataTable/XMultilineSwitch.d.ts +7 -0
- package/lib/components/XLazyDataTable/XMultilineSwitch.js +20 -0
- package/lib/components/XLazyDataTable/XOcfDropdown.d.ts +8 -0
- package/lib/components/XLazyDataTable/XOcfDropdown.js +52 -0
- package/lib/components/XUtilsMetadata.d.ts +1 -1
- package/lib/serverApi/ExportImportParam.d.ts +1 -0
- package/lib/serverApi/XUtilsCommon.d.ts +5 -0
- package/lib/serverApi/XUtilsCommon.js +101 -1
- package/lib/serverApi/XUtilsConversions.d.ts +3 -1
- package/lib/serverApi/XUtilsConversions.js +19 -14
- package/lib/serverApi/XUtilsMetadataCommon.d.ts +1 -0
- package/lib/serverApi/XUtilsMetadataCommon.js +16 -0
- package/lib/serverApi/x-lib-api.d.ts +6 -0
- package/lib/serverApi/x-lib-api.js +3 -0
- package/package.json +2 -1
|
@@ -110,23 +110,27 @@ exports.XLazyColumn = exports.XLazyDataTable = void 0;
|
|
|
110
110
|
var react_1 = __importStar(require("react"));
|
|
111
111
|
var datatable_1 = require("primereact/datatable");
|
|
112
112
|
var column_1 = require("primereact/column");
|
|
113
|
-
var XButton_1 = require("
|
|
114
|
-
var XUtils_1 = require("
|
|
115
|
-
var XUtilsMetadata_1 = require("
|
|
116
|
-
var XDropdownDTFilter_1 = require("
|
|
117
|
-
var XUtilsConversions_1 = require("
|
|
118
|
-
var FindParam_1 = require("
|
|
119
|
-
var XButtonIconSmall_1 = require("
|
|
113
|
+
var XButton_1 = require("../XButton");
|
|
114
|
+
var XUtils_1 = require("../XUtils");
|
|
115
|
+
var XUtilsMetadata_1 = require("../XUtilsMetadata");
|
|
116
|
+
var XDropdownDTFilter_1 = require("../XDropdownDTFilter");
|
|
117
|
+
var XUtilsConversions_1 = require("../../serverApi/XUtilsConversions");
|
|
118
|
+
var FindParam_1 = require("../../serverApi/FindParam");
|
|
119
|
+
var XButtonIconSmall_1 = require("../XButtonIconSmall");
|
|
120
120
|
var tristatecheckbox_1 = require("primereact/tristatecheckbox");
|
|
121
|
-
var XUtilsCommon_1 = require("
|
|
121
|
+
var XUtilsCommon_1 = require("../../serverApi/XUtilsCommon");
|
|
122
122
|
var XExportRowsDialog_1 = require("./XExportRowsDialog");
|
|
123
123
|
var api_1 = require("primereact/api");
|
|
124
|
-
var XCalendar_1 = require("
|
|
125
|
-
var XInputDecimalBase_1 = require("
|
|
126
|
-
var XLocale_1 = require("
|
|
127
|
-
var XFtsInput_1 = require("
|
|
128
|
-
var XUtilsMetadataCommon_1 = require("
|
|
129
|
-
var
|
|
124
|
+
var XCalendar_1 = require("../XCalendar");
|
|
125
|
+
var XInputDecimalBase_1 = require("../XInputDecimalBase");
|
|
126
|
+
var XLocale_1 = require("../XLocale");
|
|
127
|
+
var XFtsInput_1 = require("../XFtsInput");
|
|
128
|
+
var XUtilsMetadataCommon_1 = require("../../serverApi/XUtilsMetadataCommon");
|
|
129
|
+
var editor_1 = require("primereact/editor");
|
|
130
|
+
var XMultilineSwitch_1 = require("./XMultilineSwitch");
|
|
131
|
+
var XMultilineRenderer_1 = require("./XMultilineRenderer");
|
|
132
|
+
var XHtmlRenderer_1 = require("./XHtmlRenderer");
|
|
133
|
+
var XOcfDropdown_1 = require("./XOcfDropdown");
|
|
130
134
|
var XLazyDataTable = function (props) {
|
|
131
135
|
var _a;
|
|
132
136
|
// must be here, is used in createInitFilters()
|
|
@@ -236,14 +240,16 @@ var XLazyDataTable = function (props) {
|
|
|
236
240
|
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)
|
|
237
241
|
var initFtsInputValue = props.fullTextSearch ? createInitFtsInputValue() : undefined;
|
|
238
242
|
var _g = __read((0, react_1.useState)(initFtsInputValue), 2), ftsInputValue = _g[0], setFtsInputValue = _g[1];
|
|
239
|
-
var _h = __read((0, react_1.useState)(
|
|
240
|
-
var _j = __read((0, react_1.useState)(
|
|
241
|
-
var _k = __read((0, react_1.useState)(
|
|
242
|
-
var _l = __read((
|
|
243
|
-
var _m = __read((0, react_1.useState)(false), 2),
|
|
244
|
-
var _o = __read((0, react_1.useState)(), 2),
|
|
245
|
-
var _p = __read((0, react_1.useState)(
|
|
246
|
-
var _q = __read((0, react_1.useState)(
|
|
243
|
+
var _h = __read((0, react_1.useState)(undefined), 2), optionalCustomFilter = _h[0], setOptionalCustomFilter = _h[1];
|
|
244
|
+
var _j = __read((0, react_1.useState)(props.multilineSwitchInitValue), 2), multilineSwitchValue = _j[0], setMultilineSwitchValue = _j[1];
|
|
245
|
+
var _k = __read((0, react_1.useState)(XUtils_1.XUtils.createMultiSortMeta(props.sortField)), 2), multiSortMeta = _k[0], setMultiSortMeta = _k[1];
|
|
246
|
+
var _l = __read((0, react_1.useState)(null), 2), selectedRow = _l[0], setSelectedRow = _l[1];
|
|
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
|
|
247
253
|
// parameter [] zabezpeci ze sa metoda zavola len po prvom renderingu (a nie po kazdej zmene stavu (zavolani setNieco()))
|
|
248
254
|
(0, react_1.useEffect)(function () {
|
|
249
255
|
// jednoduchy sposob - nepouzivame parameter props.displayed a priznak dataLoaded
|
|
@@ -273,10 +279,13 @@ var XLazyDataTable = function (props) {
|
|
|
273
279
|
// TODO - preco je to tu? presunut dole ak sa da...
|
|
274
280
|
var dataKey = props.dataKey !== undefined ? props.dataKey : XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(props.entity).idField;
|
|
275
281
|
var onPage = function (event) { return __awaiter(void 0, void 0, void 0, function () {
|
|
282
|
+
var findParam;
|
|
276
283
|
return __generator(this, function (_a) {
|
|
277
284
|
//console.log("zavolany onPage");
|
|
278
285
|
setFirst(event.first);
|
|
279
|
-
|
|
286
|
+
findParam = createFindParam();
|
|
287
|
+
findParam.first = event.first; // prepiseme first, lebo je tam stara hodnota (volanie setFirst nezmeni first hned)
|
|
288
|
+
loadDataBase(findParam);
|
|
280
289
|
return [2 /*return*/];
|
|
281
290
|
});
|
|
282
291
|
}); };
|
|
@@ -290,7 +299,9 @@ var XLazyDataTable = function (props) {
|
|
|
290
299
|
//console.log("zavolany onSort - this.state.multiSortMeta = " + JSON.stringify(multiSortMeta));
|
|
291
300
|
//console.log("zavolany onSort - event.multiSortMeta = " + JSON.stringify(event.multiSortMeta));
|
|
292
301
|
setMultiSortMeta(event.multiSortMeta);
|
|
293
|
-
|
|
302
|
+
var findParam = createFindParam();
|
|
303
|
+
findParam.multiSortMeta = event.multiSortMeta; // prepiseme multiSortMeta, lebo je tam stara hodnota (volanie setMultiSortMeta nezmeni multiSortMeta hned)
|
|
304
|
+
loadDataBase(findParam);
|
|
294
305
|
};
|
|
295
306
|
var onClickFilter = function () {
|
|
296
307
|
//console.log("zavolany onClickFilter");
|
|
@@ -303,9 +314,26 @@ var XLazyDataTable = function (props) {
|
|
|
303
314
|
if (ftsInputValue) {
|
|
304
315
|
setFtsInputValue(createInitFtsInputValue());
|
|
305
316
|
}
|
|
317
|
+
if (props.optionalCustomFilters) {
|
|
318
|
+
setOptionalCustomFilter(undefined);
|
|
319
|
+
}
|
|
306
320
|
};
|
|
307
321
|
var loadData = function () {
|
|
308
|
-
loadDataBase(
|
|
322
|
+
loadDataBase(createFindParam());
|
|
323
|
+
};
|
|
324
|
+
var createFindParam = function () {
|
|
325
|
+
return {
|
|
326
|
+
resultType: FindParam_1.ResultType.RowCountAndPagedRows,
|
|
327
|
+
first: first,
|
|
328
|
+
rows: rows,
|
|
329
|
+
filters: filters,
|
|
330
|
+
fullTextSearch: createXFullTextSearch(ftsInputValue),
|
|
331
|
+
customFilterItems: createXCustomFilterItems(customFilterItems, optionalCustomFilter),
|
|
332
|
+
multiSortMeta: multiSortMeta,
|
|
333
|
+
entity: props.entity,
|
|
334
|
+
fields: getFields(true),
|
|
335
|
+
aggregateItems: aggregateItems
|
|
336
|
+
};
|
|
309
337
|
};
|
|
310
338
|
var loadDataBase = function (findParam) { return __awaiter(void 0, void 0, void 0, function () {
|
|
311
339
|
var findResult;
|
|
@@ -322,6 +350,7 @@ var XLazyDataTable = function (props) {
|
|
|
322
350
|
// odlozime si filter hodnoty pre pripadny export - deep cloning vyzera ze netreba
|
|
323
351
|
setFiltersAfterFiltering(filters);
|
|
324
352
|
setFtsInputValueAfterFiltering(ftsInputValue ? __assign({}, ftsInputValue) : undefined);
|
|
353
|
+
setOptionalCustomFilterAfterFiltering(optionalCustomFilter);
|
|
325
354
|
return [2 /*return*/];
|
|
326
355
|
}
|
|
327
356
|
});
|
|
@@ -350,7 +379,10 @@ var XLazyDataTable = function (props) {
|
|
|
350
379
|
}
|
|
351
380
|
return xFullTextSearch;
|
|
352
381
|
};
|
|
353
|
-
var
|
|
382
|
+
var createXCustomFilterItems = function (customFilterItems, optionalCustomFilter) {
|
|
383
|
+
return XUtils_1.XUtils.filterAnd(customFilterItems, optionalCustomFilter === null || optionalCustomFilter === void 0 ? void 0 : optionalCustomFilter.filter);
|
|
384
|
+
};
|
|
385
|
+
var getFields = function (addPropsFields) {
|
|
354
386
|
// krasne zobrazi cely objekt!
|
|
355
387
|
//console.log(dataTableEl.current);
|
|
356
388
|
var e_3, _a;
|
|
@@ -369,8 +401,10 @@ var XLazyDataTable = function (props) {
|
|
|
369
401
|
}
|
|
370
402
|
finally { if (e_3) throw e_3.error; }
|
|
371
403
|
}
|
|
372
|
-
if (
|
|
373
|
-
|
|
404
|
+
if (addPropsFields) {
|
|
405
|
+
if (props.fields) {
|
|
406
|
+
fields.push.apply(fields, __spreadArray([], __read(props.fields), false));
|
|
407
|
+
}
|
|
374
408
|
}
|
|
375
409
|
return fields;
|
|
376
410
|
};
|
|
@@ -396,6 +430,10 @@ var XLazyDataTable = function (props) {
|
|
|
396
430
|
}
|
|
397
431
|
return headers;
|
|
398
432
|
};
|
|
433
|
+
var hasContentTypeHtml = function () {
|
|
434
|
+
var columns = props.children;
|
|
435
|
+
return columns.some(function (column) { return column.props.contentType === "html"; });
|
|
436
|
+
};
|
|
399
437
|
var onSelectionChange = function (event) {
|
|
400
438
|
//console.log("zavolany onSelectionChange");
|
|
401
439
|
//console.log(event.value);
|
|
@@ -497,7 +535,18 @@ var XLazyDataTable = function (props) {
|
|
|
497
535
|
return __generator(this, function (_a) {
|
|
498
536
|
switch (_a.label) {
|
|
499
537
|
case 0:
|
|
500
|
-
findParam = {
|
|
538
|
+
findParam = {
|
|
539
|
+
resultType: FindParam_1.ResultType.OnlyRowCount,
|
|
540
|
+
first: first,
|
|
541
|
+
rows: rows,
|
|
542
|
+
filters: filtersAfterFiltering,
|
|
543
|
+
fullTextSearch: createXFullTextSearch(ftsInputValueAfterFiltering),
|
|
544
|
+
customFilterItems: createXCustomFilterItems(customFilterItems, optionalCustomFilterAfterFiltering),
|
|
545
|
+
multiSortMeta: multiSortMeta,
|
|
546
|
+
entity: props.entity,
|
|
547
|
+
fields: getFields(false),
|
|
548
|
+
aggregateItems: aggregateItems
|
|
549
|
+
};
|
|
501
550
|
return [4 /*yield*/, findByFilter(findParam)];
|
|
502
551
|
case 1:
|
|
503
552
|
findResult = _a.sent();
|
|
@@ -509,7 +558,15 @@ var XLazyDataTable = function (props) {
|
|
|
509
558
|
});
|
|
510
559
|
}); };
|
|
511
560
|
var createExportParams = function () {
|
|
512
|
-
var queryParam = {
|
|
561
|
+
var queryParam = {
|
|
562
|
+
filters: filtersAfterFiltering,
|
|
563
|
+
fullTextSearch: createXFullTextSearch(ftsInputValueAfterFiltering),
|
|
564
|
+
customFilterItems: createXCustomFilterItems(customFilterItems, optionalCustomFilterAfterFiltering),
|
|
565
|
+
multiSortMeta: multiSortMeta,
|
|
566
|
+
entity: props.entity,
|
|
567
|
+
fields: getFields(false),
|
|
568
|
+
fieldsToDuplicateValues: props.exportFieldsToDuplicateValues
|
|
569
|
+
};
|
|
513
570
|
return {
|
|
514
571
|
path: "x-lazy-data-table-export",
|
|
515
572
|
queryParam: queryParam,
|
|
@@ -617,23 +674,26 @@ var XLazyDataTable = function (props) {
|
|
|
617
674
|
}
|
|
618
675
|
return betweenFilter;
|
|
619
676
|
};
|
|
620
|
-
var valueAsUI = function (value, xField) {
|
|
677
|
+
var valueAsUI = function (value, xField, contentType) {
|
|
621
678
|
var valueResult;
|
|
622
679
|
if (xField.type === "boolean") {
|
|
623
680
|
// TODO - efektivnejsie by bolo renderovat len prislusne ikonky
|
|
624
681
|
valueResult = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: value, disabled: true });
|
|
625
682
|
}
|
|
626
683
|
else {
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
684
|
+
if (contentType === "html") {
|
|
685
|
+
// value should be always string (xField.type === "string")
|
|
686
|
+
valueResult = react_1.default.createElement(XHtmlRenderer_1.XHtmlRenderer, { htmlValue: value, renderType: multilineSwitchValue, fewLinesCount: props.multilineSwitchFewLinesCount });
|
|
687
|
+
}
|
|
688
|
+
else {
|
|
689
|
+
// ine typy - convertValue vrati string
|
|
690
|
+
// mame zapnutu konverziu fromModel, lebo z json-u nam prichadzaju objekty typu string (napr. pri datumoch)
|
|
691
|
+
valueResult = (0, XUtilsConversions_1.convertValue)(xField, value, true, XUtilsConversions_1.AsUIType.Form);
|
|
692
|
+
// ak mame viacriadkovy text a multilineSwitch nastaveny na viac ako 1 riadok (defaultne je nastaveny na "allLines") pouzijeme XMultilineRenderer
|
|
693
|
+
if (contentType === "multiline" && multilineSwitchValue !== "singleLine") {
|
|
694
|
+
if (xField.type === "string" && typeof valueResult === "string" && valueResult) {
|
|
695
|
+
var lines = valueResult.split(XUtilsCommon_1.XUtilsCommon.newLine);
|
|
696
|
+
valueResult = react_1.default.createElement(XMultilineRenderer_1.XMultilineRenderer, { valueList: lines, renderType: multilineSwitchValue, fewLinesCount: props.multilineSwitchFewLinesCount, multilineContent: true });
|
|
637
697
|
}
|
|
638
698
|
}
|
|
639
699
|
}
|
|
@@ -644,11 +704,11 @@ var XLazyDataTable = function (props) {
|
|
|
644
704
|
var bodyValue;
|
|
645
705
|
var rowDataValue = XUtilsCommon_1.XUtilsCommon.getValueOrValueListByPath(rowData, columnProps.field);
|
|
646
706
|
if (Array.isArray(rowDataValue)) {
|
|
647
|
-
var elemList = rowDataValue.map(function (value
|
|
648
|
-
bodyValue = react_1.default.createElement(
|
|
707
|
+
var elemList = rowDataValue.map(function (value) { return valueAsUI(value, xField, columnProps.contentType); });
|
|
708
|
+
bodyValue = react_1.default.createElement(XMultilineRenderer_1.XMultilineRenderer, { valueList: elemList, renderType: multilineSwitchValue, fewLinesCount: props.multilineSwitchFewLinesCount });
|
|
649
709
|
}
|
|
650
710
|
else {
|
|
651
|
-
bodyValue = valueAsUI(rowDataValue, xField);
|
|
711
|
+
bodyValue = valueAsUI(rowDataValue, xField, columnProps.contentType);
|
|
652
712
|
}
|
|
653
713
|
return bodyValue;
|
|
654
714
|
};
|
|
@@ -892,13 +952,14 @@ var XLazyDataTable = function (props) {
|
|
|
892
952
|
}
|
|
893
953
|
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 });
|
|
894
954
|
});
|
|
895
|
-
// align-items-center centruje vertikalne (posuva smerom
|
|
955
|
+
// align-items-center centruje vertikalne (posuva smerom dolu do stredu)
|
|
896
956
|
return (react_1.default.createElement("div", null,
|
|
897
957
|
react_1.default.createElement("div", { className: "flex justify-content-center align-items-center" },
|
|
898
958
|
ftsInputValue ? react_1.default.createElement(XFtsInput_1.XFtsInput, { value: ftsInputValue, onChange: function (value) { return setFtsInputValue(value); } }) : null,
|
|
899
959
|
react_1.default.createElement(XButton_1.XButton, { key: "filter", label: (0, XLocale_1.xLocaleOption)('filter'), onClick: onClickFilter }),
|
|
900
960
|
react_1.default.createElement(XButton_1.XButton, { key: "clearFilter", label: (0, XLocale_1.xLocaleOption)('clearFilter'), onClick: onClickClearFilter }),
|
|
901
|
-
props.
|
|
961
|
+
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),
|
|
902
963
|
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
903
964
|
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)),
|
|
904
965
|
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
@@ -909,7 +970,8 @@ var XLazyDataTable = function (props) {
|
|
|
909
970
|
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,
|
|
910
971
|
props.appButtons,
|
|
911
972
|
props.searchBrowseParams !== undefined ? react_1.default.createElement(XButton_1.XButton, { key: "choose", label: (0, XLocale_1.xLocaleOption)('chooseRow'), onClick: onClickChoose }) : null,
|
|
912
|
-
exportRows ? react_1.default.createElement(XExportRowsDialog_1.XExportRowsDialog, { key: "exportRowsDialog", dialogOpened: exportRowsDialogOpened, hideDialog: function () { return setExportRowsDialogOpened(false); }, rowCount: exportRowsDialogRowCount, exportParams: createExportParams }) : null)
|
|
973
|
+
exportRows ? react_1.default.createElement(XExportRowsDialog_1.XExportRowsDialog, { key: "exportRowsDialog", dialogOpened: exportRowsDialogOpened, hideDialog: function () { return setExportRowsDialogOpened(false); }, rowCount: exportRowsDialogRowCount, exportParams: createExportParams }) : null),
|
|
974
|
+
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">) */));
|
|
913
975
|
};
|
|
914
976
|
exports.XLazyDataTable = XLazyDataTable;
|
|
915
977
|
exports.XLazyDataTable.defaultProps = {
|
|
@@ -917,7 +979,9 @@ exports.XLazyDataTable.defaultProps = {
|
|
|
917
979
|
rows: 10,
|
|
918
980
|
filterDisplay: "row",
|
|
919
981
|
fullTextSearch: true,
|
|
920
|
-
|
|
982
|
+
multilineSwitch: false,
|
|
983
|
+
multilineSwitchInitValue: "allLines",
|
|
984
|
+
multilineSwitchFewLinesCount: 2,
|
|
921
985
|
scrollable: true,
|
|
922
986
|
scrollWidth: 'viewport',
|
|
923
987
|
scrollHeight: 'viewport',
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { XMultilineRenderType } from "./XLazyDataTable";
|
|
3
|
+
export declare const XMultilineRenderer: (props: {
|
|
4
|
+
valueList: React.ReactNode[];
|
|
5
|
+
renderType: XMultilineRenderType;
|
|
6
|
+
fewLinesCount: number;
|
|
7
|
+
multilineContent?: boolean;
|
|
8
|
+
}) => JSX.Element;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
26
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
27
|
+
if (!m) return o;
|
|
28
|
+
var i = m.call(o), r, ar = [], e;
|
|
29
|
+
try {
|
|
30
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
31
|
+
}
|
|
32
|
+
catch (error) { e = { error: error }; }
|
|
33
|
+
finally {
|
|
34
|
+
try {
|
|
35
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
36
|
+
}
|
|
37
|
+
finally { if (e) throw e.error; }
|
|
38
|
+
}
|
|
39
|
+
return ar;
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.XMultilineRenderer = void 0;
|
|
43
|
+
var react_1 = __importStar(require("react"));
|
|
44
|
+
var button_1 = require("primereact/button");
|
|
45
|
+
var XMultilineRenderer = function (props) {
|
|
46
|
+
// used only for props.renderType === "fewLines"
|
|
47
|
+
var _a = __read((0, react_1.useState)(false), 2), showAllLines = _a[0], setShowAllLines = _a[1];
|
|
48
|
+
var valueResult; // musime vracat element, ak chceme XMultilineRenderer volat priamo cez jsx
|
|
49
|
+
if (props.renderType === "singleLine") {
|
|
50
|
+
// TODO - joinovat elementy
|
|
51
|
+
valueResult = react_1.default.createElement("div", null, props.valueList.join(", ")); // pouziva sa hlavne pre oneToMany asociacie
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
var valueListLocal = props.valueList;
|
|
55
|
+
if (props.renderType === "fewLines" && !showAllLines) {
|
|
56
|
+
valueListLocal = valueListLocal.slice(0, props.fewLinesCount);
|
|
57
|
+
}
|
|
58
|
+
var elemList = valueListLocal.map(function (value, index) { return react_1.default.createElement("div", { key: index }, value); });
|
|
59
|
+
if (props.renderType === "fewLines") {
|
|
60
|
+
if (props.valueList.length > props.fewLinesCount) {
|
|
61
|
+
// prepiseme posledny element v zozname - pridame mu button
|
|
62
|
+
var elemListLastIndex = elemList.length - 1;
|
|
63
|
+
elemList[elemListLastIndex] =
|
|
64
|
+
react_1.default.createElement("div", { key: elemListLastIndex },
|
|
65
|
+
valueListLocal[elemListLastIndex],
|
|
66
|
+
react_1.default.createElement(button_1.Button, { icon: showAllLines ? "pi pi-angle-double-left" : "pi pi-angle-double-right", onClick: function () { return setShowAllLines(!showAllLines); }, className: "x-button-multiline-expand-collapse" }));
|
|
67
|
+
// ak by bol nejaky problem s tym hore tak treba pouzit toto:
|
|
68
|
+
// elemList[elemListLastIndex] =
|
|
69
|
+
// <div className="flex flex-row flex-wrap">
|
|
70
|
+
// <div key={elemListLastIndex}>{valueListLocal[elemListLastIndex]}</div>
|
|
71
|
+
// <Button icon={showAllLines ? "pi pi-angle-double-left" : "pi pi-angle-double-right"} onClick={() => setShowAllLines(!showAllLines)}
|
|
72
|
+
// className="x-button-multiline-expand-collapse"/>
|
|
73
|
+
// </div>;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
valueResult = react_1.default.createElement("div", { className: props.multilineContent ? "x-multiline-content" : undefined }, elemList);
|
|
77
|
+
}
|
|
78
|
+
return valueResult;
|
|
79
|
+
};
|
|
80
|
+
exports.XMultilineRenderer = XMultilineRenderer;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { XMultilineRenderType } from "./XLazyDataTable";
|
|
3
|
+
export declare const XMultilineSwitch: (props: {
|
|
4
|
+
value: XMultilineRenderType;
|
|
5
|
+
onChange: (value: XMultilineRenderType) => void;
|
|
6
|
+
className?: string | undefined;
|
|
7
|
+
}) => JSX.Element;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.XMultilineSwitch = void 0;
|
|
7
|
+
var react_1 = __importDefault(require("react"));
|
|
8
|
+
var selectbutton_1 = require("primereact/selectbutton");
|
|
9
|
+
var XMultilineSwitch = function (props) {
|
|
10
|
+
var options = [
|
|
11
|
+
{ icon: 'pi pi-minus', value: 'singleLine' },
|
|
12
|
+
{ icon: 'pi pi-bars', value: 'fewLines' },
|
|
13
|
+
{ icon: 'pi pi-align-justify', value: 'allLines' }
|
|
14
|
+
];
|
|
15
|
+
var itemTemplate = function (option) {
|
|
16
|
+
return react_1.default.createElement("i", { className: option.icon });
|
|
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 }));
|
|
19
|
+
};
|
|
20
|
+
exports.XMultilineSwitch = XMultilineSwitch;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { XOptionalCustomFilter } from "./XLazyDataTable";
|
|
3
|
+
export declare const XOcfDropdown: (props: {
|
|
4
|
+
optionalCustomFilters: XOptionalCustomFilter[];
|
|
5
|
+
value: XOptionalCustomFilter | undefined;
|
|
6
|
+
onChange: (value: XOptionalCustomFilter | undefined) => void;
|
|
7
|
+
className?: string | undefined;
|
|
8
|
+
}) => JSX.Element;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
3
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
4
|
+
if (!m) return o;
|
|
5
|
+
var i = m.call(o), r, ar = [], e;
|
|
6
|
+
try {
|
|
7
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
8
|
+
}
|
|
9
|
+
catch (error) { e = { error: error }; }
|
|
10
|
+
finally {
|
|
11
|
+
try {
|
|
12
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
13
|
+
}
|
|
14
|
+
finally { if (e) throw e.error; }
|
|
15
|
+
}
|
|
16
|
+
return ar;
|
|
17
|
+
};
|
|
18
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
19
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
20
|
+
if (ar || !(i in from)) {
|
|
21
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
22
|
+
ar[i] = from[i];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
26
|
+
};
|
|
27
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
28
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
29
|
+
};
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.XOcfDropdown = void 0;
|
|
32
|
+
var react_1 = __importDefault(require("react"));
|
|
33
|
+
var dropdown_1 = require("primereact/dropdown");
|
|
34
|
+
var XOcfDropdown = function (props) {
|
|
35
|
+
var onChange = function (e) {
|
|
36
|
+
var value;
|
|
37
|
+
// specialna null polozka nema ziadne atributy
|
|
38
|
+
if (Object.keys(e.value).length === 0) {
|
|
39
|
+
value = undefined;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
value = e.value;
|
|
43
|
+
}
|
|
44
|
+
props.onChange(value);
|
|
45
|
+
};
|
|
46
|
+
// pridame prazdnu polozku
|
|
47
|
+
// polozku pridavame do kopie zoznamu, lebo inac sa nam "polozka" v props.optionalCustomFilters "mnozi"
|
|
48
|
+
var options = __spreadArray([], __read(props.optionalCustomFilters), false);
|
|
49
|
+
options.splice(0, 0, {});
|
|
50
|
+
return (react_1.default.createElement(dropdown_1.Dropdown, { options: options, optionLabel: "label", value: props.value, onChange: onChange, className: props.className }));
|
|
51
|
+
};
|
|
52
|
+
exports.XOcfDropdown = XOcfDropdown;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { XField } from "../serverApi/XEntityMetadata";
|
|
2
2
|
import { XBrowseMeta } from "../serverApi/XBrowseMetadata";
|
|
3
|
-
import { XBetweenFilterProp } from "./XLazyDataTable";
|
|
3
|
+
import { XBetweenFilterProp } from "./XLazyDataTable/XLazyDataTable";
|
|
4
4
|
export declare class XUtilsMetadata {
|
|
5
5
|
private static xBrowseMetaMap;
|
|
6
6
|
static fetchAndSetXEntityMap(): Promise<any>;
|
|
@@ -9,9 +9,14 @@ export declare class XUtilsCommon {
|
|
|
9
9
|
static getPathToAssocAndField(path: string): [string | null, string];
|
|
10
10
|
static isSingleField(path: string): boolean;
|
|
11
11
|
static getPrefixAndField(path: string): [string | null, string];
|
|
12
|
+
static createDisplayValue(object: any, fields: string[]): string;
|
|
12
13
|
static objectAsJSON(value: any): string;
|
|
14
|
+
static arrayCreateMap<ID, T>(array: T[], idField: string): Map<ID, T>;
|
|
13
15
|
static getDayName(date: Date | null | undefined): string | undefined;
|
|
14
16
|
static dateAddDays(date: Date | null, days: number): Date | null;
|
|
17
|
+
static dateAddMonths(date: Date | null, months: number): Date | null;
|
|
18
|
+
static dateEquals(date1: Date | null, date2: Date | null): boolean;
|
|
19
|
+
static dateDiffInYears(dateOld: Date | null, dateNew: Date | null): number | null;
|
|
15
20
|
static findFirstMatch(pattern: RegExp, value: string): string | null;
|
|
16
21
|
static sqlMaxDateIfNull(sqlExp: string): string;
|
|
17
22
|
static today(): Date;
|
|
@@ -168,6 +168,38 @@ var XUtilsCommon = /** @class */ (function () {
|
|
|
168
168
|
return [prefix, pathOnly];
|
|
169
169
|
}
|
|
170
170
|
};
|
|
171
|
+
XUtilsCommon.createDisplayValue = function (object, fields) {
|
|
172
|
+
var e_2, _a;
|
|
173
|
+
var displayValue = "";
|
|
174
|
+
try {
|
|
175
|
+
for (var fields_1 = __values(fields), fields_1_1 = fields_1.next(); !fields_1_1.done; fields_1_1 = fields_1.next()) {
|
|
176
|
+
var field = fields_1_1.value;
|
|
177
|
+
// TODO - konverzie na spravny typ/string
|
|
178
|
+
var _b = __read(XUtilsCommon.getPrefixAndField(field), 2), prefix = _b[0], fieldOnly = _b[1];
|
|
179
|
+
var value = XUtilsCommon.getValueByPath(object, fieldOnly);
|
|
180
|
+
if (value !== null && value !== undefined) {
|
|
181
|
+
var valueStr = value.toString(); // TODO - spravnu konverziu
|
|
182
|
+
if (valueStr !== "") {
|
|
183
|
+
if (displayValue !== "") {
|
|
184
|
+
displayValue += " ";
|
|
185
|
+
}
|
|
186
|
+
if (prefix) {
|
|
187
|
+
displayValue += prefix;
|
|
188
|
+
}
|
|
189
|
+
displayValue += valueStr;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
195
|
+
finally {
|
|
196
|
+
try {
|
|
197
|
+
if (fields_1_1 && !fields_1_1.done && (_a = fields_1.return)) _a.call(fields_1);
|
|
198
|
+
}
|
|
199
|
+
finally { if (e_2) throw e_2.error; }
|
|
200
|
+
}
|
|
201
|
+
return displayValue;
|
|
202
|
+
};
|
|
171
203
|
XUtilsCommon.objectAsJSON = function (value) {
|
|
172
204
|
// sem treba dat nejaku pre nas vhodnu serializaciu
|
|
173
205
|
// zatial provizorne robene cez antipatern - modifikaciu prototype funcii primitivnych typov
|
|
@@ -190,6 +222,26 @@ var XUtilsCommon = /** @class */ (function () {
|
|
|
190
222
|
Date.prototype.toJSON = dateToJSONOriginal;
|
|
191
223
|
return json;
|
|
192
224
|
};
|
|
225
|
+
XUtilsCommon.arrayCreateMap = function (array, idField) {
|
|
226
|
+
var e_3, _a;
|
|
227
|
+
var idRowMap = new Map();
|
|
228
|
+
try {
|
|
229
|
+
for (var array_1 = __values(array), array_1_1 = array_1.next(); !array_1_1.done; array_1_1 = array_1.next()) {
|
|
230
|
+
var row = array_1_1.value;
|
|
231
|
+
if (row) {
|
|
232
|
+
idRowMap.set(row[idField], row);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
237
|
+
finally {
|
|
238
|
+
try {
|
|
239
|
+
if (array_1_1 && !array_1_1.done && (_a = array_1.return)) _a.call(array_1);
|
|
240
|
+
}
|
|
241
|
+
finally { if (e_3) throw e_3.error; }
|
|
242
|
+
}
|
|
243
|
+
return idRowMap;
|
|
244
|
+
};
|
|
193
245
|
XUtilsCommon.getDayName = function (date) {
|
|
194
246
|
var days = ['nedeľa', 'pondelok', 'utorok', 'streda', 'štvrtok', 'piatok', 'sobota'];
|
|
195
247
|
return date ? days[date.getDay()] : undefined;
|
|
@@ -202,6 +254,49 @@ var XUtilsCommon = /** @class */ (function () {
|
|
|
202
254
|
}
|
|
203
255
|
return result;
|
|
204
256
|
};
|
|
257
|
+
XUtilsCommon.dateAddMonths = function (date, months) {
|
|
258
|
+
var result = null;
|
|
259
|
+
if (date !== null) {
|
|
260
|
+
result = new Date(date);
|
|
261
|
+
result.setMonth(result.getMonth() + months);
|
|
262
|
+
}
|
|
263
|
+
return result;
|
|
264
|
+
};
|
|
265
|
+
// helper method, because date1 === date2 compares pointers, not values (Date is not primitive type like string or number)
|
|
266
|
+
XUtilsCommon.dateEquals = function (date1, date2) {
|
|
267
|
+
var result = false;
|
|
268
|
+
if (date1 === null && date2 === null) {
|
|
269
|
+
result = true;
|
|
270
|
+
}
|
|
271
|
+
else if (date1 !== null && date2 !== null) {
|
|
272
|
+
result = (date1.getTime() === date2.getTime());
|
|
273
|
+
}
|
|
274
|
+
return result;
|
|
275
|
+
};
|
|
276
|
+
// solution from internet
|
|
277
|
+
XUtilsCommon.dateDiffInYears = function (dateOld, dateNew) {
|
|
278
|
+
var diff = null;
|
|
279
|
+
if (dateOld !== null && dateNew !== null) {
|
|
280
|
+
var yearNew = dateNew.getFullYear();
|
|
281
|
+
var monthNew = dateNew.getMonth();
|
|
282
|
+
var dayNew = dateNew.getDate();
|
|
283
|
+
var yearOld = dateOld.getFullYear();
|
|
284
|
+
var monthOld = dateOld.getMonth();
|
|
285
|
+
var dayOld = dateOld.getDate();
|
|
286
|
+
diff = yearNew - yearOld;
|
|
287
|
+
if (monthOld > monthNew) {
|
|
288
|
+
diff--;
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
if (monthOld === monthNew) {
|
|
292
|
+
if (dayOld > dayNew) {
|
|
293
|
+
diff--;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return diff;
|
|
299
|
+
};
|
|
205
300
|
XUtilsCommon.findFirstMatch = function (pattern, value) {
|
|
206
301
|
var match = pattern.exec(value);
|
|
207
302
|
return match != null ? match[0] : null;
|
|
@@ -212,7 +307,12 @@ var XUtilsCommon = /** @class */ (function () {
|
|
|
212
307
|
};
|
|
213
308
|
XUtilsCommon.today = function () {
|
|
214
309
|
var today = new Date();
|
|
215
|
-
|
|
310
|
+
// vynulujeme casovu zlozku
|
|
311
|
+
// poznamka: Date vzdy obsahuje aj casovu zlozku. Nase konverzne funkcie dateFromModel a dateFromUI pouzivaju konverziu new Date('YYYY-MM-DD')
|
|
312
|
+
// a tato konverzia vytvara datum s GMT/UTC/Z casom 00:00:00 (stredoeuropsky 00:01:00 - akokeby sme zadavali new Date('YYYY-MM-DDT00:00:00Z'))
|
|
313
|
+
//today.setHours(0, 0, 0, 0); // nastavi cas 00:00:00 v aktualnej timezone (stredoeuropsky 00:00:00, GMT 23:00:00)
|
|
314
|
+
// - potom nam nefunguje porovnavanie s datumami vytvorenymi cez funkcie dateFromModel a dateFromUI
|
|
315
|
+
today.setUTCHours(0, 0, 0, 0);
|
|
216
316
|
return today;
|
|
217
317
|
};
|
|
218
318
|
// vrati true ak sa string sklada iba z cislic, moze mat + alebo - na zaciatku
|