@michalrakus/x-react-web-lib 1.34.0 → 1.35.1
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/XDocTemplateButton.d.ts +3 -0
- package/XDocTemplateButton.js +5 -0
- package/gulpfile.js +3 -0
- package/lib/administration/x-enum-enum.d.ts +12 -0
- package/lib/administration/x-enum-enum.js +2 -0
- package/lib/administration/x-enum.d.ts +10 -0
- package/lib/administration/x-enum.js +2 -0
- package/lib/components/XAutoComplete.d.ts +1 -0
- package/lib/components/XAutoComplete.js +1 -1
- package/lib/components/XAutoCompleteBase.d.ts +4 -4
- package/lib/components/XAutoCompleteBase.js +17 -24
- package/lib/components/XAutoCompleteDT.d.ts +1 -0
- package/lib/components/XAutoCompleteDT.js +1 -1
- package/lib/components/XFormDialog.d.ts +12 -0
- package/lib/components/XFormDialog.js +20 -0
- package/lib/components/XFormFooter.d.ts +4 -0
- package/lib/components/XFormFooter.js +20 -1
- package/lib/components/XInputFileList.js +6 -27
- package/lib/components/XLazyDataTable/XExportRowsDialog.js +37 -59
- package/lib/components/XLazyDataTable/XLazyDataTable.d.ts +33 -36
- package/lib/components/XLazyDataTable/XLazyDataTable.js +206 -144
- package/lib/components/XUtils.d.ts +1 -0
- package/lib/components/XUtils.js +21 -8
- package/lib/modules/docTemplates/XDocTemplateButton.d.ts +7 -0
- package/lib/modules/docTemplates/XDocTemplateButton.js +150 -0
- package/lib/modules/docTemplates/xt-doc-template-field-to-join.d.ts +6 -0
- package/lib/modules/docTemplates/xt-doc-template-field-to-join.js +2 -0
- package/lib/modules/docTemplates/xt-doc-template.d.ts +18 -0
- package/lib/modules/docTemplates/xt-doc-template.js +2 -0
- package/lib/modules/files/x-file.d.ts +8 -0
- package/lib/modules/files/x-file.js +2 -0
- package/lib/serverApi/FindParam.d.ts +2 -1
- package/lib/serverApi/FindParam.js +1 -0
- package/lib/serverApi/x-lib-api.d.ts +6 -0
- package/lib/serverApi/x-lib-api.js +0 -1
- package/package.json +1 -1
- package/xt-doc-template.d.ts +3 -0
- package/xt-doc-template.js +5 -0
package/lib/components/XUtils.js
CHANGED
|
@@ -81,6 +81,7 @@ var ExportImportParam_1 = require("../serverApi/ExportImportParam");
|
|
|
81
81
|
var XResponseError_1 = require("./XResponseError");
|
|
82
82
|
var FindParam_1 = require("../serverApi/FindParam");
|
|
83
83
|
var XUtilsMetadataCommon_1 = require("../serverApi/XUtilsMetadataCommon");
|
|
84
|
+
var XLocale_1 = require("./XLocale");
|
|
84
85
|
var OperationType;
|
|
85
86
|
(function (OperationType) {
|
|
86
87
|
OperationType[OperationType["None"] = 0] = "None";
|
|
@@ -104,7 +105,9 @@ var XUtils = /** @class */ (function () {
|
|
|
104
105
|
// extra small displays (podla https://www.w3schools.com/howto/howto_css_media_query_breakpoints.asp)
|
|
105
106
|
// mozno tu treba dat (window.screen.width * window.devicePixelRatio)
|
|
106
107
|
// bolo 600 ($sm = 576 (primeflex)) - len ak bol mobil na vysku, 768 ma byt aj pre mobil na sirku
|
|
107
|
-
return typeof window !== 'undefined' && window.screen.availWidth < 768; // $sm = 576 (primeflex)
|
|
108
|
+
//return typeof window !== 'undefined' && window.screen.availWidth < 768; // $sm = 576 (primeflex)
|
|
109
|
+
// blblo mi window.screen.availWidth (vracalo 1920 v mobile mode v browseri)
|
|
110
|
+
return XUtils.getViewWidth() < 768;
|
|
108
111
|
};
|
|
109
112
|
XUtils.mobileCssSuffix = function () {
|
|
110
113
|
return XUtils.isMobile() ? '-mobile' : '';
|
|
@@ -169,7 +172,9 @@ var XUtils = /** @class */ (function () {
|
|
|
169
172
|
var breakpointsToFind;
|
|
170
173
|
var availWidth;
|
|
171
174
|
if (typeof window !== 'undefined') {
|
|
172
|
-
availWidth = window.screen.availWidth; // pouzivame availWidth, nie width, availWidth odratava napr. taskbar
|
|
175
|
+
//availWidth = window.screen.availWidth; // pouzivame availWidth, nie width, availWidth odratava napr. taskbar
|
|
176
|
+
// blblo mi window.screen.availWidth (vracalo 1920 v mobile mode v browseri) - mozno by tu malo byt window.outerWidth
|
|
177
|
+
availWidth = XUtils.getViewWidth();
|
|
173
178
|
if (availWidth < 576) {
|
|
174
179
|
breakpointsToFind = ['xs:'];
|
|
175
180
|
}
|
|
@@ -335,7 +340,17 @@ var XUtils = /** @class */ (function () {
|
|
|
335
340
|
};
|
|
336
341
|
XUtils.openExcelReport = function (apiPath, requestPayload, fileName) {
|
|
337
342
|
return __awaiter(this, void 0, void 0, function () {
|
|
338
|
-
|
|
343
|
+
return __generator(this, function (_a) {
|
|
344
|
+
return [2 /*return*/, XUtils.downloadFile(apiPath, requestPayload, "".concat(fileName !== null && fileName !== void 0 ? fileName : apiPath, ".xlsx"))];
|
|
345
|
+
});
|
|
346
|
+
});
|
|
347
|
+
};
|
|
348
|
+
// general method for file download
|
|
349
|
+
// returns true if the download finished successfully (often we don´t need this info)
|
|
350
|
+
// it would be nice if the fileName could be taken also from backend, from the service call
|
|
351
|
+
XUtils.downloadFile = function (apiPath, requestPayload, fileName) {
|
|
352
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
353
|
+
var response, e_5, respBlob, url, a;
|
|
339
354
|
return __generator(this, function (_a) {
|
|
340
355
|
switch (_a.label) {
|
|
341
356
|
case 0:
|
|
@@ -346,17 +361,15 @@ var XUtils = /** @class */ (function () {
|
|
|
346
361
|
return [3 /*break*/, 3];
|
|
347
362
|
case 2:
|
|
348
363
|
e_5 = _a.sent();
|
|
349
|
-
XUtils.showErrorMessage(
|
|
364
|
+
XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('fileDownloadFailed'), e_5); // next info (apiPath, payload) should be in "e"
|
|
350
365
|
return [2 /*return*/, false];
|
|
351
|
-
case 3:
|
|
352
|
-
fileNameExt = "".concat(fileName !== null && fileName !== void 0 ? fileName : apiPath, ".xlsx");
|
|
353
|
-
return [4 /*yield*/, response.blob()];
|
|
366
|
+
case 3: return [4 /*yield*/, response.blob()];
|
|
354
367
|
case 4:
|
|
355
368
|
respBlob = _a.sent();
|
|
356
369
|
url = window.URL.createObjectURL(respBlob);
|
|
357
370
|
a = document.createElement('a');
|
|
358
371
|
a.href = url;
|
|
359
|
-
a.download =
|
|
372
|
+
a.download = fileName;
|
|
360
373
|
a.click();
|
|
361
374
|
return [2 /*return*/, true];
|
|
362
375
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { XtDocTemplate } from "./xt-doc-template";
|
|
3
|
+
export declare const XDocTemplateButton: (props: {
|
|
4
|
+
entity: string;
|
|
5
|
+
rowId: number | undefined;
|
|
6
|
+
docTemplates?: ((entity: string) => Promise<XtDocTemplate[]>) | undefined;
|
|
7
|
+
}) => React.JSX.Element | null;
|
|
@@ -0,0 +1,150 @@
|
|
|
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
35
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
36
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
37
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
38
|
+
function step(op) {
|
|
39
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
40
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
41
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
42
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
43
|
+
switch (op[0]) {
|
|
44
|
+
case 0: case 1: t = op; break;
|
|
45
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
46
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
47
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
48
|
+
default:
|
|
49
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
50
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
51
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
52
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
53
|
+
if (t[2]) _.ops.pop();
|
|
54
|
+
_.trys.pop(); continue;
|
|
55
|
+
}
|
|
56
|
+
op = body.call(thisArg, _);
|
|
57
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
58
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
62
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
63
|
+
if (!m) return o;
|
|
64
|
+
var i = m.call(o), r, ar = [], e;
|
|
65
|
+
try {
|
|
66
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
67
|
+
}
|
|
68
|
+
catch (error) { e = { error: error }; }
|
|
69
|
+
finally {
|
|
70
|
+
try {
|
|
71
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
72
|
+
}
|
|
73
|
+
finally { if (e) throw e.error; }
|
|
74
|
+
}
|
|
75
|
+
return ar;
|
|
76
|
+
};
|
|
77
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
78
|
+
exports.XDocTemplateButton = void 0;
|
|
79
|
+
var react_1 = __importStar(require("react"));
|
|
80
|
+
var button_1 = require("primereact/button");
|
|
81
|
+
var splitbutton_1 = require("primereact/splitbutton");
|
|
82
|
+
var XUtils_1 = require("../../components/XUtils");
|
|
83
|
+
var XUtilsCommon_1 = require("../../serverApi/XUtilsCommon");
|
|
84
|
+
var XLocale_1 = require("../../components/XLocale");
|
|
85
|
+
var XDocTemplateButton = function (props) {
|
|
86
|
+
var _a = __read((0, react_1.useState)([]), 2), docTemplateList = _a[0], setDocTemplateList = _a[1];
|
|
87
|
+
// parameter [] - works like componentDidMount
|
|
88
|
+
(0, react_1.useEffect)(function () {
|
|
89
|
+
loadDocTemplates();
|
|
90
|
+
}, []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
91
|
+
var loadDocTemplates = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
92
|
+
var docTemplateListLocal;
|
|
93
|
+
return __generator(this, function (_a) {
|
|
94
|
+
switch (_a.label) {
|
|
95
|
+
case 0:
|
|
96
|
+
if (!props.docTemplates) return [3 /*break*/, 2];
|
|
97
|
+
return [4 /*yield*/, props.docTemplates(props.entity)];
|
|
98
|
+
case 1:
|
|
99
|
+
docTemplateListLocal = _a.sent();
|
|
100
|
+
return [3 /*break*/, 4];
|
|
101
|
+
case 2: return [4 /*yield*/, XUtils_1.XUtils.fetchRows('XtDocTemplate', XUtilsCommon_1.XUtilsCommon.createCustomFilter("[entity] = '".concat(props.entity, "' AND [availableInForms] = TRUE")), "label", ["templateXFile.name"])];
|
|
102
|
+
case 3:
|
|
103
|
+
// default
|
|
104
|
+
docTemplateListLocal = _a.sent();
|
|
105
|
+
_a.label = 4;
|
|
106
|
+
case 4:
|
|
107
|
+
setDocTemplateList(docTemplateListLocal);
|
|
108
|
+
return [2 /*return*/];
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}); };
|
|
112
|
+
var onClickButton = function (xtDocTemplate) { return __awaiter(void 0, void 0, void 0, function () {
|
|
113
|
+
var xtRunDocTemplateRequest;
|
|
114
|
+
var _a;
|
|
115
|
+
return __generator(this, function (_b) {
|
|
116
|
+
// in XLazyDataTable if no row is selected
|
|
117
|
+
if (!props.rowId) {
|
|
118
|
+
alert((0, XLocale_1.xLocaleOption)('pleaseSelectRow'));
|
|
119
|
+
return [2 /*return*/];
|
|
120
|
+
}
|
|
121
|
+
xtRunDocTemplateRequest = { xtDocTemplateId: xtDocTemplate.id, rowId: props.rowId, xUser: (_a = XUtils_1.XUtils.getXToken()) === null || _a === void 0 ? void 0 : _a.xUser };
|
|
122
|
+
// TODO - pridat id-cko do nazvu? alebo na XtDocTemplate vytvorit nejaky atribut pre nazov suboru vo forme Klient-{klient.meno}-{klient.priezvisko}.xlsx
|
|
123
|
+
// ale to by chcelo vytvorit ten nazov v service (po tom co bude nacitany row) a nejako ho dostat sem
|
|
124
|
+
XUtils_1.XUtils.downloadFile('xt-run-doc-template', xtRunDocTemplateRequest, xtDocTemplate.templateXFile.name);
|
|
125
|
+
return [2 /*return*/];
|
|
126
|
+
});
|
|
127
|
+
}); };
|
|
128
|
+
if (docTemplateList.length === 0) {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
else if (docTemplateList.length === 1) {
|
|
132
|
+
// simple button
|
|
133
|
+
var docTemplate_1 = docTemplateList[0];
|
|
134
|
+
return (react_1.default.createElement(button_1.Button, { icon: "pi pi-file-export", label: docTemplate_1.label, onClick: function () { return onClickButton(docTemplate_1); }, className: "m-1" }));
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
// split button
|
|
138
|
+
var docTemplate0_1 = docTemplateList[0];
|
|
139
|
+
var items = [];
|
|
140
|
+
var _loop_1 = function (index) {
|
|
141
|
+
var docTemplate = docTemplateList[index];
|
|
142
|
+
items.push({ icon: "pi pi-file-export", label: docTemplate.label, command: function () { return onClickButton(docTemplate); } });
|
|
143
|
+
};
|
|
144
|
+
for (var index = 1; index < docTemplateList.length; index++) {
|
|
145
|
+
_loop_1(index);
|
|
146
|
+
}
|
|
147
|
+
return (react_1.default.createElement(splitbutton_1.SplitButton, { icon: "pi pi-file-export", label: docTemplate0_1.label, onClick: function () { return onClickButton(docTemplate0_1); }, model: items, className: "m-1" }));
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
exports.XDocTemplateButton = XDocTemplateButton;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { XtDocTemplateFieldToJoin } from "./xt-doc-template-field-to-join";
|
|
2
|
+
import { XUser } from "../../serverApi/XUser";
|
|
3
|
+
import { XFile } from "../files/x-file";
|
|
4
|
+
import { XEnum } from "../../administration/x-enum";
|
|
5
|
+
export interface XtDocTemplate {
|
|
6
|
+
id: number;
|
|
7
|
+
label: string;
|
|
8
|
+
comment: string | null;
|
|
9
|
+
entity: string;
|
|
10
|
+
xtDocTemplateFieldToJoinList: XtDocTemplateFieldToJoin[];
|
|
11
|
+
templateId: string | null;
|
|
12
|
+
templateType: XEnum;
|
|
13
|
+
templateXFile: XFile;
|
|
14
|
+
availableInForms: boolean;
|
|
15
|
+
modifDate: Date | null;
|
|
16
|
+
modifXUser: XUser | null;
|
|
17
|
+
version: number;
|
|
18
|
+
}
|
|
@@ -14,7 +14,8 @@ export interface XCustomFilterItem {
|
|
|
14
14
|
}
|
|
15
15
|
export type XCustomFilter = XCustomFilterItem | XCustomFilterItem[];
|
|
16
16
|
export declare enum XFilterMatchMode {
|
|
17
|
-
X_AUTO_COMPLETE = "xAutoComplete"
|
|
17
|
+
X_AUTO_COMPLETE = "xAutoComplete",
|
|
18
|
+
X_FILTER_ELEMENT = "xFilterElement"
|
|
18
19
|
}
|
|
19
20
|
export interface XDataTableFilterMetaData extends DataTableFilterMetaData {
|
|
20
21
|
customFilterItems?: XCustomFilterItem[];
|
|
@@ -12,6 +12,7 @@ var ResultType;
|
|
|
12
12
|
var XFilterMatchMode;
|
|
13
13
|
(function (XFilterMatchMode) {
|
|
14
14
|
XFilterMatchMode["X_AUTO_COMPLETE"] = "xAutoComplete";
|
|
15
|
+
XFilterMatchMode["X_FILTER_ELEMENT"] = "xFilterElement"; // custom filter element (defined in filterElement property)
|
|
15
16
|
})(XFilterMatchMode = exports.XFilterMatchMode || (exports.XFilterMatchMode = {}));
|
|
16
17
|
var XAggregateFunction;
|
|
17
18
|
(function (XAggregateFunction) {
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
import { XUser } from "./XUser";
|
|
1
2
|
export interface XGetSequenceValueRequest {
|
|
2
3
|
name: string;
|
|
3
4
|
}
|
|
4
5
|
export interface XGetSequenceValueResponse {
|
|
5
6
|
value: number;
|
|
6
7
|
}
|
|
8
|
+
export interface XtRunDocTemplateRequest {
|
|
9
|
+
xtDocTemplateId: number;
|
|
10
|
+
rowId: number;
|
|
11
|
+
xUser?: XUser;
|
|
12
|
+
}
|
package/package.json
CHANGED