@michalrakus/x-react-web-lib 1.8.0 → 1.9.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/README.md +3 -3
- package/gulpfile.js +82 -82
- package/lib/administration/XBrowseMetaBrowse.d.ts +2 -2
- package/lib/administration/XBrowseMetaBrowse.js +21 -21
- package/lib/administration/XBrowseMetaForm.d.ts +5 -5
- package/lib/administration/XBrowseMetaForm.js +63 -63
- package/lib/administration/XUserBrowse.d.ts +2 -2
- package/lib/administration/XUserBrowse.js +88 -87
- package/lib/administration/XUserForm.d.ts +9 -9
- package/lib/administration/XUserForm.js +195 -194
- package/lib/components/SearchTableParams.d.ts +11 -11
- package/lib/components/SearchTableParams.js +2 -2
- package/lib/components/SourceCodeLinkEntity.d.ts +4 -4
- package/lib/components/SourceCodeLinkEntity.js +14 -14
- package/lib/components/XAutoComplete.d.ts +36 -36
- package/lib/components/XAutoComplete.js +155 -155
- package/lib/components/XAutoCompleteBase.d.ts +45 -45
- package/lib/components/XAutoCompleteBase.js +371 -371
- package/lib/components/XAutoCompleteDT.d.ts +33 -33
- package/lib/components/XAutoCompleteDT.js +140 -140
- package/lib/components/XBrowse.d.ts +33 -33
- package/lib/components/XBrowse.js +360 -360
- package/lib/components/XButton.d.ts +9 -9
- package/lib/components/XButton.js +13 -13
- package/lib/components/XButtonIconMedium.d.ts +9 -9
- package/lib/components/XButtonIconMedium.js +13 -13
- package/lib/components/XButtonIconNarrow.d.ts +10 -10
- package/lib/components/XButtonIconNarrow.js +25 -25
- package/lib/components/XButtonIconSmall.d.ts +9 -9
- package/lib/components/XButtonIconSmall.js +13 -13
- package/lib/components/XCalendar.d.ts +8 -8
- package/lib/components/XCalendar.js +27 -27
- package/lib/components/XChangePasswordForm.d.ts +5 -5
- package/lib/components/XChangePasswordForm.js +160 -160
- package/lib/components/XCheckbox.d.ts +8 -8
- package/lib/components/XCheckbox.js +57 -57
- package/lib/components/XCheckboxDT.d.ts +10 -10
- package/lib/components/XCheckboxDT.js +46 -46
- package/lib/components/XDataTable.d.ts +11 -11
- package/lib/components/XDataTable.js +197 -197
- package/lib/components/XDropdown.d.ts +18 -18
- package/lib/components/XDropdown.js +57 -57
- package/lib/components/XDropdownDT.d.ts +13 -13
- package/lib/components/XDropdownDT.js +128 -128
- package/lib/components/XDropdownDTFilter.d.ts +7 -7
- package/lib/components/XDropdownDTFilter.js +121 -121
- package/lib/components/XDropdownForEntity.d.ts +25 -25
- package/lib/components/XDropdownForEntity.js +149 -149
- package/lib/components/XDropdownFormDTFilter.d.ts +7 -7
- package/lib/components/XDropdownFormDTFilter.js +121 -121
- package/lib/components/XEditColumnDialog.d.ts +13 -13
- package/lib/components/XEditColumnDialog.js +112 -112
- package/lib/components/XEnvVars.d.ts +15 -12
- package/lib/components/XEnvVars.js +23 -20
- package/lib/components/XErrors.d.ts +12 -12
- package/lib/components/XErrors.js +2 -2
- package/lib/components/XExportRowsDialog.d.ts +15 -15
- package/lib/components/XExportRowsDialog.js +184 -184
- package/lib/components/XFieldChangeEvent.d.ts +11 -11
- package/lib/components/XFieldChangeEvent.js +2 -2
- package/lib/components/XFieldSelector.d.ts +7 -7
- package/lib/components/XFieldSelector.js +113 -113
- package/lib/components/XFormBase.d.ts +59 -59
- package/lib/components/XFormBase.js +526 -526
- package/lib/components/XFormBaseModif.d.ts +5 -5
- package/lib/components/XFormBaseModif.js +33 -33
- package/lib/components/XFormBaseT.d.ts +4 -4
- package/lib/components/XFormBaseT.js +31 -31
- package/lib/components/XFormComponent.d.ts +40 -40
- package/lib/components/XFormComponent.js +177 -177
- package/lib/components/XFormComponentDT.d.ts +30 -30
- package/lib/components/XFormComponentDT.js +145 -145
- package/lib/components/XFormDataTable2.d.ts +143 -143
- package/lib/components/XFormDataTable2.js +686 -686
- package/lib/components/XFormFooter.d.ts +6 -6
- package/lib/components/XFormFooter.js +19 -19
- package/lib/components/XFormNavigator3.d.ts +12 -12
- package/lib/components/XFormNavigator3.js +130 -130
- package/lib/components/XHolders.d.ts +7 -7
- package/lib/components/XHolders.js +15 -15
- package/lib/components/XInput.d.ts +13 -13
- package/lib/components/XInput.js +38 -38
- package/lib/components/XInputDT.d.ts +11 -11
- package/lib/components/XInputDT.js +37 -37
- package/lib/components/XInputDate.d.ts +13 -13
- package/lib/components/XInputDate.js +63 -63
- package/lib/components/XInputDateDT.d.ts +10 -10
- package/lib/components/XInputDateDT.js +55 -55
- package/lib/components/XInputDecimal.d.ts +15 -15
- package/lib/components/XInputDecimal.js +78 -78
- package/lib/components/XInputDecimalBase.d.ts +12 -12
- package/lib/components/XInputDecimalBase.js +18 -18
- package/lib/components/XInputDecimalDT.d.ts +11 -11
- package/lib/components/XInputDecimalDT.js +74 -74
- package/lib/components/XInputFileList.d.ts +36 -36
- package/lib/components/XInputFileList.js +251 -251
- package/lib/components/XInputText.d.ts +12 -12
- package/lib/components/XInputText.js +69 -69
- package/lib/components/XInputTextDT.d.ts +9 -9
- package/lib/components/XInputTextDT.js +42 -42
- package/lib/components/XInputTextarea.d.ts +18 -18
- package/lib/components/XInputTextarea.js +85 -85
- package/lib/components/XLazyDataTable.d.ts +78 -78
- package/lib/components/XLazyDataTable.js +885 -885
- package/lib/components/XLocale.d.ts +26 -26
- package/lib/components/XLocale.js +59 -59
- package/lib/components/XLoginDialog.d.ts +8 -8
- package/lib/components/XLoginDialog.js +21 -21
- package/lib/components/XLoginForm.d.ts +7 -7
- package/lib/components/XLoginForm.js +128 -128
- package/lib/components/XObject.d.ts +3 -3
- package/lib/components/XObject.js +2 -2
- package/lib/components/XResponseError.d.ts +11 -11
- package/lib/components/XResponseError.js +32 -32
- package/lib/components/XSearchButton.d.ts +26 -26
- package/lib/components/XSearchButton.js +225 -225
- package/lib/components/XSearchButtonDT.d.ts +12 -12
- package/lib/components/XSearchButtonDT.js +188 -188
- package/lib/components/XSearchButtonOld.d.ts +13 -13
- package/lib/components/XSearchButtonOld.js +212 -212
- package/lib/components/XToOneAssocButton.d.ts +8 -8
- package/lib/components/XToOneAssocButton.js +30 -30
- package/lib/components/XToken.d.ts +6 -6
- package/lib/components/XToken.js +2 -2
- package/lib/components/XUtils.d.ts +74 -74
- package/lib/components/XUtils.js +627 -627
- package/lib/components/XUtilsConversions.d.ts +12 -12
- package/lib/components/XUtilsConversions.js +125 -125
- package/lib/components/XUtilsMetadata.d.ts +39 -39
- package/lib/components/XUtilsMetadata.js +452 -452
- package/lib/components/locale/x-en.json +26 -26
- package/lib/components/useXToken.d.ts +2 -2
- package/lib/components/useXToken.js +44 -44
- package/lib/serverApi/ExportImportParam.d.ts +51 -51
- package/lib/serverApi/ExportImportParam.js +34 -34
- package/lib/serverApi/FindParam.d.ts +34 -34
- package/lib/serverApi/FindParam.js +30 -30
- package/lib/serverApi/FindResult.d.ts +8 -8
- package/lib/serverApi/FindResult.js +2 -2
- package/lib/serverApi/XBrowseMetadata.d.ts +19 -19
- package/lib/serverApi/XBrowseMetadata.js +2 -2
- package/lib/serverApi/XEntityMetadata.d.ts +35 -35
- package/lib/serverApi/XEntityMetadata.js +2 -2
- package/lib/serverApi/XFileJsonField.d.ts +6 -6
- package/lib/serverApi/XFileJsonField.js +2 -2
- package/lib/serverApi/XUser.d.ts +8 -7
- package/lib/serverApi/XUser.js +2 -2
- package/lib/serverApi/XUserAuthenticationIfc.d.ts +9 -9
- package/lib/serverApi/XUserAuthenticationIfc.js +2 -2
- package/lib/serverApi/XUtilsCommon.d.ts +13 -13
- package/lib/serverApi/XUtilsCommon.js +110 -110
- package/package.json +1 -1
|
@@ -1,885 +1,885 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
|
3
|
-
__assign = Object.assign || function(t) {
|
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
-
s = arguments[i];
|
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
-
t[p] = s[p];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
-
if (k2 === undefined) k2 = k;
|
|
15
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
-
}
|
|
19
|
-
Object.defineProperty(o, k2, desc);
|
|
20
|
-
}) : (function(o, m, k, k2) {
|
|
21
|
-
if (k2 === undefined) k2 = k;
|
|
22
|
-
o[k2] = m[k];
|
|
23
|
-
}));
|
|
24
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
-
}) : function(o, v) {
|
|
27
|
-
o["default"] = v;
|
|
28
|
-
});
|
|
29
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
30
|
-
if (mod && mod.__esModule) return mod;
|
|
31
|
-
var result = {};
|
|
32
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
33
|
-
__setModuleDefault(result, mod);
|
|
34
|
-
return result;
|
|
35
|
-
};
|
|
36
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
37
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
38
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
39
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
40
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
41
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
42
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
43
|
-
});
|
|
44
|
-
};
|
|
45
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
46
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
47
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
48
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
49
|
-
function step(op) {
|
|
50
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
51
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
52
|
-
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;
|
|
53
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
54
|
-
switch (op[0]) {
|
|
55
|
-
case 0: case 1: t = op; break;
|
|
56
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
57
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
58
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
59
|
-
default:
|
|
60
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
61
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
62
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
63
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
64
|
-
if (t[2]) _.ops.pop();
|
|
65
|
-
_.trys.pop(); continue;
|
|
66
|
-
}
|
|
67
|
-
op = body.call(thisArg, _);
|
|
68
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
69
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
var __values = (this && this.__values) || function(o) {
|
|
73
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
74
|
-
if (m) return m.call(o);
|
|
75
|
-
if (o && typeof o.length === "number") return {
|
|
76
|
-
next: function () {
|
|
77
|
-
if (o && i >= o.length) o = void 0;
|
|
78
|
-
return { value: o && o[i++], done: !o };
|
|
79
|
-
}
|
|
80
|
-
};
|
|
81
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
82
|
-
};
|
|
83
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
84
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
85
|
-
if (!m) return o;
|
|
86
|
-
var i = m.call(o), r, ar = [], e;
|
|
87
|
-
try {
|
|
88
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
89
|
-
}
|
|
90
|
-
catch (error) { e = { error: error }; }
|
|
91
|
-
finally {
|
|
92
|
-
try {
|
|
93
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
94
|
-
}
|
|
95
|
-
finally { if (e) throw e.error; }
|
|
96
|
-
}
|
|
97
|
-
return ar;
|
|
98
|
-
};
|
|
99
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
100
|
-
exports.XLazyColumn = exports.XLazyDataTable = void 0;
|
|
101
|
-
var react_1 = __importStar(require("react"));
|
|
102
|
-
var datatable_1 = require("primereact/datatable");
|
|
103
|
-
var column_1 = require("primereact/column");
|
|
104
|
-
var XButton_1 = require("./XButton");
|
|
105
|
-
var XUtils_1 = require("./XUtils");
|
|
106
|
-
var XUtilsMetadata_1 = require("./XUtilsMetadata");
|
|
107
|
-
var XDropdownDTFilter_1 = require("./XDropdownDTFilter");
|
|
108
|
-
var XUtilsConversions_1 = require("./XUtilsConversions");
|
|
109
|
-
var FindParam_1 = require("../serverApi/FindParam");
|
|
110
|
-
var XButtonIconSmall_1 = require("./XButtonIconSmall");
|
|
111
|
-
var tristatecheckbox_1 = require("primereact/tristatecheckbox");
|
|
112
|
-
var XUtilsCommon_1 = require("../serverApi/XUtilsCommon");
|
|
113
|
-
var XExportRowsDialog_1 = require("./XExportRowsDialog");
|
|
114
|
-
var api_1 = require("primereact/api");
|
|
115
|
-
var XCalendar_1 = require("./XCalendar");
|
|
116
|
-
var XInputDecimalBase_1 = require("./XInputDecimalBase");
|
|
117
|
-
var XLocale_1 = require("./XLocale");
|
|
118
|
-
var XLazyDataTable = function (props) {
|
|
119
|
-
var _a;
|
|
120
|
-
// must be here, is used in createInitFilters()
|
|
121
|
-
var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(props.entity);
|
|
122
|
-
var createAggregateItems = function () {
|
|
123
|
-
var e_1, _a;
|
|
124
|
-
var aggregateItems = [];
|
|
125
|
-
var columns = props.children;
|
|
126
|
-
try {
|
|
127
|
-
for (var columns_1 = __values(columns), columns_1_1 = columns_1.next(); !columns_1_1.done; columns_1_1 = columns_1.next()) {
|
|
128
|
-
var column = columns_1_1.value;
|
|
129
|
-
var xLazyColumn = column; // nevedel som to krajsie...
|
|
130
|
-
if (xLazyColumn.props.aggregateType) {
|
|
131
|
-
aggregateItems.push({ field: xLazyColumn.props.field, aggregateType: xLazyColumn.props.aggregateType });
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
136
|
-
finally {
|
|
137
|
-
try {
|
|
138
|
-
if (columns_1_1 && !columns_1_1.done && (_a = columns_1.return)) _a.call(columns_1);
|
|
139
|
-
}
|
|
140
|
-
finally { if (e_1) throw e_1.error; }
|
|
141
|
-
}
|
|
142
|
-
return aggregateItems;
|
|
143
|
-
};
|
|
144
|
-
var createInitFilters = function () {
|
|
145
|
-
var e_2, _a;
|
|
146
|
-
var initFilters = {};
|
|
147
|
-
//let columns = dataTableEl.current.props.children; - does not work
|
|
148
|
-
var columns = props.children;
|
|
149
|
-
try {
|
|
150
|
-
for (var columns_2 = __values(columns), columns_2_1 = columns_2.next(); !columns_2_1.done; columns_2_1 = columns_2.next()) {
|
|
151
|
-
var column = columns_2_1.value;
|
|
152
|
-
var xLazyColumn = column; // nevedel som to krajsie...
|
|
153
|
-
var field = xLazyColumn.props.field;
|
|
154
|
-
var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, field);
|
|
155
|
-
// TODO column.props.dropdownInFilter - pre "menu" by bolo fajn mat zoznam "enumov"
|
|
156
|
-
var filterMatchMode = getFilterMatchMode(xField);
|
|
157
|
-
initFilters[field] = createFilterItem(props.filterDisplay, { value: null, matchMode: filterMatchMode });
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
161
|
-
finally {
|
|
162
|
-
try {
|
|
163
|
-
if (columns_2_1 && !columns_2_1.done && (_a = columns_2.return)) _a.call(columns_2);
|
|
164
|
-
}
|
|
165
|
-
finally { if (e_2) throw e_2.error; }
|
|
166
|
-
}
|
|
167
|
-
return initFilters;
|
|
168
|
-
};
|
|
169
|
-
var getFilterMatchMode = function (xField) {
|
|
170
|
-
var filterMatchMode;
|
|
171
|
-
if (xField.type === "string") {
|
|
172
|
-
filterMatchMode = api_1.FilterMatchMode.STARTS_WITH;
|
|
173
|
-
}
|
|
174
|
-
// zatial vsetky ostatne EQUALS
|
|
175
|
-
else if (xField.type === "decimal" || xField.type === "number" || xField.type === "date" || xField.type === "datetime" || xField.type === "boolean") {
|
|
176
|
-
filterMatchMode = api_1.FilterMatchMode.EQUALS;
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
throw "XField ".concat(xField.name, ": unknown xField.type = ").concat(xField.type);
|
|
180
|
-
}
|
|
181
|
-
return filterMatchMode;
|
|
182
|
-
};
|
|
183
|
-
var createFilterItem = function (filterDisplay, constraint) {
|
|
184
|
-
var filterItem;
|
|
185
|
-
if (filterDisplay === "menu") {
|
|
186
|
-
// DataTableOperatorFilterMetaData: operator + filter values
|
|
187
|
-
filterItem = {
|
|
188
|
-
operator: api_1.FilterOperator.OR,
|
|
189
|
-
constraints: [constraint]
|
|
190
|
-
};
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
// props.filterDisplay === "row"
|
|
194
|
-
// DataTableFilterMetaData: filter value
|
|
195
|
-
filterItem = constraint;
|
|
196
|
-
}
|
|
197
|
-
return filterItem;
|
|
198
|
-
};
|
|
199
|
-
// premenne platne pre cely component (obdoba member premennych v class-e)
|
|
200
|
-
var dataTableEl = (0, react_1.useRef)(null);
|
|
201
|
-
var customFilter = props.customFilter;
|
|
202
|
-
var aggregateItems = createAggregateItems();
|
|
203
|
-
var _b = __read((0, react_1.useState)({ rowList: [], totalRecords: 0, aggregateValues: [] }), 2), value = _b[0], setValue = _b[1];
|
|
204
|
-
var _c = __read((0, react_1.useState)(false), 2), loading = _c[0], setLoading = _c[1];
|
|
205
|
-
var _d = __read((0, react_1.useState)(0), 2), first = _d[0], setFirst = _d[1];
|
|
206
|
-
var _e = __read((0, react_1.useState)(props.paginator ? props.rows : undefined), 2), rows = _e[0], setRows = _e[1];
|
|
207
|
-
var filtersInit = createInitFilters();
|
|
208
|
-
if (props.filters) {
|
|
209
|
-
filtersInit = __assign(__assign({}, filtersInit), props.filters); // items from props.filters will replace existing items in filtersInit
|
|
210
|
-
}
|
|
211
|
-
if (props.searchTableParams !== undefined) {
|
|
212
|
-
var displayFieldFilter = props.searchTableParams.displayFieldFilter;
|
|
213
|
-
if (displayFieldFilter !== undefined) {
|
|
214
|
-
filtersInit[displayFieldFilter.field] = createFilterItem(props.filterDisplay, displayFieldFilter.constraint);
|
|
215
|
-
}
|
|
216
|
-
// ak mame props.searchTableParams.customFilter, pridame ho
|
|
217
|
-
customFilter = XUtils_1.XUtils.filterAnd(customFilter, props.searchTableParams.customFilter);
|
|
218
|
-
}
|
|
219
|
-
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)
|
|
220
|
-
var _g = __read((0, react_1.useState)(props.sortField ? [{ field: props.sortField, order: 1 }] : []), 2), multiSortMeta = _g[0], setMultiSortMeta = _g[1];
|
|
221
|
-
var _h = __read((0, react_1.useState)(null), 2), selectedRow = _h[0], setSelectedRow = _h[1];
|
|
222
|
-
var _j = __read((_a = props.dataLoadedState) !== null && _a !== void 0 ? _a : (0, react_1.useState)(false), 2), dataLoaded = _j[0], setDataLoaded = _j[1]; // priznak kde si zapiseme, ci uz sme nacitali data
|
|
223
|
-
var _k = __read((0, react_1.useState)(false), 2), exportRowsDialogOpened = _k[0], setExportRowsDialogOpened = _k[1];
|
|
224
|
-
var _l = __read((0, react_1.useState)(), 2), exportRowsDialogRowCount = _l[0], setExportRowsDialogRowCount = _l[1]; // param pre dialog
|
|
225
|
-
var _m = __read((0, react_1.useState)(filtersInit), 2), filtersAfterFiltering = _m[0], setFiltersAfterFiltering = _m[1]; // sem si odkladame stav filtra po kliknuti na button Filter (chceme exportovat presne to co vidno vyfiltrovane)
|
|
226
|
-
// parameter [] zabezpeci ze sa metoda zavola len po prvom renderingu (a nie po kazdej zmene stavu (zavolani setNieco()))
|
|
227
|
-
(0, react_1.useEffect)(function () {
|
|
228
|
-
// jednoduchy sposob - nepouzivame parameter props.displayed a priznak dataLoaded
|
|
229
|
-
if (props.displayed === undefined) {
|
|
230
|
-
loadData();
|
|
231
|
-
//console.log("XLazyDataTable - data loaded (simple)");
|
|
232
|
-
}
|
|
233
|
-
}, []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
234
|
-
(0, react_1.useEffect)(function () {
|
|
235
|
-
// sposob pozivany pri XFormNavigator (potrebujeme refreshnut data pri navrate z formulara)
|
|
236
|
-
if (props.displayed !== undefined) {
|
|
237
|
-
if (props.displayed) {
|
|
238
|
-
if (!dataLoaded) {
|
|
239
|
-
loadData();
|
|
240
|
-
//console.log("XLazyDataTable - data loaded (used displayed)");
|
|
241
|
-
setDataLoaded(true);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
else {
|
|
245
|
-
// dataTable je skryta - ked sa na nu vratime, chceme mat priznak dataLoaded nastaveny na false, aby sme videli cerstve data
|
|
246
|
-
if (dataLoaded) {
|
|
247
|
-
setDataLoaded(false);
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
}); // eslint-disable-line react-hooks/exhaustive-deps
|
|
252
|
-
// TODO - preco je to tu? presunut dole ak sa da...
|
|
253
|
-
var dataKey = props.dataKey !== undefined ? props.dataKey : XUtilsMetadata_1.XUtilsMetadata.getXEntity(props.entity).idField;
|
|
254
|
-
var onPage = function (event) { return __awaiter(void 0, void 0, void 0, function () {
|
|
255
|
-
return __generator(this, function (_a) {
|
|
256
|
-
//console.log("zavolany onPage");
|
|
257
|
-
setFirst(event.first);
|
|
258
|
-
loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: event.first, rows: rows, filters: filters, customFilter: customFilter, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
|
|
259
|
-
return [2 /*return*/];
|
|
260
|
-
});
|
|
261
|
-
}); };
|
|
262
|
-
var onFilter = function (event) {
|
|
263
|
-
//console.log("zavolany onFilter - this.state.filters = " + JSON.stringify(filters));
|
|
264
|
-
//console.log("zavolany onFilter - event.filters = " + JSON.stringify(event.filters));
|
|
265
|
-
// tymto zavolanim sa zapise znak zapisany klavesnicou do inputu filtra (ak prikaz zakomentujeme, input filtra zostane prazdny)
|
|
266
|
-
setFilters(event.filters);
|
|
267
|
-
};
|
|
268
|
-
var onSort = function (event) {
|
|
269
|
-
//console.log("zavolany onSort - this.state.multiSortMeta = " + JSON.stringify(multiSortMeta));
|
|
270
|
-
//console.log("zavolany onSort - event.multiSortMeta = " + JSON.stringify(event.multiSortMeta));
|
|
271
|
-
setMultiSortMeta(event.multiSortMeta);
|
|
272
|
-
loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: first, rows: rows, filters: filters, customFilter: customFilter, multiSortMeta: event.multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
|
|
273
|
-
};
|
|
274
|
-
var onClickFilter = function () {
|
|
275
|
-
//console.log("zavolany onClickFilter");
|
|
276
|
-
loadData();
|
|
277
|
-
};
|
|
278
|
-
var onClickClearFilter = function () {
|
|
279
|
-
// najjednoduchsi sposob - pomeni aj pripadne nastavene matchMode hodnoty
|
|
280
|
-
var filtersInit = createInitFilters();
|
|
281
|
-
setFilters(filtersInit);
|
|
282
|
-
};
|
|
283
|
-
var loadData = function () {
|
|
284
|
-
loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: first, rows: rows, filters: filters, customFilter: customFilter, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
|
|
285
|
-
};
|
|
286
|
-
var loadDataBase = function (findParam) { return __awaiter(void 0, void 0, void 0, function () {
|
|
287
|
-
var findResult;
|
|
288
|
-
return __generator(this, function (_a) {
|
|
289
|
-
switch (_a.label) {
|
|
290
|
-
case 0:
|
|
291
|
-
//console.log("zavolany loadDataBase - startIndex = " + findParam.first + ", endIndex = " + ((findParam.first ?? 0) + (findParam.rows ?? 0)) + ", filters = " + JSON.stringify(findParam.filters) + ", multiSortMeta = " + JSON.stringify(findParam.multiSortMeta) + ", fields = " + JSON.stringify(findParam.fields));
|
|
292
|
-
setLoading(true);
|
|
293
|
-
return [4 /*yield*/, findByFilter(findParam)];
|
|
294
|
-
case 1:
|
|
295
|
-
findResult = _a.sent();
|
|
296
|
-
setValue(findResult);
|
|
297
|
-
setLoading(false);
|
|
298
|
-
// odlozime si filter hodnoty pre pripadny export - deep cloning vyzera ze netreba
|
|
299
|
-
setFiltersAfterFiltering(filters);
|
|
300
|
-
return [2 /*return*/];
|
|
301
|
-
}
|
|
302
|
-
});
|
|
303
|
-
}); };
|
|
304
|
-
var findByFilter = function (findParam) { return __awaiter(void 0, void 0, void 0, function () {
|
|
305
|
-
var findResult;
|
|
306
|
-
return __generator(this, function (_a) {
|
|
307
|
-
switch (_a.label) {
|
|
308
|
-
case 0: return [4 /*yield*/, XUtils_1.XUtils.fetchOne('lazyDataTableFindRows', findParam)];
|
|
309
|
-
case 1:
|
|
310
|
-
findResult = _a.sent();
|
|
311
|
-
findResult.totalRecords = parseInt(findResult.totalRecords);
|
|
312
|
-
return [2 /*return*/, findResult];
|
|
313
|
-
}
|
|
314
|
-
});
|
|
315
|
-
}); };
|
|
316
|
-
var getFields = function () {
|
|
317
|
-
// krasne zobrazi cely objekt!
|
|
318
|
-
//console.log(dataTableEl.current);
|
|
319
|
-
var e_3, _a;
|
|
320
|
-
var fields = [];
|
|
321
|
-
var columns = dataTableEl.current.props.children;
|
|
322
|
-
try {
|
|
323
|
-
for (var columns_3 = __values(columns), columns_3_1 = columns_3.next(); !columns_3_1.done; columns_3_1 = columns_3.next()) {
|
|
324
|
-
var column = columns_3_1.value;
|
|
325
|
-
fields.push(column.props.field);
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
329
|
-
finally {
|
|
330
|
-
try {
|
|
331
|
-
if (columns_3_1 && !columns_3_1.done && (_a = columns_3.return)) _a.call(columns_3);
|
|
332
|
-
}
|
|
333
|
-
finally { if (e_3) throw e_3.error; }
|
|
334
|
-
}
|
|
335
|
-
return fields;
|
|
336
|
-
};
|
|
337
|
-
var getHeaders = function () {
|
|
338
|
-
// krasne zobrazi cely objekt!
|
|
339
|
-
//console.log(dataTableEl.current);
|
|
340
|
-
var e_4, _a;
|
|
341
|
-
var headers = [];
|
|
342
|
-
var columns = dataTableEl.current.props.children;
|
|
343
|
-
try {
|
|
344
|
-
for (var columns_4 = __values(columns), columns_4_1 = columns_4.next(); !columns_4_1.done; columns_4_1 = columns_4.next()) {
|
|
345
|
-
var column = columns_4_1.value;
|
|
346
|
-
// pozor! headers tahame z primereact DataTable a napr. pri editacii nemusi byt v atribute header string
|
|
347
|
-
headers.push(column.props.header);
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
351
|
-
finally {
|
|
352
|
-
try {
|
|
353
|
-
if (columns_4_1 && !columns_4_1.done && (_a = columns_4.return)) _a.call(columns_4);
|
|
354
|
-
}
|
|
355
|
-
finally { if (e_4) throw e_4.error; }
|
|
356
|
-
}
|
|
357
|
-
return headers;
|
|
358
|
-
};
|
|
359
|
-
var onSelectionChange = function (event) {
|
|
360
|
-
//console.log("zavolany onSelectionChange");
|
|
361
|
-
//console.log(event.value);
|
|
362
|
-
setSelectedRow(event.value);
|
|
363
|
-
};
|
|
364
|
-
var onRowDoubleClick = function (event) {
|
|
365
|
-
//console.log("zavolany onRowDoubleClick");
|
|
366
|
-
//console.log(event.data);
|
|
367
|
-
if (props.onEdit !== undefined) {
|
|
368
|
-
props.onEdit(event.data);
|
|
369
|
-
}
|
|
370
|
-
else if (props.searchTableParams !== undefined) {
|
|
371
|
-
props.searchTableParams.onChoose(event.data);
|
|
372
|
-
}
|
|
373
|
-
};
|
|
374
|
-
var onClickAddRow = function () {
|
|
375
|
-
//console.log("zavolany onClickAddRow");
|
|
376
|
-
if (props.onAddRow !== undefined) {
|
|
377
|
-
props.onAddRow();
|
|
378
|
-
}
|
|
379
|
-
};
|
|
380
|
-
var onClickEdit = function () {
|
|
381
|
-
//console.log("zavolany onClickEdit");
|
|
382
|
-
if (selectedRow !== null) {
|
|
383
|
-
if (props.onEdit !== undefined) {
|
|
384
|
-
props.onEdit(selectedRow);
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
else {
|
|
388
|
-
alert((0, XLocale_1.xLocaleOption)('pleaseSelectRow'));
|
|
389
|
-
}
|
|
390
|
-
};
|
|
391
|
-
var onClickRemoveRow = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
392
|
-
var reread, e_5, e_6;
|
|
393
|
-
return __generator(this, function (_a) {
|
|
394
|
-
switch (_a.label) {
|
|
395
|
-
case 0:
|
|
396
|
-
if (!(selectedRow !== null)) return [3 /*break*/, 11];
|
|
397
|
-
if (!(props.removeRow instanceof Function)) return [3 /*break*/, 5];
|
|
398
|
-
reread = true;
|
|
399
|
-
_a.label = 1;
|
|
400
|
-
case 1:
|
|
401
|
-
_a.trys.push([1, 3, , 4]);
|
|
402
|
-
return [4 /*yield*/, props.removeRow(selectedRow)];
|
|
403
|
-
case 2:
|
|
404
|
-
reread = _a.sent();
|
|
405
|
-
return [3 /*break*/, 4];
|
|
406
|
-
case 3:
|
|
407
|
-
e_5 = _a.sent();
|
|
408
|
-
XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'), e_5);
|
|
409
|
-
return [3 /*break*/, 4];
|
|
410
|
-
case 4:
|
|
411
|
-
if (reread) {
|
|
412
|
-
loadData();
|
|
413
|
-
if (props.onRemoveRow) {
|
|
414
|
-
props.onRemoveRow(selectedRow, XUtils_1.OperationType.Remove);
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
return [3 /*break*/, 10];
|
|
418
|
-
case 5:
|
|
419
|
-
if (!window.confirm((0, XLocale_1.xLocaleOption)('removeRowConfirm'))) return [3 /*break*/, 10];
|
|
420
|
-
_a.label = 6;
|
|
421
|
-
case 6:
|
|
422
|
-
_a.trys.push([6, 8, , 9]);
|
|
423
|
-
// poznamka: vdaka await bude loadData() bezat az po dobehnuti requestu removeRow
|
|
424
|
-
return [4 /*yield*/, XUtils_1.XUtils.removeRow(props.entity, selectedRow)];
|
|
425
|
-
case 7:
|
|
426
|
-
// poznamka: vdaka await bude loadData() bezat az po dobehnuti requestu removeRow
|
|
427
|
-
_a.sent();
|
|
428
|
-
return [3 /*break*/, 9];
|
|
429
|
-
case 8:
|
|
430
|
-
e_6 = _a.sent();
|
|
431
|
-
XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'), e_6);
|
|
432
|
-
return [3 /*break*/, 9];
|
|
433
|
-
case 9:
|
|
434
|
-
loadData();
|
|
435
|
-
if (props.onRemoveRow) {
|
|
436
|
-
props.onRemoveRow(selectedRow, XUtils_1.OperationType.Remove);
|
|
437
|
-
}
|
|
438
|
-
_a.label = 10;
|
|
439
|
-
case 10: return [3 /*break*/, 12];
|
|
440
|
-
case 11:
|
|
441
|
-
alert((0, XLocale_1.xLocaleOption)('pleaseSelectRow'));
|
|
442
|
-
_a.label = 12;
|
|
443
|
-
case 12: return [2 /*return*/];
|
|
444
|
-
}
|
|
445
|
-
});
|
|
446
|
-
}); };
|
|
447
|
-
var onClickExport = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
448
|
-
var findParam, findResult;
|
|
449
|
-
return __generator(this, function (_a) {
|
|
450
|
-
switch (_a.label) {
|
|
451
|
-
case 0:
|
|
452
|
-
findParam = { resultType: FindParam_1.ResultType.OnlyRowCount, first: first, rows: rows, filters: filtersAfterFiltering, customFilter: customFilter, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems };
|
|
453
|
-
return [4 /*yield*/, findByFilter(findParam)];
|
|
454
|
-
case 1:
|
|
455
|
-
findResult = _a.sent();
|
|
456
|
-
//setLoading(false);
|
|
457
|
-
setExportRowsDialogRowCount(findResult.totalRecords); // param pre dialog
|
|
458
|
-
setExportRowsDialogOpened(true);
|
|
459
|
-
return [2 /*return*/];
|
|
460
|
-
}
|
|
461
|
-
});
|
|
462
|
-
}); };
|
|
463
|
-
var createExportParams = function () {
|
|
464
|
-
var queryParam = { filters: filtersAfterFiltering, customFilter: customFilter, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields() };
|
|
465
|
-
return {
|
|
466
|
-
path: "x-lazy-data-table-export",
|
|
467
|
-
queryParam: queryParam,
|
|
468
|
-
headers: getHeaders(),
|
|
469
|
-
fileName: "".concat(props.entity)
|
|
470
|
-
};
|
|
471
|
-
};
|
|
472
|
-
var onClickChoose = function () {
|
|
473
|
-
//console.log("zavolany onClickChoose");
|
|
474
|
-
if (selectedRow !== null) {
|
|
475
|
-
if (props.searchTableParams !== undefined) {
|
|
476
|
-
props.searchTableParams.onChoose(selectedRow);
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
else {
|
|
480
|
-
console.log("Nie je vyselectovany ziaden zaznam.");
|
|
481
|
-
}
|
|
482
|
-
};
|
|
483
|
-
// ****** dropdown vo filtri ********
|
|
484
|
-
// pouziva sa len pre simple filtrovanie (filterDisplay="row")
|
|
485
|
-
var onDropdownFilterChange = function (field, displayValue) {
|
|
486
|
-
var filterValue = displayValue !== XUtils_1.XUtils.dropdownEmptyOptionValue ? displayValue : null;
|
|
487
|
-
setFilterValue(field, filterValue, api_1.FilterMatchMode.EQUALS);
|
|
488
|
-
};
|
|
489
|
-
var getDropdownFilterValue = function (field) {
|
|
490
|
-
var filterValue = getFilterValue(field);
|
|
491
|
-
return filterValue !== null ? filterValue : XUtils_1.XUtils.dropdownEmptyOptionValue;
|
|
492
|
-
};
|
|
493
|
-
// ****** vseobecne metodky pre set/get do/z filtra ********
|
|
494
|
-
// zatial funguje len pre simple filtrovanie (filterDisplay="row")
|
|
495
|
-
// vseobecna specialna metodka pouzvana pri custom filtri (XLazyColumn.filterElement)
|
|
496
|
-
var setFilterItem = function (field, filterItem) {
|
|
497
|
-
filters[field] = filterItem;
|
|
498
|
-
// neskusal som, ci treba aj toto klonovat ale pravdepodobne hej
|
|
499
|
-
var filtersCloned = __assign({}, filters);
|
|
500
|
-
setFilters(filtersCloned);
|
|
501
|
-
};
|
|
502
|
-
// vseobecna specialna metodka pouzvana pri custom filtri (XLazyColumn.filterElement)
|
|
503
|
-
var getFilterItem = function (field) {
|
|
504
|
-
return filters[field];
|
|
505
|
-
};
|
|
506
|
-
// vseobecna metodka - nastavi hodnotu do filtra
|
|
507
|
-
// ak je matchMode === undefined, tak zachova povodnu hodnotu matchMode
|
|
508
|
-
var setFilterValue = function (field, value, matchMode) {
|
|
509
|
-
var filterValue = filters[field]; // funguje len pre filterDisplay="row"
|
|
510
|
-
filterValue.value = value;
|
|
511
|
-
if (matchMode !== undefined) {
|
|
512
|
-
filterValue.matchMode = matchMode;
|
|
513
|
-
}
|
|
514
|
-
// treba klonovat, inac react nezobrazi zmenenu hodnotu
|
|
515
|
-
var filtersCloned = __assign({}, filters);
|
|
516
|
-
setFilters(filtersCloned);
|
|
517
|
-
};
|
|
518
|
-
// vseobecna metodka - precita hodnotu z filtra (vrati napr. typ Date | null)
|
|
519
|
-
var getFilterValue = function (field) {
|
|
520
|
-
var filterValue = filters[field]; // funguje len pre filterDisplay="row"
|
|
521
|
-
return filterValue.value;
|
|
522
|
-
};
|
|
523
|
-
// ****** vseobecne metodky pre set/get do/z filtra - pre betweenFilter ********
|
|
524
|
-
// do DataTableFilterMetaData.value ulozime dvojprvkove pole [value1, value2]
|
|
525
|
-
// na backende spracujeme toto dvojprvkove pole
|
|
526
|
-
var setFilterValue1 = function (field, value) {
|
|
527
|
-
// na zaciatku (po inicializacii lazy table) je filterValue = null
|
|
528
|
-
var filterValue = getFilterValue(field);
|
|
529
|
-
if (filterValue !== null) {
|
|
530
|
-
filterValue[0] = value;
|
|
531
|
-
}
|
|
532
|
-
else {
|
|
533
|
-
filterValue = [value, null];
|
|
534
|
-
}
|
|
535
|
-
setFilterValue(field, filterValue, api_1.FilterMatchMode.BETWEEN);
|
|
536
|
-
};
|
|
537
|
-
var setFilterValue2 = function (field, value) {
|
|
538
|
-
// na zaciatku (po inicializacii lazy table) je filterValue = null
|
|
539
|
-
var filterValue = getFilterValue(field);
|
|
540
|
-
if (filterValue !== null) {
|
|
541
|
-
filterValue[1] = value;
|
|
542
|
-
}
|
|
543
|
-
else {
|
|
544
|
-
filterValue = [null, value];
|
|
545
|
-
}
|
|
546
|
-
setFilterValue(field, filterValue, api_1.FilterMatchMode.BETWEEN);
|
|
547
|
-
};
|
|
548
|
-
var getFilterValue1 = function (field) {
|
|
549
|
-
return getFilterValue1or2(field, 0);
|
|
550
|
-
};
|
|
551
|
-
var getFilterValue2 = function (field) {
|
|
552
|
-
return getFilterValue1or2(field, 1);
|
|
553
|
-
};
|
|
554
|
-
var getFilterValue1or2 = function (field, index) {
|
|
555
|
-
var filterValue = getFilterValue(field);
|
|
556
|
-
return filterValue !== null ? filterValue[index] : null;
|
|
557
|
-
};
|
|
558
|
-
var getBetweenFilter = function (columnBetweenFilter, tableBetweenFilter) {
|
|
559
|
-
var betweenFilter = undefined;
|
|
560
|
-
// columnBetweenFilter has higher prio than tableBetweenFilter
|
|
561
|
-
if (columnBetweenFilter !== undefined) {
|
|
562
|
-
if (columnBetweenFilter === "row" || columnBetweenFilter === "column") {
|
|
563
|
-
betweenFilter = columnBetweenFilter;
|
|
564
|
-
}
|
|
565
|
-
// for "noBetween" stays betweenFilter = undefined (simple filter used)
|
|
566
|
-
}
|
|
567
|
-
else {
|
|
568
|
-
betweenFilter = tableBetweenFilter; // betweenFilter from XLazyDataTable property
|
|
569
|
-
}
|
|
570
|
-
return betweenFilter;
|
|
571
|
-
};
|
|
572
|
-
var bodyTemplate = function (columnProps, rowData, xField) {
|
|
573
|
-
var rowDataValue = XUtilsCommon_1.XUtilsCommon.getValueByPath(rowData, columnProps.field);
|
|
574
|
-
var bodyValue = '';
|
|
575
|
-
if (xField.type === "decimal") {
|
|
576
|
-
// tuto zatial hack, mal by vzdy prist number
|
|
577
|
-
var numberValue = null;
|
|
578
|
-
if (typeof rowDataValue === 'string') {
|
|
579
|
-
numberValue = parseFloat(rowDataValue);
|
|
580
|
-
}
|
|
581
|
-
else if (typeof rowDataValue === 'number') {
|
|
582
|
-
numberValue = rowDataValue;
|
|
583
|
-
}
|
|
584
|
-
bodyValue = (0, XUtilsConversions_1.numberAsUI)(numberValue, xField.scale);
|
|
585
|
-
}
|
|
586
|
-
else if (xField.type === "date") {
|
|
587
|
-
// tuto zatial hack, mal by prist Date
|
|
588
|
-
var dateValue = null;
|
|
589
|
-
if (typeof rowDataValue === 'string') {
|
|
590
|
-
dateValue = new Date(rowDataValue);
|
|
591
|
-
}
|
|
592
|
-
else if (typeof rowDataValue === 'object' && rowDataValue instanceof Date) {
|
|
593
|
-
dateValue = rowDataValue;
|
|
594
|
-
}
|
|
595
|
-
bodyValue = (0, XUtilsConversions_1.dateAsUI)(dateValue);
|
|
596
|
-
}
|
|
597
|
-
else if (xField.type === "datetime") {
|
|
598
|
-
// tuto zatial hack, mal by prist Date
|
|
599
|
-
var dateValue = null;
|
|
600
|
-
if (typeof rowDataValue === 'string') {
|
|
601
|
-
dateValue = new Date(rowDataValue);
|
|
602
|
-
}
|
|
603
|
-
else if (typeof rowDataValue === 'object' && rowDataValue instanceof Date) {
|
|
604
|
-
dateValue = rowDataValue;
|
|
605
|
-
}
|
|
606
|
-
bodyValue = (0, XUtilsConversions_1.datetimeAsUI)(dateValue);
|
|
607
|
-
}
|
|
608
|
-
else if (xField.type === "boolean") {
|
|
609
|
-
// TODO - efektivnejsie by bolo renderovat len prislusne ikonky
|
|
610
|
-
bodyValue = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: rowDataValue, disabled: true });
|
|
611
|
-
}
|
|
612
|
-
return bodyValue;
|
|
613
|
-
};
|
|
614
|
-
// ak mame scrollWidth/scrollHeight = viewport (default), vyratame scrollWidth/scrollHeight tak aby tabulka "sadla" do okna (viewport-u)
|
|
615
|
-
var scrollWidth = undefined; // vypnute horizontalne scrollovanie
|
|
616
|
-
var scrollHeight = undefined; // vypnute vertikalne scrollovanie
|
|
617
|
-
if (props.scrollable) {
|
|
618
|
-
if (props.scrollWidth !== "none") {
|
|
619
|
-
scrollWidth = props.scrollWidth;
|
|
620
|
-
if (scrollWidth === "viewport") {
|
|
621
|
-
scrollWidth = 'calc(100vw - 1.4rem)'; // 20px okraje
|
|
622
|
-
}
|
|
623
|
-
}
|
|
624
|
-
if (props.scrollHeight !== "none") {
|
|
625
|
-
scrollHeight = props.scrollHeight;
|
|
626
|
-
if (scrollHeight === "viewport") {
|
|
627
|
-
// vypocet je priblizny, robeny na mobil, desktop bude mat mozno iny
|
|
628
|
-
//const headerHeight = XUtils.toPX0('12.7rem');
|
|
629
|
-
//let footerHeight = XUtils.toPX0('3.7rem') + XUtils.toPX0('3rem'); // table footer (paging) + buttons Add row, Edit, ...
|
|
630
|
-
// na desktope mi nechce odpocitat vysku taskbar-u od window.screen.availHeight, tak to poriesime takymto hack-om:
|
|
631
|
-
// if (!XUtils.isMobile()) {
|
|
632
|
-
// footerHeight += XUtils.toPX0('6rem'); // priblizna vyska taskbaru (ak mam 2 rady buttonov)
|
|
633
|
-
// }
|
|
634
|
-
var viewHeight = void 0;
|
|
635
|
-
var headerFooterHeight = void 0;
|
|
636
|
-
if (props.searchTableParams === undefined) {
|
|
637
|
-
// sme v standardnom formulari
|
|
638
|
-
viewHeight = '100vh';
|
|
639
|
-
// experimentalne zistena vyska header/footer
|
|
640
|
-
// da sa vyratat ako vysku body (celej stranky) - vyska div-u ktory sa scrolluje (div na ktorom je style="max-height: calc(100vh - 266.42px);)
|
|
641
|
-
// (treba odratat vysku paginatora a formFooterHeight (lebo tie sa odratavaju nizsie))
|
|
642
|
-
headerFooterHeight = XUtils_1.XUtils.toPX0('10.89rem');
|
|
643
|
-
}
|
|
644
|
-
else {
|
|
645
|
-
// sme v dialogu
|
|
646
|
-
if (XUtils_1.XUtils.isMobile()) {
|
|
647
|
-
viewHeight = '98vh'; // .p-dialog pre mobil ma max-height: 98%
|
|
648
|
-
headerFooterHeight = XUtils_1.XUtils.toPX0('12.03rem'); // rucne zratane
|
|
649
|
-
}
|
|
650
|
-
else {
|
|
651
|
-
viewHeight = '90vh'; // .p-dialog pre desktop ma max-height: 90%
|
|
652
|
-
headerFooterHeight = XUtils_1.XUtils.toPX0('13.03rem'); // rucne zratane (desktop ma vecsi margin dole na dialogu)
|
|
653
|
-
}
|
|
654
|
-
}
|
|
655
|
-
// pridame vysku paging-u, ak treba
|
|
656
|
-
if (props.paginator) {
|
|
657
|
-
headerFooterHeight += XUtils_1.XUtils.toPX0('3.71rem');
|
|
658
|
-
}
|
|
659
|
-
// este pridame vysku linkov na zdrojaky, ak treba
|
|
660
|
-
if (props.formFooterHeight !== undefined) {
|
|
661
|
-
headerFooterHeight += XUtils_1.XUtils.toPX0(XUtils_1.XUtils.processGridBreakpoints(props.formFooterHeight));
|
|
662
|
-
}
|
|
663
|
-
scrollHeight = "calc(".concat(viewHeight, " - ").concat(headerFooterHeight, "px)");
|
|
664
|
-
}
|
|
665
|
-
}
|
|
666
|
-
}
|
|
667
|
-
var style = {};
|
|
668
|
-
if (scrollWidth !== undefined) {
|
|
669
|
-
style.width = scrollWidth;
|
|
670
|
-
}
|
|
671
|
-
if (props.shrinkWidth) {
|
|
672
|
-
style.maxWidth = 'min-content'; // ak nic nedame (nechame auto), tak (v pripade ak nebudeme mat horizontalny scrollbar) natiahne tabulku na celu sirku stranky, co nechceme
|
|
673
|
-
}
|
|
674
|
-
// pri prechode z Primereact 6.x na 9.x sa tableLayout zmenil z fixed na auto a nefungovalo nastavenie sirok stlpcov - docasne teda takto
|
|
675
|
-
var tableStyle = { tableLayout: 'fixed' };
|
|
676
|
-
if (props.width !== undefined) {
|
|
677
|
-
var width = props.width;
|
|
678
|
-
if (!isNaN(Number(width))) { // if width is number
|
|
679
|
-
width = width + 'rem';
|
|
680
|
-
}
|
|
681
|
-
tableStyle = __assign(__assign({}, tableStyle), { width: width });
|
|
682
|
-
}
|
|
683
|
-
// check
|
|
684
|
-
if ((props.editMode === true || props.editMode === false) && props.editModeHandlers === undefined) {
|
|
685
|
-
throw "XLazyDataTable: for props.editMode = true/false, props.editModeHandlers must be defined.";
|
|
686
|
-
}
|
|
687
|
-
// pouzivame paginatorLeft aj paginatorRight (aj prazdny) pouzivame, aby bol default paginator v strede (bez paginatorLeft je default paginator presunuty dolava a naopak)
|
|
688
|
-
// sirku div-ov este nastavujeme v css na 10rem
|
|
689
|
-
var paginatorLeft = react_1.default.createElement("div", null,
|
|
690
|
-
(0, XLocale_1.xLocaleOption)('totalRecords'),
|
|
691
|
-
": ",
|
|
692
|
-
value.totalRecords);
|
|
693
|
-
var paginatorRight = react_1.default.createElement("div", null);
|
|
694
|
-
if (props.editMode === true) {
|
|
695
|
-
paginatorRight = react_1.default.createElement("div", null,
|
|
696
|
-
react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-save", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onSave(); }, tooltip: "Save form" }),
|
|
697
|
-
react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-times", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onCancel(); }, tooltip: "Cancel editing" }));
|
|
698
|
-
}
|
|
699
|
-
else if (props.editMode === false) {
|
|
700
|
-
paginatorRight = react_1.default.createElement("div", null,
|
|
701
|
-
react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-pencil", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onStart(); }, tooltip: "Edit form" }));
|
|
702
|
-
}
|
|
703
|
-
// else - editMode is undefined - browse is not editable
|
|
704
|
-
// export pre search button-y zatial vypneme
|
|
705
|
-
var exportRows = (props.searchTableParams === undefined);
|
|
706
|
-
// pre lepsiu citatelnost vytvarame stlpce uz tu
|
|
707
|
-
var columnElemList = react_1.default.Children.map(props.children, function (child) {
|
|
708
|
-
// ak chceme zmenit child element, tak treba bud vytvorit novy alebo vyklonovat
|
|
709
|
-
// priklad je na https://soshace.com/building-react-components-using-children-props-and-context-api/
|
|
710
|
-
// (vzdy musime robit manipulacie so stlpcom, lebo potrebujeme pridat filter={true} sortable={true}
|
|
711
|
-
var childColumn = child; // nevedel som to krajsie...
|
|
712
|
-
var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, childColumn.props.field);
|
|
713
|
-
// *********** header ***********
|
|
714
|
-
var headerLabel = childColumn.props.header !== undefined ? childColumn.props.header : childColumn.props.field;
|
|
715
|
-
var header;
|
|
716
|
-
if (props.editMode === true) {
|
|
717
|
-
header = react_1.default.createElement("div", null,
|
|
718
|
-
react_1.default.createElement("div", null,
|
|
719
|
-
react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-plus", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onAddColumn(childColumn.props.field); }, tooltip: "Add column" }),
|
|
720
|
-
react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-pencil", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onEditColumn(childColumn.props.field); }, tooltip: "Edit column" }),
|
|
721
|
-
react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-trash", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onRemoveColumn(childColumn.props.field); }, tooltip: "Remove column" })),
|
|
722
|
-
react_1.default.createElement("div", null,
|
|
723
|
-
react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-chevron-left", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onMoveColumnLeft(childColumn.props.field); }, tooltip: "Move column left" }),
|
|
724
|
-
react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-chevron-right", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onMoveColumnRight(childColumn.props.field); }, tooltip: "Move column right" })),
|
|
725
|
-
react_1.default.createElement("div", null, headerLabel));
|
|
726
|
-
}
|
|
727
|
-
else {
|
|
728
|
-
header = headerLabel;
|
|
729
|
-
}
|
|
730
|
-
// *********** filterElement ***********
|
|
731
|
-
var betweenFilter = undefined;
|
|
732
|
-
var filterElement;
|
|
733
|
-
if (childColumn.props.filterElement !== undefined) {
|
|
734
|
-
filterElement = function (options) {
|
|
735
|
-
// compilator sa stazoval ze childColumn.props.filterElement moze byt undefined, preto som pridal "!"
|
|
736
|
-
return childColumn.props.filterElement({ getFilterItem: getFilterItem, setFilterItem: setFilterItem, options: options });
|
|
737
|
-
};
|
|
738
|
-
}
|
|
739
|
-
else {
|
|
740
|
-
if (xField.type === "boolean") {
|
|
741
|
-
var checkboxValue = getFilterValue(childColumn.props.field);
|
|
742
|
-
filterElement = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: checkboxValue, onChange: function (e) { return setFilterValue(childColumn.props.field, e.value, api_1.FilterMatchMode.EQUALS); } });
|
|
743
|
-
}
|
|
744
|
-
else if (childColumn.props.dropdownInFilter) {
|
|
745
|
-
var dropdownValue = getDropdownFilterValue(childColumn.props.field);
|
|
746
|
-
filterElement = react_1.default.createElement(XDropdownDTFilter_1.XDropdownDTFilter, { entity: props.entity, path: childColumn.props.field, value: dropdownValue, onValueChange: onDropdownFilterChange });
|
|
747
|
-
}
|
|
748
|
-
else if (xField.type === "date" || xField.type === "datetime") {
|
|
749
|
-
betweenFilter = getBetweenFilter(childColumn.props.betweenFilter, props.betweenFilter);
|
|
750
|
-
if (betweenFilter !== undefined) {
|
|
751
|
-
// display: 'flex' umiestni XCalendar elementy vedla seba
|
|
752
|
-
filterElement =
|
|
753
|
-
react_1.default.createElement("div", { style: betweenFilter === "row" ? { display: 'flex' } : undefined },
|
|
754
|
-
react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value); }, datetime: xField.type === "datetime" }),
|
|
755
|
-
react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value); }, datetime: xField.type === "datetime" }));
|
|
756
|
-
}
|
|
757
|
-
else {
|
|
758
|
-
var dateValue = getFilterValue(childColumn.props.field);
|
|
759
|
-
filterElement = react_1.default.createElement(XCalendar_1.XCalendar, { value: dateValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value); }, datetime: xField.type === "datetime" });
|
|
760
|
-
}
|
|
761
|
-
}
|
|
762
|
-
else if (xField.type === "decimal" || xField.type === "number") {
|
|
763
|
-
var params = XUtilsMetadata_1.XUtilsMetadata.getParamsForInputNumber(xField);
|
|
764
|
-
betweenFilter = getBetweenFilter(childColumn.props.betweenFilter, props.betweenFilter);
|
|
765
|
-
if (betweenFilter !== undefined) {
|
|
766
|
-
// display: 'flex' umiestni input elementy pod seba (betweenFilter = "column") resp. vedla seba (betweenFilter = "row")
|
|
767
|
-
filterElement =
|
|
768
|
-
react_1.default.createElement("div", { style: { display: 'flex', flexDirection: betweenFilter } },
|
|
769
|
-
react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value); } }, params)),
|
|
770
|
-
react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value); } }, params)));
|
|
771
|
-
}
|
|
772
|
-
else {
|
|
773
|
-
var numberValue = getFilterValue(childColumn.props.field);
|
|
774
|
-
filterElement = react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: numberValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value); } }, params));
|
|
775
|
-
}
|
|
776
|
-
}
|
|
777
|
-
}
|
|
778
|
-
// ************** dataType **************
|
|
779
|
-
// depending on the dataType of the column, suitable match modes are displayed in filter
|
|
780
|
-
var dataType = undefined;
|
|
781
|
-
if (xField.type === "decimal" || xField.type === "number") {
|
|
782
|
-
dataType = "numeric";
|
|
783
|
-
}
|
|
784
|
-
else if (xField.type === "date" || xField.type === "datetime") {
|
|
785
|
-
dataType = "date";
|
|
786
|
-
}
|
|
787
|
-
// *********** showFilterMenu ***********
|
|
788
|
-
var showFilterMenu;
|
|
789
|
-
if (childColumn.props.showFilterMenu !== undefined) {
|
|
790
|
-
showFilterMenu = childColumn.props.showFilterMenu;
|
|
791
|
-
}
|
|
792
|
-
else {
|
|
793
|
-
showFilterMenu = true; // default
|
|
794
|
-
if (props.filterDisplay === "row") {
|
|
795
|
-
if (xField.type === "boolean" || childColumn.props.dropdownInFilter || betweenFilter !== undefined) {
|
|
796
|
-
showFilterMenu = false;
|
|
797
|
-
}
|
|
798
|
-
}
|
|
799
|
-
}
|
|
800
|
-
// *********** showClearButton ***********
|
|
801
|
-
// pre filterDisplay = "row" nechceme clear button, chceme setrit miesto
|
|
802
|
-
var showClearButton = props.filterDisplay === "menu";
|
|
803
|
-
// *********** body ***********
|
|
804
|
-
var body;
|
|
805
|
-
if (childColumn.props.body !== undefined) {
|
|
806
|
-
body = childColumn.props.body;
|
|
807
|
-
}
|
|
808
|
-
// TODO - mozno by bolo dobre vytvarat body pre kazdy typ fieldu, nech je to vsetko konzistentne
|
|
809
|
-
else if (xField.type === "decimal" || xField.type === "date" || xField.type === "datetime" || xField.type === "boolean") {
|
|
810
|
-
body = function (rowData) { return bodyTemplate(childColumn.props, rowData, xField); };
|
|
811
|
-
}
|
|
812
|
-
// *********** width/headerStyle ***********
|
|
813
|
-
var width = XUtils_1.XUtils.processPropWidth(childColumn.props.width);
|
|
814
|
-
if (width === undefined || width === "default") {
|
|
815
|
-
// TODO - if filter not used at all, then buttons flags should be false
|
|
816
|
-
var filterMenuInFilterRow = props.filterDisplay === "row" && showFilterMenu;
|
|
817
|
-
var filterButtonInHeader = props.filterDisplay === "menu";
|
|
818
|
-
width = XUtilsMetadata_1.XUtilsMetadata.computeColumnWidth(xField, betweenFilter, filterMenuInFilterRow, undefined, headerLabel, true, filterButtonInHeader);
|
|
819
|
-
}
|
|
820
|
-
var headerStyle = {};
|
|
821
|
-
if (width !== undefined) {
|
|
822
|
-
headerStyle = { width: width };
|
|
823
|
-
}
|
|
824
|
-
// *********** align ***********
|
|
825
|
-
var align = undefined; // default undefined (left)
|
|
826
|
-
if (childColumn.props.align !== undefined && childColumn.props.align !== null) {
|
|
827
|
-
align = childColumn.props.align;
|
|
828
|
-
}
|
|
829
|
-
else {
|
|
830
|
-
// decimal defaultne zarovnavame doprava
|
|
831
|
-
if (xField.type === "decimal") {
|
|
832
|
-
align = "right";
|
|
833
|
-
}
|
|
834
|
-
else if (xField.type === "boolean") {
|
|
835
|
-
align = "center";
|
|
836
|
-
}
|
|
837
|
-
}
|
|
838
|
-
// *********** footer ***********
|
|
839
|
-
var footer = undefined;
|
|
840
|
-
if (childColumn.props.aggregateType && value.aggregateValues) {
|
|
841
|
-
var aggregateValue = value.aggregateValues[childColumn.props.field];
|
|
842
|
-
if (aggregateValue !== undefined && aggregateValue !== null) {
|
|
843
|
-
if (xField.type === "decimal" || xField.type === "number") {
|
|
844
|
-
// v json subore su stringy (cislo v ""), konvertujeme aby sme zmenili 123.45 na 123,45
|
|
845
|
-
aggregateValue = (0, XUtilsConversions_1.numberAsUI)((0, XUtilsConversions_1.numberFromModel)(aggregateValue), xField.scale);
|
|
846
|
-
}
|
|
847
|
-
}
|
|
848
|
-
else {
|
|
849
|
-
aggregateValue = ""; // nemame este nacitane data
|
|
850
|
-
}
|
|
851
|
-
footer = aggregateValue;
|
|
852
|
-
}
|
|
853
|
-
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 });
|
|
854
|
-
});
|
|
855
|
-
return (react_1.default.createElement("div", null,
|
|
856
|
-
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
857
|
-
react_1.default.createElement(XButton_1.XButton, { key: "filter", label: (0, XLocale_1.xLocaleOption)('filter'), onClick: onClickFilter }),
|
|
858
|
-
react_1.default.createElement(XButton_1.XButton, { key: "clearFilter", label: (0, XLocale_1.xLocaleOption)('clearFilter'), onClick: onClickClearFilter })),
|
|
859
|
-
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
860
|
-
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, 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)),
|
|
861
|
-
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
862
|
-
props.onAddRow !== undefined ? react_1.default.createElement(XButton_1.XButton, { key: "addRow", icon: "pi pi-plus", label: (0, XLocale_1.xLocaleOption)('addRow'), onClick: onClickAddRow }) : null,
|
|
863
|
-
props.onEdit !== undefined ? react_1.default.createElement(XButton_1.XButton, { key: "editRow", icon: "pi pi-pencil", label: (0, XLocale_1.xLocaleOption)('editRow'), onClick: onClickEdit }) : null,
|
|
864
|
-
props.removeRow !== undefined && props.removeRow !== false ? react_1.default.createElement(XButton_1.XButton, { key: "removeRow", icon: "pi pi-times", label: (0, XLocale_1.xLocaleOption)('removeRow'), onClick: onClickRemoveRow }) : null,
|
|
865
|
-
exportRows ? react_1.default.createElement(XButton_1.XButton, { key: "exportRows", icon: "pi pi-file-export", label: (0, XLocale_1.xLocaleOption)('exportRows'), onClick: onClickExport }) : null,
|
|
866
|
-
props.appButtons,
|
|
867
|
-
props.searchTableParams !== undefined ? react_1.default.createElement(XButton_1.XButton, { key: "choose", label: (0, XLocale_1.xLocaleOption)('chooseRow'), onClick: onClickChoose }) : null,
|
|
868
|
-
exportRows ? react_1.default.createElement(XExportRowsDialog_1.XExportRowsDialog, { key: "exportRowsDialog", dialogOpened: exportRowsDialogOpened, hideDialog: function () { return setExportRowsDialogOpened(false); }, rowCount: exportRowsDialogRowCount, exportParams: createExportParams }) : null)));
|
|
869
|
-
};
|
|
870
|
-
exports.XLazyDataTable = XLazyDataTable;
|
|
871
|
-
exports.XLazyDataTable.defaultProps = {
|
|
872
|
-
paginator: true,
|
|
873
|
-
rows: 10,
|
|
874
|
-
filterDisplay: "row",
|
|
875
|
-
scrollable: true,
|
|
876
|
-
scrollWidth: 'viewport',
|
|
877
|
-
scrollHeight: 'viewport',
|
|
878
|
-
shrinkWidth: true
|
|
879
|
-
};
|
|
880
|
-
// TODO - XLazyColumn neni idealny nazov, lepsi je XColumn (ale zatial nechame XLazyColumn)
|
|
881
|
-
var XLazyColumn = function (props) {
|
|
882
|
-
// nevadi ze tu nic nevraciame, field a header vieme precitat a zvysok by sme aj tak zahodili lebo vytvarame novy element
|
|
883
|
-
return (null);
|
|
884
|
-
};
|
|
885
|
-
exports.XLazyColumn = XLazyColumn;
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
37
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
38
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
39
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
40
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
41
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
42
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
46
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
47
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
48
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
49
|
+
function step(op) {
|
|
50
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
51
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
52
|
+
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;
|
|
53
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
54
|
+
switch (op[0]) {
|
|
55
|
+
case 0: case 1: t = op; break;
|
|
56
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
57
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
58
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
59
|
+
default:
|
|
60
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
61
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
62
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
63
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
64
|
+
if (t[2]) _.ops.pop();
|
|
65
|
+
_.trys.pop(); continue;
|
|
66
|
+
}
|
|
67
|
+
op = body.call(thisArg, _);
|
|
68
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
69
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
var __values = (this && this.__values) || function(o) {
|
|
73
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
74
|
+
if (m) return m.call(o);
|
|
75
|
+
if (o && typeof o.length === "number") return {
|
|
76
|
+
next: function () {
|
|
77
|
+
if (o && i >= o.length) o = void 0;
|
|
78
|
+
return { value: o && o[i++], done: !o };
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
82
|
+
};
|
|
83
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
84
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
85
|
+
if (!m) return o;
|
|
86
|
+
var i = m.call(o), r, ar = [], e;
|
|
87
|
+
try {
|
|
88
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
89
|
+
}
|
|
90
|
+
catch (error) { e = { error: error }; }
|
|
91
|
+
finally {
|
|
92
|
+
try {
|
|
93
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
94
|
+
}
|
|
95
|
+
finally { if (e) throw e.error; }
|
|
96
|
+
}
|
|
97
|
+
return ar;
|
|
98
|
+
};
|
|
99
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
100
|
+
exports.XLazyColumn = exports.XLazyDataTable = void 0;
|
|
101
|
+
var react_1 = __importStar(require("react"));
|
|
102
|
+
var datatable_1 = require("primereact/datatable");
|
|
103
|
+
var column_1 = require("primereact/column");
|
|
104
|
+
var XButton_1 = require("./XButton");
|
|
105
|
+
var XUtils_1 = require("./XUtils");
|
|
106
|
+
var XUtilsMetadata_1 = require("./XUtilsMetadata");
|
|
107
|
+
var XDropdownDTFilter_1 = require("./XDropdownDTFilter");
|
|
108
|
+
var XUtilsConversions_1 = require("./XUtilsConversions");
|
|
109
|
+
var FindParam_1 = require("../serverApi/FindParam");
|
|
110
|
+
var XButtonIconSmall_1 = require("./XButtonIconSmall");
|
|
111
|
+
var tristatecheckbox_1 = require("primereact/tristatecheckbox");
|
|
112
|
+
var XUtilsCommon_1 = require("../serverApi/XUtilsCommon");
|
|
113
|
+
var XExportRowsDialog_1 = require("./XExportRowsDialog");
|
|
114
|
+
var api_1 = require("primereact/api");
|
|
115
|
+
var XCalendar_1 = require("./XCalendar");
|
|
116
|
+
var XInputDecimalBase_1 = require("./XInputDecimalBase");
|
|
117
|
+
var XLocale_1 = require("./XLocale");
|
|
118
|
+
var XLazyDataTable = function (props) {
|
|
119
|
+
var _a;
|
|
120
|
+
// must be here, is used in createInitFilters()
|
|
121
|
+
var xEntity = XUtilsMetadata_1.XUtilsMetadata.getXEntity(props.entity);
|
|
122
|
+
var createAggregateItems = function () {
|
|
123
|
+
var e_1, _a;
|
|
124
|
+
var aggregateItems = [];
|
|
125
|
+
var columns = props.children;
|
|
126
|
+
try {
|
|
127
|
+
for (var columns_1 = __values(columns), columns_1_1 = columns_1.next(); !columns_1_1.done; columns_1_1 = columns_1.next()) {
|
|
128
|
+
var column = columns_1_1.value;
|
|
129
|
+
var xLazyColumn = column; // nevedel som to krajsie...
|
|
130
|
+
if (xLazyColumn.props.aggregateType) {
|
|
131
|
+
aggregateItems.push({ field: xLazyColumn.props.field, aggregateType: xLazyColumn.props.aggregateType });
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
136
|
+
finally {
|
|
137
|
+
try {
|
|
138
|
+
if (columns_1_1 && !columns_1_1.done && (_a = columns_1.return)) _a.call(columns_1);
|
|
139
|
+
}
|
|
140
|
+
finally { if (e_1) throw e_1.error; }
|
|
141
|
+
}
|
|
142
|
+
return aggregateItems;
|
|
143
|
+
};
|
|
144
|
+
var createInitFilters = function () {
|
|
145
|
+
var e_2, _a;
|
|
146
|
+
var initFilters = {};
|
|
147
|
+
//let columns = dataTableEl.current.props.children; - does not work
|
|
148
|
+
var columns = props.children;
|
|
149
|
+
try {
|
|
150
|
+
for (var columns_2 = __values(columns), columns_2_1 = columns_2.next(); !columns_2_1.done; columns_2_1 = columns_2.next()) {
|
|
151
|
+
var column = columns_2_1.value;
|
|
152
|
+
var xLazyColumn = column; // nevedel som to krajsie...
|
|
153
|
+
var field = xLazyColumn.props.field;
|
|
154
|
+
var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, field);
|
|
155
|
+
// TODO column.props.dropdownInFilter - pre "menu" by bolo fajn mat zoznam "enumov"
|
|
156
|
+
var filterMatchMode = getFilterMatchMode(xField);
|
|
157
|
+
initFilters[field] = createFilterItem(props.filterDisplay, { value: null, matchMode: filterMatchMode });
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
161
|
+
finally {
|
|
162
|
+
try {
|
|
163
|
+
if (columns_2_1 && !columns_2_1.done && (_a = columns_2.return)) _a.call(columns_2);
|
|
164
|
+
}
|
|
165
|
+
finally { if (e_2) throw e_2.error; }
|
|
166
|
+
}
|
|
167
|
+
return initFilters;
|
|
168
|
+
};
|
|
169
|
+
var getFilterMatchMode = function (xField) {
|
|
170
|
+
var filterMatchMode;
|
|
171
|
+
if (xField.type === "string") {
|
|
172
|
+
filterMatchMode = api_1.FilterMatchMode.STARTS_WITH;
|
|
173
|
+
}
|
|
174
|
+
// zatial vsetky ostatne EQUALS
|
|
175
|
+
else if (xField.type === "decimal" || xField.type === "number" || xField.type === "date" || xField.type === "datetime" || xField.type === "boolean") {
|
|
176
|
+
filterMatchMode = api_1.FilterMatchMode.EQUALS;
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
throw "XField ".concat(xField.name, ": unknown xField.type = ").concat(xField.type);
|
|
180
|
+
}
|
|
181
|
+
return filterMatchMode;
|
|
182
|
+
};
|
|
183
|
+
var createFilterItem = function (filterDisplay, constraint) {
|
|
184
|
+
var filterItem;
|
|
185
|
+
if (filterDisplay === "menu") {
|
|
186
|
+
// DataTableOperatorFilterMetaData: operator + filter values
|
|
187
|
+
filterItem = {
|
|
188
|
+
operator: api_1.FilterOperator.OR,
|
|
189
|
+
constraints: [constraint]
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
// props.filterDisplay === "row"
|
|
194
|
+
// DataTableFilterMetaData: filter value
|
|
195
|
+
filterItem = constraint;
|
|
196
|
+
}
|
|
197
|
+
return filterItem;
|
|
198
|
+
};
|
|
199
|
+
// premenne platne pre cely component (obdoba member premennych v class-e)
|
|
200
|
+
var dataTableEl = (0, react_1.useRef)(null);
|
|
201
|
+
var customFilter = props.customFilter;
|
|
202
|
+
var aggregateItems = createAggregateItems();
|
|
203
|
+
var _b = __read((0, react_1.useState)({ rowList: [], totalRecords: 0, aggregateValues: [] }), 2), value = _b[0], setValue = _b[1];
|
|
204
|
+
var _c = __read((0, react_1.useState)(false), 2), loading = _c[0], setLoading = _c[1];
|
|
205
|
+
var _d = __read((0, react_1.useState)(0), 2), first = _d[0], setFirst = _d[1];
|
|
206
|
+
var _e = __read((0, react_1.useState)(props.paginator ? props.rows : undefined), 2), rows = _e[0], setRows = _e[1];
|
|
207
|
+
var filtersInit = createInitFilters();
|
|
208
|
+
if (props.filters) {
|
|
209
|
+
filtersInit = __assign(__assign({}, filtersInit), props.filters); // items from props.filters will replace existing items in filtersInit
|
|
210
|
+
}
|
|
211
|
+
if (props.searchTableParams !== undefined) {
|
|
212
|
+
var displayFieldFilter = props.searchTableParams.displayFieldFilter;
|
|
213
|
+
if (displayFieldFilter !== undefined) {
|
|
214
|
+
filtersInit[displayFieldFilter.field] = createFilterItem(props.filterDisplay, displayFieldFilter.constraint);
|
|
215
|
+
}
|
|
216
|
+
// ak mame props.searchTableParams.customFilter, pridame ho
|
|
217
|
+
customFilter = XUtils_1.XUtils.filterAnd(customFilter, props.searchTableParams.customFilter);
|
|
218
|
+
}
|
|
219
|
+
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)
|
|
220
|
+
var _g = __read((0, react_1.useState)(props.sortField ? [{ field: props.sortField, order: 1 }] : []), 2), multiSortMeta = _g[0], setMultiSortMeta = _g[1];
|
|
221
|
+
var _h = __read((0, react_1.useState)(null), 2), selectedRow = _h[0], setSelectedRow = _h[1];
|
|
222
|
+
var _j = __read((_a = props.dataLoadedState) !== null && _a !== void 0 ? _a : (0, react_1.useState)(false), 2), dataLoaded = _j[0], setDataLoaded = _j[1]; // priznak kde si zapiseme, ci uz sme nacitali data
|
|
223
|
+
var _k = __read((0, react_1.useState)(false), 2), exportRowsDialogOpened = _k[0], setExportRowsDialogOpened = _k[1];
|
|
224
|
+
var _l = __read((0, react_1.useState)(), 2), exportRowsDialogRowCount = _l[0], setExportRowsDialogRowCount = _l[1]; // param pre dialog
|
|
225
|
+
var _m = __read((0, react_1.useState)(filtersInit), 2), filtersAfterFiltering = _m[0], setFiltersAfterFiltering = _m[1]; // sem si odkladame stav filtra po kliknuti na button Filter (chceme exportovat presne to co vidno vyfiltrovane)
|
|
226
|
+
// parameter [] zabezpeci ze sa metoda zavola len po prvom renderingu (a nie po kazdej zmene stavu (zavolani setNieco()))
|
|
227
|
+
(0, react_1.useEffect)(function () {
|
|
228
|
+
// jednoduchy sposob - nepouzivame parameter props.displayed a priznak dataLoaded
|
|
229
|
+
if (props.displayed === undefined) {
|
|
230
|
+
loadData();
|
|
231
|
+
//console.log("XLazyDataTable - data loaded (simple)");
|
|
232
|
+
}
|
|
233
|
+
}, []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
234
|
+
(0, react_1.useEffect)(function () {
|
|
235
|
+
// sposob pozivany pri XFormNavigator (potrebujeme refreshnut data pri navrate z formulara)
|
|
236
|
+
if (props.displayed !== undefined) {
|
|
237
|
+
if (props.displayed) {
|
|
238
|
+
if (!dataLoaded) {
|
|
239
|
+
loadData();
|
|
240
|
+
//console.log("XLazyDataTable - data loaded (used displayed)");
|
|
241
|
+
setDataLoaded(true);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
// dataTable je skryta - ked sa na nu vratime, chceme mat priznak dataLoaded nastaveny na false, aby sme videli cerstve data
|
|
246
|
+
if (dataLoaded) {
|
|
247
|
+
setDataLoaded(false);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}); // eslint-disable-line react-hooks/exhaustive-deps
|
|
252
|
+
// TODO - preco je to tu? presunut dole ak sa da...
|
|
253
|
+
var dataKey = props.dataKey !== undefined ? props.dataKey : XUtilsMetadata_1.XUtilsMetadata.getXEntity(props.entity).idField;
|
|
254
|
+
var onPage = function (event) { return __awaiter(void 0, void 0, void 0, function () {
|
|
255
|
+
return __generator(this, function (_a) {
|
|
256
|
+
//console.log("zavolany onPage");
|
|
257
|
+
setFirst(event.first);
|
|
258
|
+
loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: event.first, rows: rows, filters: filters, customFilter: customFilter, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
|
|
259
|
+
return [2 /*return*/];
|
|
260
|
+
});
|
|
261
|
+
}); };
|
|
262
|
+
var onFilter = function (event) {
|
|
263
|
+
//console.log("zavolany onFilter - this.state.filters = " + JSON.stringify(filters));
|
|
264
|
+
//console.log("zavolany onFilter - event.filters = " + JSON.stringify(event.filters));
|
|
265
|
+
// tymto zavolanim sa zapise znak zapisany klavesnicou do inputu filtra (ak prikaz zakomentujeme, input filtra zostane prazdny)
|
|
266
|
+
setFilters(event.filters);
|
|
267
|
+
};
|
|
268
|
+
var onSort = function (event) {
|
|
269
|
+
//console.log("zavolany onSort - this.state.multiSortMeta = " + JSON.stringify(multiSortMeta));
|
|
270
|
+
//console.log("zavolany onSort - event.multiSortMeta = " + JSON.stringify(event.multiSortMeta));
|
|
271
|
+
setMultiSortMeta(event.multiSortMeta);
|
|
272
|
+
loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: first, rows: rows, filters: filters, customFilter: customFilter, multiSortMeta: event.multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
|
|
273
|
+
};
|
|
274
|
+
var onClickFilter = function () {
|
|
275
|
+
//console.log("zavolany onClickFilter");
|
|
276
|
+
loadData();
|
|
277
|
+
};
|
|
278
|
+
var onClickClearFilter = function () {
|
|
279
|
+
// najjednoduchsi sposob - pomeni aj pripadne nastavene matchMode hodnoty
|
|
280
|
+
var filtersInit = createInitFilters();
|
|
281
|
+
setFilters(filtersInit);
|
|
282
|
+
};
|
|
283
|
+
var loadData = function () {
|
|
284
|
+
loadDataBase({ resultType: FindParam_1.ResultType.RowCountAndPagedRows, first: first, rows: rows, filters: filters, customFilter: customFilter, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems });
|
|
285
|
+
};
|
|
286
|
+
var loadDataBase = function (findParam) { return __awaiter(void 0, void 0, void 0, function () {
|
|
287
|
+
var findResult;
|
|
288
|
+
return __generator(this, function (_a) {
|
|
289
|
+
switch (_a.label) {
|
|
290
|
+
case 0:
|
|
291
|
+
//console.log("zavolany loadDataBase - startIndex = " + findParam.first + ", endIndex = " + ((findParam.first ?? 0) + (findParam.rows ?? 0)) + ", filters = " + JSON.stringify(findParam.filters) + ", multiSortMeta = " + JSON.stringify(findParam.multiSortMeta) + ", fields = " + JSON.stringify(findParam.fields));
|
|
292
|
+
setLoading(true);
|
|
293
|
+
return [4 /*yield*/, findByFilter(findParam)];
|
|
294
|
+
case 1:
|
|
295
|
+
findResult = _a.sent();
|
|
296
|
+
setValue(findResult);
|
|
297
|
+
setLoading(false);
|
|
298
|
+
// odlozime si filter hodnoty pre pripadny export - deep cloning vyzera ze netreba
|
|
299
|
+
setFiltersAfterFiltering(filters);
|
|
300
|
+
return [2 /*return*/];
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
}); };
|
|
304
|
+
var findByFilter = function (findParam) { return __awaiter(void 0, void 0, void 0, function () {
|
|
305
|
+
var findResult;
|
|
306
|
+
return __generator(this, function (_a) {
|
|
307
|
+
switch (_a.label) {
|
|
308
|
+
case 0: return [4 /*yield*/, XUtils_1.XUtils.fetchOne('lazyDataTableFindRows', findParam)];
|
|
309
|
+
case 1:
|
|
310
|
+
findResult = _a.sent();
|
|
311
|
+
findResult.totalRecords = parseInt(findResult.totalRecords);
|
|
312
|
+
return [2 /*return*/, findResult];
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
}); };
|
|
316
|
+
var getFields = function () {
|
|
317
|
+
// krasne zobrazi cely objekt!
|
|
318
|
+
//console.log(dataTableEl.current);
|
|
319
|
+
var e_3, _a;
|
|
320
|
+
var fields = [];
|
|
321
|
+
var columns = dataTableEl.current.props.children;
|
|
322
|
+
try {
|
|
323
|
+
for (var columns_3 = __values(columns), columns_3_1 = columns_3.next(); !columns_3_1.done; columns_3_1 = columns_3.next()) {
|
|
324
|
+
var column = columns_3_1.value;
|
|
325
|
+
fields.push(column.props.field);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
329
|
+
finally {
|
|
330
|
+
try {
|
|
331
|
+
if (columns_3_1 && !columns_3_1.done && (_a = columns_3.return)) _a.call(columns_3);
|
|
332
|
+
}
|
|
333
|
+
finally { if (e_3) throw e_3.error; }
|
|
334
|
+
}
|
|
335
|
+
return fields;
|
|
336
|
+
};
|
|
337
|
+
var getHeaders = function () {
|
|
338
|
+
// krasne zobrazi cely objekt!
|
|
339
|
+
//console.log(dataTableEl.current);
|
|
340
|
+
var e_4, _a;
|
|
341
|
+
var headers = [];
|
|
342
|
+
var columns = dataTableEl.current.props.children;
|
|
343
|
+
try {
|
|
344
|
+
for (var columns_4 = __values(columns), columns_4_1 = columns_4.next(); !columns_4_1.done; columns_4_1 = columns_4.next()) {
|
|
345
|
+
var column = columns_4_1.value;
|
|
346
|
+
// pozor! headers tahame z primereact DataTable a napr. pri editacii nemusi byt v atribute header string
|
|
347
|
+
headers.push(column.props.header);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
351
|
+
finally {
|
|
352
|
+
try {
|
|
353
|
+
if (columns_4_1 && !columns_4_1.done && (_a = columns_4.return)) _a.call(columns_4);
|
|
354
|
+
}
|
|
355
|
+
finally { if (e_4) throw e_4.error; }
|
|
356
|
+
}
|
|
357
|
+
return headers;
|
|
358
|
+
};
|
|
359
|
+
var onSelectionChange = function (event) {
|
|
360
|
+
//console.log("zavolany onSelectionChange");
|
|
361
|
+
//console.log(event.value);
|
|
362
|
+
setSelectedRow(event.value);
|
|
363
|
+
};
|
|
364
|
+
var onRowDoubleClick = function (event) {
|
|
365
|
+
//console.log("zavolany onRowDoubleClick");
|
|
366
|
+
//console.log(event.data);
|
|
367
|
+
if (props.onEdit !== undefined) {
|
|
368
|
+
props.onEdit(event.data);
|
|
369
|
+
}
|
|
370
|
+
else if (props.searchTableParams !== undefined) {
|
|
371
|
+
props.searchTableParams.onChoose(event.data);
|
|
372
|
+
}
|
|
373
|
+
};
|
|
374
|
+
var onClickAddRow = function () {
|
|
375
|
+
//console.log("zavolany onClickAddRow");
|
|
376
|
+
if (props.onAddRow !== undefined) {
|
|
377
|
+
props.onAddRow();
|
|
378
|
+
}
|
|
379
|
+
};
|
|
380
|
+
var onClickEdit = function () {
|
|
381
|
+
//console.log("zavolany onClickEdit");
|
|
382
|
+
if (selectedRow !== null) {
|
|
383
|
+
if (props.onEdit !== undefined) {
|
|
384
|
+
props.onEdit(selectedRow);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
else {
|
|
388
|
+
alert((0, XLocale_1.xLocaleOption)('pleaseSelectRow'));
|
|
389
|
+
}
|
|
390
|
+
};
|
|
391
|
+
var onClickRemoveRow = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
392
|
+
var reread, e_5, e_6;
|
|
393
|
+
return __generator(this, function (_a) {
|
|
394
|
+
switch (_a.label) {
|
|
395
|
+
case 0:
|
|
396
|
+
if (!(selectedRow !== null)) return [3 /*break*/, 11];
|
|
397
|
+
if (!(props.removeRow instanceof Function)) return [3 /*break*/, 5];
|
|
398
|
+
reread = true;
|
|
399
|
+
_a.label = 1;
|
|
400
|
+
case 1:
|
|
401
|
+
_a.trys.push([1, 3, , 4]);
|
|
402
|
+
return [4 /*yield*/, props.removeRow(selectedRow)];
|
|
403
|
+
case 2:
|
|
404
|
+
reread = _a.sent();
|
|
405
|
+
return [3 /*break*/, 4];
|
|
406
|
+
case 3:
|
|
407
|
+
e_5 = _a.sent();
|
|
408
|
+
XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'), e_5);
|
|
409
|
+
return [3 /*break*/, 4];
|
|
410
|
+
case 4:
|
|
411
|
+
if (reread) {
|
|
412
|
+
loadData();
|
|
413
|
+
if (props.onRemoveRow) {
|
|
414
|
+
props.onRemoveRow(selectedRow, XUtils_1.OperationType.Remove);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
return [3 /*break*/, 10];
|
|
418
|
+
case 5:
|
|
419
|
+
if (!window.confirm((0, XLocale_1.xLocaleOption)('removeRowConfirm'))) return [3 /*break*/, 10];
|
|
420
|
+
_a.label = 6;
|
|
421
|
+
case 6:
|
|
422
|
+
_a.trys.push([6, 8, , 9]);
|
|
423
|
+
// poznamka: vdaka await bude loadData() bezat az po dobehnuti requestu removeRow
|
|
424
|
+
return [4 /*yield*/, XUtils_1.XUtils.removeRow(props.entity, selectedRow)];
|
|
425
|
+
case 7:
|
|
426
|
+
// poznamka: vdaka await bude loadData() bezat az po dobehnuti requestu removeRow
|
|
427
|
+
_a.sent();
|
|
428
|
+
return [3 /*break*/, 9];
|
|
429
|
+
case 8:
|
|
430
|
+
e_6 = _a.sent();
|
|
431
|
+
XUtils_1.XUtils.showErrorMessage((0, XLocale_1.xLocaleOption)('removeRowFailed'), e_6);
|
|
432
|
+
return [3 /*break*/, 9];
|
|
433
|
+
case 9:
|
|
434
|
+
loadData();
|
|
435
|
+
if (props.onRemoveRow) {
|
|
436
|
+
props.onRemoveRow(selectedRow, XUtils_1.OperationType.Remove);
|
|
437
|
+
}
|
|
438
|
+
_a.label = 10;
|
|
439
|
+
case 10: return [3 /*break*/, 12];
|
|
440
|
+
case 11:
|
|
441
|
+
alert((0, XLocale_1.xLocaleOption)('pleaseSelectRow'));
|
|
442
|
+
_a.label = 12;
|
|
443
|
+
case 12: return [2 /*return*/];
|
|
444
|
+
}
|
|
445
|
+
});
|
|
446
|
+
}); };
|
|
447
|
+
var onClickExport = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
448
|
+
var findParam, findResult;
|
|
449
|
+
return __generator(this, function (_a) {
|
|
450
|
+
switch (_a.label) {
|
|
451
|
+
case 0:
|
|
452
|
+
findParam = { resultType: FindParam_1.ResultType.OnlyRowCount, first: first, rows: rows, filters: filtersAfterFiltering, customFilter: customFilter, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields(), aggregateItems: aggregateItems };
|
|
453
|
+
return [4 /*yield*/, findByFilter(findParam)];
|
|
454
|
+
case 1:
|
|
455
|
+
findResult = _a.sent();
|
|
456
|
+
//setLoading(false);
|
|
457
|
+
setExportRowsDialogRowCount(findResult.totalRecords); // param pre dialog
|
|
458
|
+
setExportRowsDialogOpened(true);
|
|
459
|
+
return [2 /*return*/];
|
|
460
|
+
}
|
|
461
|
+
});
|
|
462
|
+
}); };
|
|
463
|
+
var createExportParams = function () {
|
|
464
|
+
var queryParam = { filters: filtersAfterFiltering, customFilter: customFilter, multiSortMeta: multiSortMeta, entity: props.entity, fields: getFields() };
|
|
465
|
+
return {
|
|
466
|
+
path: "x-lazy-data-table-export",
|
|
467
|
+
queryParam: queryParam,
|
|
468
|
+
headers: getHeaders(),
|
|
469
|
+
fileName: "".concat(props.entity)
|
|
470
|
+
};
|
|
471
|
+
};
|
|
472
|
+
var onClickChoose = function () {
|
|
473
|
+
//console.log("zavolany onClickChoose");
|
|
474
|
+
if (selectedRow !== null) {
|
|
475
|
+
if (props.searchTableParams !== undefined) {
|
|
476
|
+
props.searchTableParams.onChoose(selectedRow);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
else {
|
|
480
|
+
console.log("Nie je vyselectovany ziaden zaznam.");
|
|
481
|
+
}
|
|
482
|
+
};
|
|
483
|
+
// ****** dropdown vo filtri ********
|
|
484
|
+
// pouziva sa len pre simple filtrovanie (filterDisplay="row")
|
|
485
|
+
var onDropdownFilterChange = function (field, displayValue) {
|
|
486
|
+
var filterValue = displayValue !== XUtils_1.XUtils.dropdownEmptyOptionValue ? displayValue : null;
|
|
487
|
+
setFilterValue(field, filterValue, api_1.FilterMatchMode.EQUALS);
|
|
488
|
+
};
|
|
489
|
+
var getDropdownFilterValue = function (field) {
|
|
490
|
+
var filterValue = getFilterValue(field);
|
|
491
|
+
return filterValue !== null ? filterValue : XUtils_1.XUtils.dropdownEmptyOptionValue;
|
|
492
|
+
};
|
|
493
|
+
// ****** vseobecne metodky pre set/get do/z filtra ********
|
|
494
|
+
// zatial funguje len pre simple filtrovanie (filterDisplay="row")
|
|
495
|
+
// vseobecna specialna metodka pouzvana pri custom filtri (XLazyColumn.filterElement)
|
|
496
|
+
var setFilterItem = function (field, filterItem) {
|
|
497
|
+
filters[field] = filterItem;
|
|
498
|
+
// neskusal som, ci treba aj toto klonovat ale pravdepodobne hej
|
|
499
|
+
var filtersCloned = __assign({}, filters);
|
|
500
|
+
setFilters(filtersCloned);
|
|
501
|
+
};
|
|
502
|
+
// vseobecna specialna metodka pouzvana pri custom filtri (XLazyColumn.filterElement)
|
|
503
|
+
var getFilterItem = function (field) {
|
|
504
|
+
return filters[field];
|
|
505
|
+
};
|
|
506
|
+
// vseobecna metodka - nastavi hodnotu do filtra
|
|
507
|
+
// ak je matchMode === undefined, tak zachova povodnu hodnotu matchMode
|
|
508
|
+
var setFilterValue = function (field, value, matchMode) {
|
|
509
|
+
var filterValue = filters[field]; // funguje len pre filterDisplay="row"
|
|
510
|
+
filterValue.value = value;
|
|
511
|
+
if (matchMode !== undefined) {
|
|
512
|
+
filterValue.matchMode = matchMode;
|
|
513
|
+
}
|
|
514
|
+
// treba klonovat, inac react nezobrazi zmenenu hodnotu
|
|
515
|
+
var filtersCloned = __assign({}, filters);
|
|
516
|
+
setFilters(filtersCloned);
|
|
517
|
+
};
|
|
518
|
+
// vseobecna metodka - precita hodnotu z filtra (vrati napr. typ Date | null)
|
|
519
|
+
var getFilterValue = function (field) {
|
|
520
|
+
var filterValue = filters[field]; // funguje len pre filterDisplay="row"
|
|
521
|
+
return filterValue.value;
|
|
522
|
+
};
|
|
523
|
+
// ****** vseobecne metodky pre set/get do/z filtra - pre betweenFilter ********
|
|
524
|
+
// do DataTableFilterMetaData.value ulozime dvojprvkove pole [value1, value2]
|
|
525
|
+
// na backende spracujeme toto dvojprvkove pole
|
|
526
|
+
var setFilterValue1 = function (field, value) {
|
|
527
|
+
// na zaciatku (po inicializacii lazy table) je filterValue = null
|
|
528
|
+
var filterValue = getFilterValue(field);
|
|
529
|
+
if (filterValue !== null) {
|
|
530
|
+
filterValue[0] = value;
|
|
531
|
+
}
|
|
532
|
+
else {
|
|
533
|
+
filterValue = [value, null];
|
|
534
|
+
}
|
|
535
|
+
setFilterValue(field, filterValue, api_1.FilterMatchMode.BETWEEN);
|
|
536
|
+
};
|
|
537
|
+
var setFilterValue2 = function (field, value) {
|
|
538
|
+
// na zaciatku (po inicializacii lazy table) je filterValue = null
|
|
539
|
+
var filterValue = getFilterValue(field);
|
|
540
|
+
if (filterValue !== null) {
|
|
541
|
+
filterValue[1] = value;
|
|
542
|
+
}
|
|
543
|
+
else {
|
|
544
|
+
filterValue = [null, value];
|
|
545
|
+
}
|
|
546
|
+
setFilterValue(field, filterValue, api_1.FilterMatchMode.BETWEEN);
|
|
547
|
+
};
|
|
548
|
+
var getFilterValue1 = function (field) {
|
|
549
|
+
return getFilterValue1or2(field, 0);
|
|
550
|
+
};
|
|
551
|
+
var getFilterValue2 = function (field) {
|
|
552
|
+
return getFilterValue1or2(field, 1);
|
|
553
|
+
};
|
|
554
|
+
var getFilterValue1or2 = function (field, index) {
|
|
555
|
+
var filterValue = getFilterValue(field);
|
|
556
|
+
return filterValue !== null ? filterValue[index] : null;
|
|
557
|
+
};
|
|
558
|
+
var getBetweenFilter = function (columnBetweenFilter, tableBetweenFilter) {
|
|
559
|
+
var betweenFilter = undefined;
|
|
560
|
+
// columnBetweenFilter has higher prio than tableBetweenFilter
|
|
561
|
+
if (columnBetweenFilter !== undefined) {
|
|
562
|
+
if (columnBetweenFilter === "row" || columnBetweenFilter === "column") {
|
|
563
|
+
betweenFilter = columnBetweenFilter;
|
|
564
|
+
}
|
|
565
|
+
// for "noBetween" stays betweenFilter = undefined (simple filter used)
|
|
566
|
+
}
|
|
567
|
+
else {
|
|
568
|
+
betweenFilter = tableBetweenFilter; // betweenFilter from XLazyDataTable property
|
|
569
|
+
}
|
|
570
|
+
return betweenFilter;
|
|
571
|
+
};
|
|
572
|
+
var bodyTemplate = function (columnProps, rowData, xField) {
|
|
573
|
+
var rowDataValue = XUtilsCommon_1.XUtilsCommon.getValueByPath(rowData, columnProps.field);
|
|
574
|
+
var bodyValue = '';
|
|
575
|
+
if (xField.type === "decimal") {
|
|
576
|
+
// tuto zatial hack, mal by vzdy prist number
|
|
577
|
+
var numberValue = null;
|
|
578
|
+
if (typeof rowDataValue === 'string') {
|
|
579
|
+
numberValue = parseFloat(rowDataValue);
|
|
580
|
+
}
|
|
581
|
+
else if (typeof rowDataValue === 'number') {
|
|
582
|
+
numberValue = rowDataValue;
|
|
583
|
+
}
|
|
584
|
+
bodyValue = (0, XUtilsConversions_1.numberAsUI)(numberValue, xField.scale);
|
|
585
|
+
}
|
|
586
|
+
else if (xField.type === "date") {
|
|
587
|
+
// tuto zatial hack, mal by prist Date
|
|
588
|
+
var dateValue = null;
|
|
589
|
+
if (typeof rowDataValue === 'string') {
|
|
590
|
+
dateValue = new Date(rowDataValue);
|
|
591
|
+
}
|
|
592
|
+
else if (typeof rowDataValue === 'object' && rowDataValue instanceof Date) {
|
|
593
|
+
dateValue = rowDataValue;
|
|
594
|
+
}
|
|
595
|
+
bodyValue = (0, XUtilsConversions_1.dateAsUI)(dateValue);
|
|
596
|
+
}
|
|
597
|
+
else if (xField.type === "datetime") {
|
|
598
|
+
// tuto zatial hack, mal by prist Date
|
|
599
|
+
var dateValue = null;
|
|
600
|
+
if (typeof rowDataValue === 'string') {
|
|
601
|
+
dateValue = new Date(rowDataValue);
|
|
602
|
+
}
|
|
603
|
+
else if (typeof rowDataValue === 'object' && rowDataValue instanceof Date) {
|
|
604
|
+
dateValue = rowDataValue;
|
|
605
|
+
}
|
|
606
|
+
bodyValue = (0, XUtilsConversions_1.datetimeAsUI)(dateValue);
|
|
607
|
+
}
|
|
608
|
+
else if (xField.type === "boolean") {
|
|
609
|
+
// TODO - efektivnejsie by bolo renderovat len prislusne ikonky
|
|
610
|
+
bodyValue = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: rowDataValue, disabled: true });
|
|
611
|
+
}
|
|
612
|
+
return bodyValue;
|
|
613
|
+
};
|
|
614
|
+
// ak mame scrollWidth/scrollHeight = viewport (default), vyratame scrollWidth/scrollHeight tak aby tabulka "sadla" do okna (viewport-u)
|
|
615
|
+
var scrollWidth = undefined; // vypnute horizontalne scrollovanie
|
|
616
|
+
var scrollHeight = undefined; // vypnute vertikalne scrollovanie
|
|
617
|
+
if (props.scrollable) {
|
|
618
|
+
if (props.scrollWidth !== "none") {
|
|
619
|
+
scrollWidth = props.scrollWidth;
|
|
620
|
+
if (scrollWidth === "viewport") {
|
|
621
|
+
scrollWidth = 'calc(100vw - 1.4rem)'; // 20px okraje
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
if (props.scrollHeight !== "none") {
|
|
625
|
+
scrollHeight = props.scrollHeight;
|
|
626
|
+
if (scrollHeight === "viewport") {
|
|
627
|
+
// vypocet je priblizny, robeny na mobil, desktop bude mat mozno iny
|
|
628
|
+
//const headerHeight = XUtils.toPX0('12.7rem');
|
|
629
|
+
//let footerHeight = XUtils.toPX0('3.7rem') + XUtils.toPX0('3rem'); // table footer (paging) + buttons Add row, Edit, ...
|
|
630
|
+
// na desktope mi nechce odpocitat vysku taskbar-u od window.screen.availHeight, tak to poriesime takymto hack-om:
|
|
631
|
+
// if (!XUtils.isMobile()) {
|
|
632
|
+
// footerHeight += XUtils.toPX0('6rem'); // priblizna vyska taskbaru (ak mam 2 rady buttonov)
|
|
633
|
+
// }
|
|
634
|
+
var viewHeight = void 0;
|
|
635
|
+
var headerFooterHeight = void 0;
|
|
636
|
+
if (props.searchTableParams === undefined) {
|
|
637
|
+
// sme v standardnom formulari
|
|
638
|
+
viewHeight = '100vh';
|
|
639
|
+
// experimentalne zistena vyska header/footer
|
|
640
|
+
// da sa vyratat ako vysku body (celej stranky) - vyska div-u ktory sa scrolluje (div na ktorom je style="max-height: calc(100vh - 266.42px);)
|
|
641
|
+
// (treba odratat vysku paginatora a formFooterHeight (lebo tie sa odratavaju nizsie))
|
|
642
|
+
headerFooterHeight = XUtils_1.XUtils.toPX0('10.89rem');
|
|
643
|
+
}
|
|
644
|
+
else {
|
|
645
|
+
// sme v dialogu
|
|
646
|
+
if (XUtils_1.XUtils.isMobile()) {
|
|
647
|
+
viewHeight = '98vh'; // .p-dialog pre mobil ma max-height: 98%
|
|
648
|
+
headerFooterHeight = XUtils_1.XUtils.toPX0('12.03rem'); // rucne zratane
|
|
649
|
+
}
|
|
650
|
+
else {
|
|
651
|
+
viewHeight = '90vh'; // .p-dialog pre desktop ma max-height: 90%
|
|
652
|
+
headerFooterHeight = XUtils_1.XUtils.toPX0('13.03rem'); // rucne zratane (desktop ma vecsi margin dole na dialogu)
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
// pridame vysku paging-u, ak treba
|
|
656
|
+
if (props.paginator) {
|
|
657
|
+
headerFooterHeight += XUtils_1.XUtils.toPX0('3.71rem');
|
|
658
|
+
}
|
|
659
|
+
// este pridame vysku linkov na zdrojaky, ak treba
|
|
660
|
+
if (props.formFooterHeight !== undefined) {
|
|
661
|
+
headerFooterHeight += XUtils_1.XUtils.toPX0(XUtils_1.XUtils.processGridBreakpoints(props.formFooterHeight));
|
|
662
|
+
}
|
|
663
|
+
scrollHeight = "calc(".concat(viewHeight, " - ").concat(headerFooterHeight, "px)");
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
var style = {};
|
|
668
|
+
if (scrollWidth !== undefined) {
|
|
669
|
+
style.width = scrollWidth;
|
|
670
|
+
}
|
|
671
|
+
if (props.shrinkWidth) {
|
|
672
|
+
style.maxWidth = 'min-content'; // ak nic nedame (nechame auto), tak (v pripade ak nebudeme mat horizontalny scrollbar) natiahne tabulku na celu sirku stranky, co nechceme
|
|
673
|
+
}
|
|
674
|
+
// pri prechode z Primereact 6.x na 9.x sa tableLayout zmenil z fixed na auto a nefungovalo nastavenie sirok stlpcov - docasne teda takto
|
|
675
|
+
var tableStyle = { tableLayout: 'fixed' };
|
|
676
|
+
if (props.width !== undefined) {
|
|
677
|
+
var width = props.width;
|
|
678
|
+
if (!isNaN(Number(width))) { // if width is number
|
|
679
|
+
width = width + 'rem';
|
|
680
|
+
}
|
|
681
|
+
tableStyle = __assign(__assign({}, tableStyle), { width: width });
|
|
682
|
+
}
|
|
683
|
+
// check
|
|
684
|
+
if ((props.editMode === true || props.editMode === false) && props.editModeHandlers === undefined) {
|
|
685
|
+
throw "XLazyDataTable: for props.editMode = true/false, props.editModeHandlers must be defined.";
|
|
686
|
+
}
|
|
687
|
+
// pouzivame paginatorLeft aj paginatorRight (aj prazdny) pouzivame, aby bol default paginator v strede (bez paginatorLeft je default paginator presunuty dolava a naopak)
|
|
688
|
+
// sirku div-ov este nastavujeme v css na 10rem
|
|
689
|
+
var paginatorLeft = react_1.default.createElement("div", null,
|
|
690
|
+
(0, XLocale_1.xLocaleOption)('totalRecords'),
|
|
691
|
+
": ",
|
|
692
|
+
value.totalRecords);
|
|
693
|
+
var paginatorRight = react_1.default.createElement("div", null);
|
|
694
|
+
if (props.editMode === true) {
|
|
695
|
+
paginatorRight = react_1.default.createElement("div", null,
|
|
696
|
+
react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-save", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onSave(); }, tooltip: "Save form" }),
|
|
697
|
+
react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-times", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onCancel(); }, tooltip: "Cancel editing" }));
|
|
698
|
+
}
|
|
699
|
+
else if (props.editMode === false) {
|
|
700
|
+
paginatorRight = react_1.default.createElement("div", null,
|
|
701
|
+
react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-pencil", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onStart(); }, tooltip: "Edit form" }));
|
|
702
|
+
}
|
|
703
|
+
// else - editMode is undefined - browse is not editable
|
|
704
|
+
// export pre search button-y zatial vypneme
|
|
705
|
+
var exportRows = (props.searchTableParams === undefined);
|
|
706
|
+
// pre lepsiu citatelnost vytvarame stlpce uz tu
|
|
707
|
+
var columnElemList = react_1.default.Children.map(props.children, function (child) {
|
|
708
|
+
// ak chceme zmenit child element, tak treba bud vytvorit novy alebo vyklonovat
|
|
709
|
+
// priklad je na https://soshace.com/building-react-components-using-children-props-and-context-api/
|
|
710
|
+
// (vzdy musime robit manipulacie so stlpcom, lebo potrebujeme pridat filter={true} sortable={true}
|
|
711
|
+
var childColumn = child; // nevedel som to krajsie...
|
|
712
|
+
var xField = XUtilsMetadata_1.XUtilsMetadata.getXFieldByPath(xEntity, childColumn.props.field);
|
|
713
|
+
// *********** header ***********
|
|
714
|
+
var headerLabel = childColumn.props.header !== undefined ? childColumn.props.header : childColumn.props.field;
|
|
715
|
+
var header;
|
|
716
|
+
if (props.editMode === true) {
|
|
717
|
+
header = react_1.default.createElement("div", null,
|
|
718
|
+
react_1.default.createElement("div", null,
|
|
719
|
+
react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-plus", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onAddColumn(childColumn.props.field); }, tooltip: "Add column" }),
|
|
720
|
+
react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-pencil", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onEditColumn(childColumn.props.field); }, tooltip: "Edit column" }),
|
|
721
|
+
react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-trash", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onRemoveColumn(childColumn.props.field); }, tooltip: "Remove column" })),
|
|
722
|
+
react_1.default.createElement("div", null,
|
|
723
|
+
react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-chevron-left", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onMoveColumnLeft(childColumn.props.field); }, tooltip: "Move column left" }),
|
|
724
|
+
react_1.default.createElement(XButtonIconSmall_1.XButtonIconSmall, { icon: "pi pi-chevron-right", onClick: function () { var _a; return (_a = props.editModeHandlers) === null || _a === void 0 ? void 0 : _a.onMoveColumnRight(childColumn.props.field); }, tooltip: "Move column right" })),
|
|
725
|
+
react_1.default.createElement("div", null, headerLabel));
|
|
726
|
+
}
|
|
727
|
+
else {
|
|
728
|
+
header = headerLabel;
|
|
729
|
+
}
|
|
730
|
+
// *********** filterElement ***********
|
|
731
|
+
var betweenFilter = undefined;
|
|
732
|
+
var filterElement;
|
|
733
|
+
if (childColumn.props.filterElement !== undefined) {
|
|
734
|
+
filterElement = function (options) {
|
|
735
|
+
// compilator sa stazoval ze childColumn.props.filterElement moze byt undefined, preto som pridal "!"
|
|
736
|
+
return childColumn.props.filterElement({ getFilterItem: getFilterItem, setFilterItem: setFilterItem, options: options });
|
|
737
|
+
};
|
|
738
|
+
}
|
|
739
|
+
else {
|
|
740
|
+
if (xField.type === "boolean") {
|
|
741
|
+
var checkboxValue = getFilterValue(childColumn.props.field);
|
|
742
|
+
filterElement = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: checkboxValue, onChange: function (e) { return setFilterValue(childColumn.props.field, e.value, api_1.FilterMatchMode.EQUALS); } });
|
|
743
|
+
}
|
|
744
|
+
else if (childColumn.props.dropdownInFilter) {
|
|
745
|
+
var dropdownValue = getDropdownFilterValue(childColumn.props.field);
|
|
746
|
+
filterElement = react_1.default.createElement(XDropdownDTFilter_1.XDropdownDTFilter, { entity: props.entity, path: childColumn.props.field, value: dropdownValue, onValueChange: onDropdownFilterChange });
|
|
747
|
+
}
|
|
748
|
+
else if (xField.type === "date" || xField.type === "datetime") {
|
|
749
|
+
betweenFilter = getBetweenFilter(childColumn.props.betweenFilter, props.betweenFilter);
|
|
750
|
+
if (betweenFilter !== undefined) {
|
|
751
|
+
// display: 'flex' umiestni XCalendar elementy vedla seba
|
|
752
|
+
filterElement =
|
|
753
|
+
react_1.default.createElement("div", { style: betweenFilter === "row" ? { display: 'flex' } : undefined },
|
|
754
|
+
react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value); }, datetime: xField.type === "datetime" }),
|
|
755
|
+
react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value); }, datetime: xField.type === "datetime" }));
|
|
756
|
+
}
|
|
757
|
+
else {
|
|
758
|
+
var dateValue = getFilterValue(childColumn.props.field);
|
|
759
|
+
filterElement = react_1.default.createElement(XCalendar_1.XCalendar, { value: dateValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value); }, datetime: xField.type === "datetime" });
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
else if (xField.type === "decimal" || xField.type === "number") {
|
|
763
|
+
var params = XUtilsMetadata_1.XUtilsMetadata.getParamsForInputNumber(xField);
|
|
764
|
+
betweenFilter = getBetweenFilter(childColumn.props.betweenFilter, props.betweenFilter);
|
|
765
|
+
if (betweenFilter !== undefined) {
|
|
766
|
+
// display: 'flex' umiestni input elementy pod seba (betweenFilter = "column") resp. vedla seba (betweenFilter = "row")
|
|
767
|
+
filterElement =
|
|
768
|
+
react_1.default.createElement("div", { style: { display: 'flex', flexDirection: betweenFilter } },
|
|
769
|
+
react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value); } }, params)),
|
|
770
|
+
react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value); } }, params)));
|
|
771
|
+
}
|
|
772
|
+
else {
|
|
773
|
+
var numberValue = getFilterValue(childColumn.props.field);
|
|
774
|
+
filterElement = react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: numberValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value); } }, params));
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
// ************** dataType **************
|
|
779
|
+
// depending on the dataType of the column, suitable match modes are displayed in filter
|
|
780
|
+
var dataType = undefined;
|
|
781
|
+
if (xField.type === "decimal" || xField.type === "number") {
|
|
782
|
+
dataType = "numeric";
|
|
783
|
+
}
|
|
784
|
+
else if (xField.type === "date" || xField.type === "datetime") {
|
|
785
|
+
dataType = "date";
|
|
786
|
+
}
|
|
787
|
+
// *********** showFilterMenu ***********
|
|
788
|
+
var showFilterMenu;
|
|
789
|
+
if (childColumn.props.showFilterMenu !== undefined) {
|
|
790
|
+
showFilterMenu = childColumn.props.showFilterMenu;
|
|
791
|
+
}
|
|
792
|
+
else {
|
|
793
|
+
showFilterMenu = true; // default
|
|
794
|
+
if (props.filterDisplay === "row") {
|
|
795
|
+
if (xField.type === "boolean" || childColumn.props.dropdownInFilter || betweenFilter !== undefined) {
|
|
796
|
+
showFilterMenu = false;
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
// *********** showClearButton ***********
|
|
801
|
+
// pre filterDisplay = "row" nechceme clear button, chceme setrit miesto
|
|
802
|
+
var showClearButton = props.filterDisplay === "menu";
|
|
803
|
+
// *********** body ***********
|
|
804
|
+
var body;
|
|
805
|
+
if (childColumn.props.body !== undefined) {
|
|
806
|
+
body = childColumn.props.body;
|
|
807
|
+
}
|
|
808
|
+
// TODO - mozno by bolo dobre vytvarat body pre kazdy typ fieldu, nech je to vsetko konzistentne
|
|
809
|
+
else if (xField.type === "decimal" || xField.type === "date" || xField.type === "datetime" || xField.type === "boolean") {
|
|
810
|
+
body = function (rowData) { return bodyTemplate(childColumn.props, rowData, xField); };
|
|
811
|
+
}
|
|
812
|
+
// *********** width/headerStyle ***********
|
|
813
|
+
var width = XUtils_1.XUtils.processPropWidth(childColumn.props.width);
|
|
814
|
+
if (width === undefined || width === "default") {
|
|
815
|
+
// TODO - if filter not used at all, then buttons flags should be false
|
|
816
|
+
var filterMenuInFilterRow = props.filterDisplay === "row" && showFilterMenu;
|
|
817
|
+
var filterButtonInHeader = props.filterDisplay === "menu";
|
|
818
|
+
width = XUtilsMetadata_1.XUtilsMetadata.computeColumnWidth(xField, betweenFilter, filterMenuInFilterRow, undefined, headerLabel, true, filterButtonInHeader);
|
|
819
|
+
}
|
|
820
|
+
var headerStyle = {};
|
|
821
|
+
if (width !== undefined) {
|
|
822
|
+
headerStyle = { width: width };
|
|
823
|
+
}
|
|
824
|
+
// *********** align ***********
|
|
825
|
+
var align = undefined; // default undefined (left)
|
|
826
|
+
if (childColumn.props.align !== undefined && childColumn.props.align !== null) {
|
|
827
|
+
align = childColumn.props.align;
|
|
828
|
+
}
|
|
829
|
+
else {
|
|
830
|
+
// decimal defaultne zarovnavame doprava
|
|
831
|
+
if (xField.type === "decimal") {
|
|
832
|
+
align = "right";
|
|
833
|
+
}
|
|
834
|
+
else if (xField.type === "boolean") {
|
|
835
|
+
align = "center";
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
// *********** footer ***********
|
|
839
|
+
var footer = undefined;
|
|
840
|
+
if (childColumn.props.aggregateType && value.aggregateValues) {
|
|
841
|
+
var aggregateValue = value.aggregateValues[childColumn.props.field];
|
|
842
|
+
if (aggregateValue !== undefined && aggregateValue !== null) {
|
|
843
|
+
if (xField.type === "decimal" || xField.type === "number") {
|
|
844
|
+
// v json subore su stringy (cislo v ""), konvertujeme aby sme zmenili 123.45 na 123,45
|
|
845
|
+
aggregateValue = (0, XUtilsConversions_1.numberAsUI)((0, XUtilsConversions_1.numberFromModel)(aggregateValue), xField.scale);
|
|
846
|
+
}
|
|
847
|
+
}
|
|
848
|
+
else {
|
|
849
|
+
aggregateValue = ""; // nemame este nacitane data
|
|
850
|
+
}
|
|
851
|
+
footer = aggregateValue;
|
|
852
|
+
}
|
|
853
|
+
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 });
|
|
854
|
+
});
|
|
855
|
+
return (react_1.default.createElement("div", null,
|
|
856
|
+
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
857
|
+
react_1.default.createElement(XButton_1.XButton, { key: "filter", label: (0, XLocale_1.xLocaleOption)('filter'), onClick: onClickFilter }),
|
|
858
|
+
react_1.default.createElement(XButton_1.XButton, { key: "clearFilter", label: (0, XLocale_1.xLocaleOption)('clearFilter'), onClick: onClickClearFilter })),
|
|
859
|
+
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
860
|
+
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, 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)),
|
|
861
|
+
react_1.default.createElement("div", { className: "flex justify-content-center" },
|
|
862
|
+
props.onAddRow !== undefined ? react_1.default.createElement(XButton_1.XButton, { key: "addRow", icon: "pi pi-plus", label: (0, XLocale_1.xLocaleOption)('addRow'), onClick: onClickAddRow }) : null,
|
|
863
|
+
props.onEdit !== undefined ? react_1.default.createElement(XButton_1.XButton, { key: "editRow", icon: "pi pi-pencil", label: (0, XLocale_1.xLocaleOption)('editRow'), onClick: onClickEdit }) : null,
|
|
864
|
+
props.removeRow !== undefined && props.removeRow !== false ? react_1.default.createElement(XButton_1.XButton, { key: "removeRow", icon: "pi pi-times", label: (0, XLocale_1.xLocaleOption)('removeRow'), onClick: onClickRemoveRow }) : null,
|
|
865
|
+
exportRows ? react_1.default.createElement(XButton_1.XButton, { key: "exportRows", icon: "pi pi-file-export", label: (0, XLocale_1.xLocaleOption)('exportRows'), onClick: onClickExport }) : null,
|
|
866
|
+
props.appButtons,
|
|
867
|
+
props.searchTableParams !== undefined ? react_1.default.createElement(XButton_1.XButton, { key: "choose", label: (0, XLocale_1.xLocaleOption)('chooseRow'), onClick: onClickChoose }) : null,
|
|
868
|
+
exportRows ? react_1.default.createElement(XExportRowsDialog_1.XExportRowsDialog, { key: "exportRowsDialog", dialogOpened: exportRowsDialogOpened, hideDialog: function () { return setExportRowsDialogOpened(false); }, rowCount: exportRowsDialogRowCount, exportParams: createExportParams }) : null)));
|
|
869
|
+
};
|
|
870
|
+
exports.XLazyDataTable = XLazyDataTable;
|
|
871
|
+
exports.XLazyDataTable.defaultProps = {
|
|
872
|
+
paginator: true,
|
|
873
|
+
rows: 10,
|
|
874
|
+
filterDisplay: "row",
|
|
875
|
+
scrollable: true,
|
|
876
|
+
scrollWidth: 'viewport',
|
|
877
|
+
scrollHeight: 'viewport',
|
|
878
|
+
shrinkWidth: true
|
|
879
|
+
};
|
|
880
|
+
// TODO - XLazyColumn neni idealny nazov, lepsi je XColumn (ale zatial nechame XLazyColumn)
|
|
881
|
+
var XLazyColumn = function (props) {
|
|
882
|
+
// nevadi ze tu nic nevraciame, field a header vieme precitat a zvysok by sme aj tak zahodili lebo vytvarame novy element
|
|
883
|
+
return (null);
|
|
884
|
+
};
|
|
885
|
+
exports.XLazyColumn = XLazyColumn;
|