@michalrakus/x-react-web-lib 1.20.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/XParamBrowse.d.ts +3 -0
- package/XParamBrowse.js +5 -0
- package/XParamForm.d.ts +3 -0
- package/XParamForm.js +5 -0
- package/gulpfile.js +4 -2
- 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/components/XAutoCompleteBase.js +2 -29
- package/lib/components/XFormComponent.d.ts +1 -0
- package/lib/components/XInputText.js +1 -1
- package/lib/components/XLazyDataTable/XLazyDataTable.d.ts +6 -0
- package/lib/components/XLazyDataTable/XLazyDataTable.js +68 -17
- package/lib/components/XLazyDataTable/XOcfDropdown.d.ts +8 -0
- package/lib/components/XLazyDataTable/XOcfDropdown.js +52 -0
- package/lib/serverApi/ExportImportParam.d.ts +1 -0
- package/lib/serverApi/XUtilsCommon.d.ts +4 -0
- package/lib/serverApi/XUtilsCommon.js +78 -3
- package/lib/serverApi/XUtilsConversions.d.ts +3 -1
- package/lib/serverApi/XUtilsConversions.js +19 -14
- package/package.json +1 -1
package/XParamBrowse.js
ADDED
package/XParamForm.d.ts
ADDED
package/XParamForm.js
ADDED
package/gulpfile.js
CHANGED
|
@@ -13,10 +13,12 @@ function generateApi(cb) {
|
|
|
13
13
|
const fs = require('fs');
|
|
14
14
|
|
|
15
15
|
const apiFileList = [
|
|
16
|
-
"./lib/administration/XUserBrowse",
|
|
17
|
-
"./lib/administration/XUserForm",
|
|
18
16
|
"./lib/administration/XBrowseMetaBrowse",
|
|
19
17
|
"./lib/administration/XBrowseMetaForm",
|
|
18
|
+
"./lib/administration/XParamBrowse",
|
|
19
|
+
"./lib/administration/XParamForm",
|
|
20
|
+
"./lib/administration/XUserBrowse",
|
|
21
|
+
"./lib/administration/XUserForm",
|
|
20
22
|
|
|
21
23
|
"./lib/components/XFormRowCol/XFormCol",
|
|
22
24
|
"./lib/components/XFormRowCol/XFormInlineRow",
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { XBrowseProps } from "../components/XLazyDataTable/XLazyDataTable";
|
|
3
|
+
import { XCustomFilter } from "../serverApi/FindParam";
|
|
4
|
+
export declare const XParamBrowse: (props: XBrowseProps & {
|
|
5
|
+
customFilter?: XCustomFilter;
|
|
6
|
+
}) => JSX.Element;
|
|
@@ -0,0 +1,25 @@
|
|
|
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.XParamBrowse = void 0;
|
|
7
|
+
var react_1 = __importDefault(require("react"));
|
|
8
|
+
var XLazyDataTable_1 = require("../components/XLazyDataTable/XLazyDataTable");
|
|
9
|
+
var XParamForm_1 = require("./XParamForm");
|
|
10
|
+
var XParamBrowse = function (props) {
|
|
11
|
+
var onAddRow = function () {
|
|
12
|
+
// openForm pridavame automaticky v XFormNavigator3 pri renderovani komponentu
|
|
13
|
+
props.openForm(react_1.default.createElement(XParamForm_1.XParamForm, null));
|
|
14
|
+
};
|
|
15
|
+
var onEdit = function (selectedRow) {
|
|
16
|
+
// openForm pridavame automaticky v XFormNavigator3 pri renderovani komponentu
|
|
17
|
+
props.openForm(react_1.default.createElement(XParamForm_1.XParamForm, { id: selectedRow.id }));
|
|
18
|
+
};
|
|
19
|
+
return (react_1.default.createElement(XLazyDataTable_1.XLazyDataTable, { entity: "XParam", sortField: "id", rows: 30, customFilter: props.customFilter, onAddRow: onAddRow, onEdit: onEdit, removeRow: true, displayed: props.displayed },
|
|
20
|
+
react_1.default.createElement(XLazyDataTable_1.XLazyColumn, { field: "id", header: "ID", width: "8rem" }),
|
|
21
|
+
react_1.default.createElement(XLazyDataTable_1.XLazyColumn, { field: "code", header: "Code", width: "16rem" }),
|
|
22
|
+
react_1.default.createElement(XLazyDataTable_1.XLazyColumn, { field: "name", header: "Name", width: "45rem" }),
|
|
23
|
+
react_1.default.createElement(XLazyDataTable_1.XLazyColumn, { field: "value", header: "Value", width: "16rem" })));
|
|
24
|
+
};
|
|
25
|
+
exports.XParamBrowse = XParamBrowse;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
18
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
19
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
20
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
21
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
22
|
+
};
|
|
23
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
24
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.XParamForm = void 0;
|
|
28
|
+
var react_1 = __importDefault(require("react"));
|
|
29
|
+
var XFormBaseModif_1 = require("../components/XFormBaseModif");
|
|
30
|
+
var XFormBase_1 = require("../components/XFormBase");
|
|
31
|
+
var XInputDecimal_1 = require("../components/XInputDecimal");
|
|
32
|
+
var XInputDate_1 = require("../components/XInputDate");
|
|
33
|
+
var XInputText_1 = require("../components/XInputText");
|
|
34
|
+
var XFormFooter_1 = require("../components/XFormFooter");
|
|
35
|
+
var XParamForm = /** @class */ (function (_super) {
|
|
36
|
+
__extends(XParamForm, _super);
|
|
37
|
+
function XParamForm() {
|
|
38
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
39
|
+
}
|
|
40
|
+
XParamForm.prototype.createNewObject = function () {
|
|
41
|
+
return { version: 0 };
|
|
42
|
+
};
|
|
43
|
+
XParamForm.prototype.render = function () {
|
|
44
|
+
return (react_1.default.createElement("div", null,
|
|
45
|
+
react_1.default.createElement("div", { className: "x-form-row" },
|
|
46
|
+
react_1.default.createElement("div", { className: "x-form-col" },
|
|
47
|
+
react_1.default.createElement(XInputDecimal_1.XInputDecimal, { form: this, field: "id", label: "ID", readOnly: true }),
|
|
48
|
+
react_1.default.createElement(XInputDate_1.XInputDate, { form: this, field: "modifDate", label: "Modified at", readOnly: true }),
|
|
49
|
+
react_1.default.createElement(XInputText_1.XInputText, { form: this, field: "modifXUser.name", label: "Modified by", inputStyle: { width: '12.5rem' } }),
|
|
50
|
+
react_1.default.createElement(XInputText_1.XInputText, { form: this, field: "code", label: "Code", inputStyle: { width: '16rem' } }),
|
|
51
|
+
react_1.default.createElement(XInputText_1.XInputText, { form: this, field: "name", label: "Name", inputStyle: { width: '45rem' } }),
|
|
52
|
+
react_1.default.createElement(XInputText_1.XInputText, { form: this, field: "value", label: "Value", inputStyle: { width: '45rem' } }))),
|
|
53
|
+
react_1.default.createElement(XFormFooter_1.XFormFooter, { form: this })));
|
|
54
|
+
};
|
|
55
|
+
XParamForm = __decorate([
|
|
56
|
+
(0, XFormBase_1.Form)("XParam")
|
|
57
|
+
], XParamForm);
|
|
58
|
+
return XParamForm;
|
|
59
|
+
}(XFormBaseModif_1.XFormBaseModif));
|
|
60
|
+
exports.XParamForm = XParamForm;
|
|
@@ -614,39 +614,12 @@ var XAutoCompleteBase = /** @class */ (function (_super) {
|
|
|
614
614
|
return itemTemplate;
|
|
615
615
|
};
|
|
616
616
|
XAutoCompleteBase.prototype.computeDefaultDisplayValue = function (suggestion) {
|
|
617
|
-
var
|
|
618
|
-
var displayValue = "";
|
|
617
|
+
var displayValue;
|
|
619
618
|
if (XAutoCompleteBase.isMoreSuggestions(suggestion)) {
|
|
620
619
|
displayValue = suggestion;
|
|
621
620
|
}
|
|
622
621
|
else {
|
|
623
|
-
|
|
624
|
-
for (var _b = __values(this.getFields()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
625
|
-
var field = _c.value;
|
|
626
|
-
// TODO - konverzie na spravny typ/string
|
|
627
|
-
var _d = __read(XUtilsCommon_1.XUtilsCommon.getPrefixAndField(field), 2), prefix = _d[0], fieldOnly = _d[1];
|
|
628
|
-
var value = XUtilsCommon_1.XUtilsCommon.getValueByPath(suggestion, fieldOnly);
|
|
629
|
-
if (value !== null && value !== undefined) {
|
|
630
|
-
var valueStr = value.toString(); // TODO - spravnu konverziu
|
|
631
|
-
if (valueStr !== "") {
|
|
632
|
-
if (displayValue !== "") {
|
|
633
|
-
displayValue += " ";
|
|
634
|
-
}
|
|
635
|
-
if (prefix) {
|
|
636
|
-
displayValue += prefix;
|
|
637
|
-
}
|
|
638
|
-
displayValue += valueStr;
|
|
639
|
-
}
|
|
640
|
-
}
|
|
641
|
-
}
|
|
642
|
-
}
|
|
643
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
644
|
-
finally {
|
|
645
|
-
try {
|
|
646
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
647
|
-
}
|
|
648
|
-
finally { if (e_2) throw e_2.error; }
|
|
649
|
-
}
|
|
622
|
+
displayValue = XUtilsCommon_1.XUtilsCommon.createDisplayValue(suggestion, this.getFields());
|
|
650
623
|
}
|
|
651
624
|
return displayValue;
|
|
652
625
|
};
|
|
@@ -63,7 +63,7 @@ var XInputText = /** @class */ (function (_super) {
|
|
|
63
63
|
var label = this.getLabel();
|
|
64
64
|
return (react_1.default.createElement("div", { className: "field grid" },
|
|
65
65
|
label !== undefined ? react_1.default.createElement("label", { htmlFor: this.props.field, className: "col-fixed", style: this.getLabelStyle() }, label) : null,
|
|
66
|
-
react_1.default.createElement(inputtext_1.InputText, __assign({ id: this.props.field, value: this.getValue(), onChange: this.onValueChange, readOnly: this.isReadOnly(), maxLength: this.xField.length, size: size, style: this.props.inputStyle }, this.getClassNameTooltip(), { onBlur: this.onBlur }))));
|
|
66
|
+
react_1.default.createElement(inputtext_1.InputText, __assign({ id: this.props.field, value: this.getValue(), onChange: this.onValueChange, readOnly: this.isReadOnly(), maxLength: this.xField.length, size: size, style: this.props.inputStyle }, this.getClassNameTooltip(), { onBlur: this.onBlur, placeholder: this.props.placeholder }))));
|
|
67
67
|
};
|
|
68
68
|
return XInputText;
|
|
69
69
|
}(XInput_1.XInput));
|
|
@@ -15,6 +15,10 @@ export interface XAppButtonForRow {
|
|
|
15
15
|
label: string;
|
|
16
16
|
onClick: (selectedRow: any) => void;
|
|
17
17
|
}
|
|
18
|
+
export interface XOptionalCustomFilter {
|
|
19
|
+
label: string;
|
|
20
|
+
filter: XCustomFilter;
|
|
21
|
+
}
|
|
18
22
|
export interface XEditModeHandlers {
|
|
19
23
|
onStart: () => void;
|
|
20
24
|
onSave: () => void;
|
|
@@ -52,6 +56,7 @@ export interface XLazyDataTableProps {
|
|
|
52
56
|
appButtons?: any;
|
|
53
57
|
filters?: DataTableFilterMeta;
|
|
54
58
|
customFilter?: XCustomFilter;
|
|
59
|
+
optionalCustomFilters?: XOptionalCustomFilter[];
|
|
55
60
|
sortField?: string | DataTableSortMeta[];
|
|
56
61
|
fullTextSearch: boolean | string[];
|
|
57
62
|
fields?: string[];
|
|
@@ -62,6 +67,7 @@ export interface XLazyDataTableProps {
|
|
|
62
67
|
width?: string;
|
|
63
68
|
rowClassName?: (data: any) => object | string | undefined;
|
|
64
69
|
dataLoadedState?: [boolean, React.Dispatch<React.SetStateAction<boolean>>];
|
|
70
|
+
exportFieldsToDuplicateValues?: string[];
|
|
65
71
|
editMode?: boolean;
|
|
66
72
|
editModeHandlers?: XEditModeHandlers;
|
|
67
73
|
displayed?: boolean;
|
|
@@ -130,6 +130,7 @@ var editor_1 = require("primereact/editor");
|
|
|
130
130
|
var XMultilineSwitch_1 = require("./XMultilineSwitch");
|
|
131
131
|
var XMultilineRenderer_1 = require("./XMultilineRenderer");
|
|
132
132
|
var XHtmlRenderer_1 = require("./XHtmlRenderer");
|
|
133
|
+
var XOcfDropdown_1 = require("./XOcfDropdown");
|
|
133
134
|
var XLazyDataTable = function (props) {
|
|
134
135
|
var _a;
|
|
135
136
|
// must be here, is used in createInitFilters()
|
|
@@ -239,14 +240,16 @@ var XLazyDataTable = function (props) {
|
|
|
239
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)
|
|
240
241
|
var initFtsInputValue = props.fullTextSearch ? createInitFtsInputValue() : undefined;
|
|
241
242
|
var _g = __read((0, react_1.useState)(initFtsInputValue), 2), ftsInputValue = _g[0], setFtsInputValue = _g[1];
|
|
242
|
-
var _h = __read((0, react_1.useState)(
|
|
243
|
-
var _j = __read((0, react_1.useState)(
|
|
244
|
-
var _k = __read((0, react_1.useState)(
|
|
245
|
-
var _l = __read((
|
|
246
|
-
var _m = __read((0, react_1.useState)(false), 2),
|
|
247
|
-
var _o = __read((0, react_1.useState)(), 2),
|
|
248
|
-
var _p = __read((0, react_1.useState)(
|
|
249
|
-
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
|
|
250
253
|
// parameter [] zabezpeci ze sa metoda zavola len po prvom renderingu (a nie po kazdej zmene stavu (zavolani setNieco()))
|
|
251
254
|
(0, react_1.useEffect)(function () {
|
|
252
255
|
// jednoduchy sposob - nepouzivame parameter props.displayed a priznak dataLoaded
|
|
@@ -276,10 +279,13 @@ var XLazyDataTable = function (props) {
|
|
|
276
279
|
// TODO - preco je to tu? presunut dole ak sa da...
|
|
277
280
|
var dataKey = props.dataKey !== undefined ? props.dataKey : XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXEntity(props.entity).idField;
|
|
278
281
|
var onPage = function (event) { return __awaiter(void 0, void 0, void 0, function () {
|
|
282
|
+
var findParam;
|
|
279
283
|
return __generator(this, function (_a) {
|
|
280
284
|
//console.log("zavolany onPage");
|
|
281
285
|
setFirst(event.first);
|
|
282
|
-
|
|
286
|
+
findParam = createFindParam();
|
|
287
|
+
findParam.first = event.first; // prepiseme first, lebo je tam stara hodnota (volanie setFirst nezmeni first hned)
|
|
288
|
+
loadDataBase(findParam);
|
|
283
289
|
return [2 /*return*/];
|
|
284
290
|
});
|
|
285
291
|
}); };
|
|
@@ -293,7 +299,9 @@ var XLazyDataTable = function (props) {
|
|
|
293
299
|
//console.log("zavolany onSort - this.state.multiSortMeta = " + JSON.stringify(multiSortMeta));
|
|
294
300
|
//console.log("zavolany onSort - event.multiSortMeta = " + JSON.stringify(event.multiSortMeta));
|
|
295
301
|
setMultiSortMeta(event.multiSortMeta);
|
|
296
|
-
|
|
302
|
+
var findParam = createFindParam();
|
|
303
|
+
findParam.multiSortMeta = event.multiSortMeta; // prepiseme multiSortMeta, lebo je tam stara hodnota (volanie setMultiSortMeta nezmeni multiSortMeta hned)
|
|
304
|
+
loadDataBase(findParam);
|
|
297
305
|
};
|
|
298
306
|
var onClickFilter = function () {
|
|
299
307
|
//console.log("zavolany onClickFilter");
|
|
@@ -306,9 +314,26 @@ var XLazyDataTable = function (props) {
|
|
|
306
314
|
if (ftsInputValue) {
|
|
307
315
|
setFtsInputValue(createInitFtsInputValue());
|
|
308
316
|
}
|
|
317
|
+
if (props.optionalCustomFilters) {
|
|
318
|
+
setOptionalCustomFilter(undefined);
|
|
319
|
+
}
|
|
309
320
|
};
|
|
310
321
|
var loadData = function () {
|
|
311
|
-
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
|
+
};
|
|
312
337
|
};
|
|
313
338
|
var loadDataBase = function (findParam) { return __awaiter(void 0, void 0, void 0, function () {
|
|
314
339
|
var findResult;
|
|
@@ -325,6 +350,7 @@ var XLazyDataTable = function (props) {
|
|
|
325
350
|
// odlozime si filter hodnoty pre pripadny export - deep cloning vyzera ze netreba
|
|
326
351
|
setFiltersAfterFiltering(filters);
|
|
327
352
|
setFtsInputValueAfterFiltering(ftsInputValue ? __assign({}, ftsInputValue) : undefined);
|
|
353
|
+
setOptionalCustomFilterAfterFiltering(optionalCustomFilter);
|
|
328
354
|
return [2 /*return*/];
|
|
329
355
|
}
|
|
330
356
|
});
|
|
@@ -353,7 +379,10 @@ var XLazyDataTable = function (props) {
|
|
|
353
379
|
}
|
|
354
380
|
return xFullTextSearch;
|
|
355
381
|
};
|
|
356
|
-
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) {
|
|
357
386
|
// krasne zobrazi cely objekt!
|
|
358
387
|
//console.log(dataTableEl.current);
|
|
359
388
|
var e_3, _a;
|
|
@@ -372,8 +401,10 @@ var XLazyDataTable = function (props) {
|
|
|
372
401
|
}
|
|
373
402
|
finally { if (e_3) throw e_3.error; }
|
|
374
403
|
}
|
|
375
|
-
if (
|
|
376
|
-
|
|
404
|
+
if (addPropsFields) {
|
|
405
|
+
if (props.fields) {
|
|
406
|
+
fields.push.apply(fields, __spreadArray([], __read(props.fields), false));
|
|
407
|
+
}
|
|
377
408
|
}
|
|
378
409
|
return fields;
|
|
379
410
|
};
|
|
@@ -504,7 +535,18 @@ var XLazyDataTable = function (props) {
|
|
|
504
535
|
return __generator(this, function (_a) {
|
|
505
536
|
switch (_a.label) {
|
|
506
537
|
case 0:
|
|
507
|
-
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
|
+
};
|
|
508
550
|
return [4 /*yield*/, findByFilter(findParam)];
|
|
509
551
|
case 1:
|
|
510
552
|
findResult = _a.sent();
|
|
@@ -516,7 +558,15 @@ var XLazyDataTable = function (props) {
|
|
|
516
558
|
});
|
|
517
559
|
}); };
|
|
518
560
|
var createExportParams = function () {
|
|
519
|
-
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
|
+
};
|
|
520
570
|
return {
|
|
521
571
|
path: "x-lazy-data-table-export",
|
|
522
572
|
queryParam: queryParam,
|
|
@@ -902,12 +952,13 @@ var XLazyDataTable = function (props) {
|
|
|
902
952
|
}
|
|
903
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 });
|
|
904
954
|
});
|
|
905
|
-
// align-items-center centruje vertikalne (posuva smerom
|
|
955
|
+
// align-items-center centruje vertikalne (posuva smerom dolu do stredu)
|
|
906
956
|
return (react_1.default.createElement("div", null,
|
|
907
957
|
react_1.default.createElement("div", { className: "flex justify-content-center align-items-center" },
|
|
908
958
|
ftsInputValue ? react_1.default.createElement(XFtsInput_1.XFtsInput, { value: ftsInputValue, onChange: function (value) { return setFtsInputValue(value); } }) : null,
|
|
909
959
|
react_1.default.createElement(XButton_1.XButton, { key: "filter", label: (0, XLocale_1.xLocaleOption)('filter'), onClick: onClickFilter }),
|
|
910
960
|
react_1.default.createElement(XButton_1.XButton, { key: "clearFilter", label: (0, XLocale_1.xLocaleOption)('clearFilter'), onClick: onClickClearFilter }),
|
|
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,
|
|
911
962
|
props.multilineSwitch ? react_1.default.createElement(XMultilineSwitch_1.XMultilineSwitch, { value: multilineSwitchValue, onChange: function (value) { return setMultilineSwitchValue(value); }, className: "m-1" }) : null),
|
|
912
963
|
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
913
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)),
|
|
@@ -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;
|
|
@@ -9,10 +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;
|
|
13
14
|
static arrayCreateMap<ID, T>(array: T[], idField: string): Map<ID, T>;
|
|
14
15
|
static getDayName(date: Date | null | undefined): string | undefined;
|
|
15
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;
|
|
16
20
|
static findFirstMatch(pattern: RegExp, value: string): string | null;
|
|
17
21
|
static sqlMaxDateIfNull(sqlExp: string): string;
|
|
18
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
|
|
@@ -191,7 +223,7 @@ var XUtilsCommon = /** @class */ (function () {
|
|
|
191
223
|
return json;
|
|
192
224
|
};
|
|
193
225
|
XUtilsCommon.arrayCreateMap = function (array, idField) {
|
|
194
|
-
var
|
|
226
|
+
var e_3, _a;
|
|
195
227
|
var idRowMap = new Map();
|
|
196
228
|
try {
|
|
197
229
|
for (var array_1 = __values(array), array_1_1 = array_1.next(); !array_1_1.done; array_1_1 = array_1.next()) {
|
|
@@ -201,12 +233,12 @@ var XUtilsCommon = /** @class */ (function () {
|
|
|
201
233
|
}
|
|
202
234
|
}
|
|
203
235
|
}
|
|
204
|
-
catch (
|
|
236
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
205
237
|
finally {
|
|
206
238
|
try {
|
|
207
239
|
if (array_1_1 && !array_1_1.done && (_a = array_1.return)) _a.call(array_1);
|
|
208
240
|
}
|
|
209
|
-
finally { if (
|
|
241
|
+
finally { if (e_3) throw e_3.error; }
|
|
210
242
|
}
|
|
211
243
|
return idRowMap;
|
|
212
244
|
};
|
|
@@ -222,6 +254,49 @@ var XUtilsCommon = /** @class */ (function () {
|
|
|
222
254
|
}
|
|
223
255
|
return result;
|
|
224
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
|
+
};
|
|
225
300
|
XUtilsCommon.findFirstMatch = function (pattern, value) {
|
|
226
301
|
var match = pattern.exec(value);
|
|
227
302
|
return match != null ? match[0] : null;
|
|
@@ -19,7 +19,8 @@ export declare function intervalAsUI(valueInterval: IPostgresInterval | null): s
|
|
|
19
19
|
export declare function booleanAsUIText(value: boolean | null): string;
|
|
20
20
|
export declare enum AsUIType {
|
|
21
21
|
Form = 1,
|
|
22
|
-
Text = 2
|
|
22
|
+
Text = 2,
|
|
23
|
+
Excel = 3
|
|
23
24
|
}
|
|
24
25
|
/**
|
|
25
26
|
* converts values of object
|
|
@@ -31,3 +32,4 @@ export declare enum AsUIType {
|
|
|
31
32
|
*/
|
|
32
33
|
export declare function convertObject(entity: string, object: any, fromModel: boolean, asUI: AsUIType | undefined): void;
|
|
33
34
|
export declare function convertValue(xField: XField, value: any, fromModel: boolean, asUI: AsUIType | undefined): any;
|
|
35
|
+
export declare function convertValueBase(fieldType: string, fractionDigits: number | undefined, value: any, fromModel: boolean, asUI: AsUIType | undefined): any;
|
|
@@ -27,7 +27,7 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
27
27
|
return ar;
|
|
28
28
|
};
|
|
29
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
-
exports.convertValue = exports.convertObject = exports.AsUIType = exports.booleanAsUIText = exports.intervalAsUI = exports.intervalFromUI = exports.datetimeFormatUI = exports.dateFormatCalendar = exports.dateFormatUI = exports.timeFromModel = exports.datetimeAsUI = exports.dateAsUI = exports.dateFromUI = exports.dateFromModel = exports.numberFromModel = exports.numberAsUI = exports.intFromUI = exports.stringAsDB = exports.stringAsUI = exports.stringFromUI = void 0;
|
|
30
|
+
exports.convertValueBase = exports.convertValue = exports.convertObject = exports.AsUIType = exports.booleanAsUIText = exports.intervalAsUI = exports.intervalFromUI = exports.datetimeFormatUI = exports.dateFormatCalendar = exports.dateFormatUI = exports.timeFromModel = exports.datetimeAsUI = exports.dateAsUI = exports.dateFromUI = exports.dateFromModel = exports.numberFromModel = exports.numberAsUI = exports.intFromUI = exports.stringAsDB = exports.stringAsUI = exports.stringFromUI = void 0;
|
|
31
31
|
var XUtilsCommon_1 = require("./XUtilsCommon");
|
|
32
32
|
var XLocale_1 = require("../components/XLocale");
|
|
33
33
|
var XUtilsMetadataCommon_1 = require("./XUtilsMetadataCommon");
|
|
@@ -284,7 +284,8 @@ exports.booleanAsUIText = booleanAsUIText;
|
|
|
284
284
|
var AsUIType;
|
|
285
285
|
(function (AsUIType) {
|
|
286
286
|
AsUIType[AsUIType["Form"] = 1] = "Form";
|
|
287
|
-
AsUIType[AsUIType["Text"] = 2] = "Text";
|
|
287
|
+
AsUIType[AsUIType["Text"] = 2] = "Text";
|
|
288
|
+
AsUIType[AsUIType["Excel"] = 3] = "Excel"; // excel - nie vsetko konvertujeme do string-u, vecsinou zostavame pri typoch number, Date
|
|
288
289
|
})(AsUIType = exports.AsUIType || (exports.AsUIType = {}));
|
|
289
290
|
/**
|
|
290
291
|
* converts values of object
|
|
@@ -345,23 +346,27 @@ function convertObject(entity, object, fromModel, asUI) {
|
|
|
345
346
|
}
|
|
346
347
|
exports.convertObject = convertObject;
|
|
347
348
|
function convertValue(xField, value, fromModel, asUI) {
|
|
348
|
-
|
|
349
|
+
return convertValueBase(xField.type, xField.scale, value, fromModel, asUI);
|
|
350
|
+
}
|
|
351
|
+
exports.convertValue = convertValue;
|
|
352
|
+
function convertValueBase(fieldType, fractionDigits, value, fromModel, asUI) {
|
|
353
|
+
if (fieldType === "decimal") {
|
|
349
354
|
if (fromModel) {
|
|
350
355
|
value = numberFromModel(value);
|
|
351
356
|
}
|
|
352
|
-
if (asUI) {
|
|
353
|
-
value = numberAsUI(value,
|
|
357
|
+
if (asUI && asUI !== AsUIType.Excel) {
|
|
358
|
+
value = numberAsUI(value, fractionDigits);
|
|
354
359
|
}
|
|
355
360
|
}
|
|
356
|
-
else if (
|
|
361
|
+
else if (fieldType === "date") {
|
|
357
362
|
if (fromModel) {
|
|
358
363
|
value = dateFromModel(value);
|
|
359
364
|
}
|
|
360
|
-
if (asUI) {
|
|
365
|
+
if (asUI && asUI !== AsUIType.Excel) {
|
|
361
366
|
value = dateAsUI(value);
|
|
362
367
|
}
|
|
363
368
|
}
|
|
364
|
-
else if (
|
|
369
|
+
else if (fieldType === "datetime") {
|
|
365
370
|
if (fromModel) {
|
|
366
371
|
value = dateFromModel(value);
|
|
367
372
|
}
|
|
@@ -369,25 +374,25 @@ function convertValue(xField, value, fromModel, asUI) {
|
|
|
369
374
|
value = datetimeAsUI(value);
|
|
370
375
|
}
|
|
371
376
|
}
|
|
372
|
-
else if (
|
|
377
|
+
else if (fieldType === "interval") {
|
|
373
378
|
// konverziu z modelu (json objekt-u) netreba
|
|
374
379
|
if (asUI) {
|
|
375
380
|
value = intervalAsUI(value);
|
|
376
381
|
}
|
|
377
382
|
}
|
|
378
|
-
else if (
|
|
383
|
+
else if (fieldType === "boolean") {
|
|
379
384
|
// konverziu z modelu (json objekt-u) netreba
|
|
380
385
|
// pre AsUIType.Form ponechame typ boolean (spracujeme neskor)
|
|
381
|
-
if (asUI === AsUIType.Text) {
|
|
386
|
+
if (asUI === AsUIType.Text || asUI === AsUIType.Excel) {
|
|
382
387
|
value = booleanAsUIText(value);
|
|
383
388
|
}
|
|
384
389
|
}
|
|
385
390
|
else {
|
|
386
391
|
// vsetko ostatne
|
|
387
|
-
if (asUI) {
|
|
388
|
-
value = value ? value.toString() : "";
|
|
392
|
+
if (asUI && asUI !== AsUIType.Excel) {
|
|
393
|
+
value = (value !== null && value !== undefined) ? value.toString() : "";
|
|
389
394
|
}
|
|
390
395
|
}
|
|
391
396
|
return value;
|
|
392
397
|
}
|
|
393
|
-
exports.
|
|
398
|
+
exports.convertValueBase = convertValueBase;
|