@michalrakus/x-react-web-lib 1.32.7 → 1.32.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/XFieldSet/XFieldSetBase.d.ts +1 -0
- package/lib/components/XFieldSet/XFieldSetBase.js +22 -17
- package/lib/components/XLazyDataTable/XLazyDataTable.d.ts +2 -0
- package/lib/components/XLazyDataTable/XLazyDataTable.js +28 -24
- package/lib/components/XUtils.d.ts +6 -0
- package/lib/components/XUtils.js +91 -0
- package/package.json +2 -2
|
@@ -75,5 +75,6 @@ export type XFieldXFieldMetaMap = Map<string, XFieldMeta>;
|
|
|
75
75
|
export declare class XFieldSetBase {
|
|
76
76
|
static createXFieldXFieldMetaMap(xFieldSetMeta: XFieldSetMeta, filterFromParent?: string): XFieldXFieldMetaMap;
|
|
77
77
|
static xFieldSetValuesAsUI(xFieldSetValues: XFieldSetValues, xFieldXFieldMetaMap: XFieldXFieldMetaMap): string;
|
|
78
|
+
static xFieldSetValueAsUI(xFieldMeta: XFieldMeta, value: any): string;
|
|
78
79
|
private static createMapForXFieldMeta;
|
|
79
80
|
}
|
|
@@ -75,27 +75,14 @@ var XFieldSetBase = /** @class */ (function () {
|
|
|
75
75
|
// logicky patri do src/serverApi/XUtilsConversions.ts a zisla by sa aj pri exporte do excelu ale XFieldXFieldMetaMap (a jeho "parent"-a XFieldSetBase) mame len na frontende
|
|
76
76
|
XFieldSetBase.xFieldSetValuesAsUI = function (xFieldSetValues, xFieldXFieldMetaMap) {
|
|
77
77
|
var e_1, _a;
|
|
78
|
-
var _b;
|
|
79
78
|
// budeme mat vzdy spravne poradie? nebudeme... asi najjednoduchsie zosortovat tu "valueUIList" podla abecedy
|
|
80
79
|
var valueUIList = [];
|
|
81
80
|
try {
|
|
82
|
-
for (var
|
|
83
|
-
var
|
|
81
|
+
for (var _b = __values(Object.entries(xFieldSetValues)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
82
|
+
var _d = __read(_c.value, 2), field = _d[0], value = _d[1];
|
|
84
83
|
var xFieldMeta = xFieldXFieldMetaMap.get(field);
|
|
85
84
|
if (xFieldMeta) {
|
|
86
|
-
|
|
87
|
-
valueUIList.push(xFieldMeta.label);
|
|
88
|
-
}
|
|
89
|
-
else if (xFieldMeta.type === XFieldType.inputText) {
|
|
90
|
-
valueUIList.push("".concat(xFieldMeta.label, ": \"").concat(value, "\""));
|
|
91
|
-
}
|
|
92
|
-
else if (xFieldMeta.type === XFieldType.inputDecimal) {
|
|
93
|
-
valueUIList.push("".concat(xFieldMeta.label, ": ").concat((0, XUtilsConversions_1.numberAsUI)((0, XUtilsConversions_1.numberFromModel)(value), (_b = xFieldMeta.decimalProps) === null || _b === void 0 ? void 0 : _b.scale)));
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
// neznamy typ
|
|
97
|
-
valueUIList.push("".concat(xFieldMeta.label, ": \"").concat(value, "\""));
|
|
98
|
-
}
|
|
85
|
+
valueUIList.push(XFieldSetBase.xFieldSetValueAsUI(xFieldMeta, value));
|
|
99
86
|
}
|
|
100
87
|
else {
|
|
101
88
|
// field bol z formulara odstraneny (nemalo by sa to takto pouzivat, skor by sa mala datumom ohranicit platnost fieldu)
|
|
@@ -107,12 +94,30 @@ var XFieldSetBase = /** @class */ (function () {
|
|
|
107
94
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
108
95
|
finally {
|
|
109
96
|
try {
|
|
110
|
-
if (
|
|
97
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
111
98
|
}
|
|
112
99
|
finally { if (e_1) throw e_1.error; }
|
|
113
100
|
}
|
|
114
101
|
return valueUIList.join(", ");
|
|
115
102
|
};
|
|
103
|
+
XFieldSetBase.xFieldSetValueAsUI = function (xFieldMeta, value) {
|
|
104
|
+
var _a;
|
|
105
|
+
var valueAsUI;
|
|
106
|
+
if (xFieldMeta.type === XFieldType.checkbox) {
|
|
107
|
+
valueAsUI = xFieldMeta.label;
|
|
108
|
+
}
|
|
109
|
+
else if (xFieldMeta.type === XFieldType.inputText) {
|
|
110
|
+
valueAsUI = "".concat(xFieldMeta.label, ": \"").concat(value, "\"");
|
|
111
|
+
}
|
|
112
|
+
else if (xFieldMeta.type === XFieldType.inputDecimal) {
|
|
113
|
+
valueAsUI = "".concat(xFieldMeta.label, ": ").concat((0, XUtilsConversions_1.numberAsUI)((0, XUtilsConversions_1.numberFromModel)(value), (_a = xFieldMeta.decimalProps) === null || _a === void 0 ? void 0 : _a.scale));
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
// neznamy typ
|
|
117
|
+
valueAsUI = "".concat(xFieldMeta.label, ": \"").concat(value, "\"");
|
|
118
|
+
}
|
|
119
|
+
return valueAsUI;
|
|
120
|
+
};
|
|
116
121
|
XFieldSetBase.createMapForXFieldMeta = function (xFieldMeta, filterFromParent, xFieldXFieldMetaMap) {
|
|
117
122
|
var e_2, _a;
|
|
118
123
|
if (filterFromParent === undefined) {
|
|
@@ -141,6 +141,7 @@ export interface XLazyColumnProps {
|
|
|
141
141
|
autoComplete?: XAutoCompleteInFilterProps | true;
|
|
142
142
|
showFilterMenu?: boolean;
|
|
143
143
|
betweenFilter?: XBetweenFilterProp | "noBetween";
|
|
144
|
+
autoFilter: boolean;
|
|
144
145
|
width?: string;
|
|
145
146
|
contentType?: XContentType;
|
|
146
147
|
fieldSetId?: string;
|
|
@@ -156,5 +157,6 @@ export declare const XLazyColumn: {
|
|
|
156
157
|
(props: XLazyColumnProps): null;
|
|
157
158
|
defaultProps: {
|
|
158
159
|
columnViewStatus: boolean;
|
|
160
|
+
autoFilter: boolean;
|
|
159
161
|
};
|
|
160
162
|
};
|
|
@@ -295,7 +295,7 @@ var XLazyDataTable = function (props) {
|
|
|
295
295
|
*/
|
|
296
296
|
var getStateKey = function (stateKeySuffix) {
|
|
297
297
|
var _a;
|
|
298
|
-
return "
|
|
298
|
+
return "x-ldt-state-".concat((_a = props.stateKey) !== null && _a !== void 0 ? _a : props.entity, "-").concat(stateKeySuffix);
|
|
299
299
|
};
|
|
300
300
|
var removePagingFromStorage = function () {
|
|
301
301
|
XUtils_1.XUtils.removeValueFromStorage(getStateKey(XStateKeySuffix.pagingFirst));
|
|
@@ -394,7 +394,7 @@ var XLazyDataTable = function (props) {
|
|
|
394
394
|
// tymto zavolanim sa zapise znak zapisany klavesnicou do inputu filtra (ak prikaz zakomentujeme, input filtra zostane prazdny)
|
|
395
395
|
setFilters(event.filters);
|
|
396
396
|
removePagingFromStorage();
|
|
397
|
-
loadDataBaseIfAutoFilter(event.filters);
|
|
397
|
+
loadDataBaseIfAutoFilter(event.filters, false);
|
|
398
398
|
};
|
|
399
399
|
var onSort = function (event) {
|
|
400
400
|
//console.log("zavolany onSort - this.state.multiSortMeta = " + JSON.stringify(multiSortMeta));
|
|
@@ -404,8 +404,8 @@ var XLazyDataTable = function (props) {
|
|
|
404
404
|
findParam.multiSortMeta = event.multiSortMeta; // prepiseme multiSortMeta, lebo je tam stara hodnota (volanie setMultiSortMeta nezmeni multiSortMeta hned)
|
|
405
405
|
loadDataBase(findParam);
|
|
406
406
|
};
|
|
407
|
-
var loadDataBaseIfAutoFilter = function (filters) {
|
|
408
|
-
if (props.autoFilter) {
|
|
407
|
+
var loadDataBaseIfAutoFilter = function (filters, fieldAutoFilter) {
|
|
408
|
+
if (props.autoFilter || fieldAutoFilter) {
|
|
409
409
|
var findParam = createFindParam();
|
|
410
410
|
findParam.filters = filters; // prepiseme filters, lebo je tam stara hodnota
|
|
411
411
|
loadDataBase(findParam);
|
|
@@ -544,6 +544,9 @@ var XLazyDataTable = function (props) {
|
|
|
544
544
|
setFiltersAfterFiltering(filters);
|
|
545
545
|
setFtsInputValueAfterFiltering(ftsInputValue ? __assign({}, ftsInputValue) : undefined);
|
|
546
546
|
setOptionalCustomFilterAfterFiltering(optionalCustomFilter);
|
|
547
|
+
// async check for new version - the purpose is to get new version of app to the browser (if available) in short time (10 minutes)
|
|
548
|
+
// (if there is no new version, the check will run async (as the last operation) and nothing will happen)
|
|
549
|
+
XUtils_1.XUtils.reloadIfNewVersion();
|
|
547
550
|
return [2 /*return*/];
|
|
548
551
|
}
|
|
549
552
|
});
|
|
@@ -868,9 +871,9 @@ var XLazyDataTable = function (props) {
|
|
|
868
871
|
};
|
|
869
872
|
// ****** dropdown vo filtri ********
|
|
870
873
|
// pouziva sa len pre simple filtrovanie (filterDisplay="row")
|
|
871
|
-
var onDropdownFilterChange = function (field, displayValue) {
|
|
874
|
+
var onDropdownFilterChange = function (field, displayValue, fieldAutoFilter) {
|
|
872
875
|
var filterValue = displayValue !== XUtils_1.XUtils.dropdownEmptyOptionValue ? displayValue : null;
|
|
873
|
-
setFilterValue(field, filterValue, api_1.FilterMatchMode.EQUALS);
|
|
876
|
+
setFilterValue(field, filterValue, api_1.FilterMatchMode.EQUALS, undefined, fieldAutoFilter);
|
|
874
877
|
};
|
|
875
878
|
var getDropdownFilterValue = function (field) {
|
|
876
879
|
var filterValue = getFilterValue(field);
|
|
@@ -885,7 +888,7 @@ var XLazyDataTable = function (props) {
|
|
|
885
888
|
var filtersCloned = __assign({}, filters);
|
|
886
889
|
setFilters(filtersCloned);
|
|
887
890
|
removePagingFromStorage();
|
|
888
|
-
loadDataBaseIfAutoFilter(filtersCloned);
|
|
891
|
+
loadDataBaseIfAutoFilter(filtersCloned, false);
|
|
889
892
|
};
|
|
890
893
|
// vseobecna specialna metodka pouzvana pri custom filtri (XLazyColumn.filterElement)
|
|
891
894
|
var getFilterItem = function (field) {
|
|
@@ -893,7 +896,7 @@ var XLazyDataTable = function (props) {
|
|
|
893
896
|
};
|
|
894
897
|
// vseobecna metodka - nastavi hodnotu do filtra
|
|
895
898
|
// ak je matchMode === undefined, tak zachova povodnu hodnotu matchMode
|
|
896
|
-
var setFilterValue = function (field, value, matchMode, customFilterItems) {
|
|
899
|
+
var setFilterValue = function (field, value, matchMode, customFilterItems, fieldAutoFilter) {
|
|
897
900
|
var filterValue = filters[field]; // funguje len pre filterDisplay="row"
|
|
898
901
|
filterValue.value = value;
|
|
899
902
|
if (matchMode !== undefined) {
|
|
@@ -906,7 +909,7 @@ var XLazyDataTable = function (props) {
|
|
|
906
909
|
// we had problem when page was set to e.g. 3 (more than 1), after setting some filter value that caused that only 1 page should be returned
|
|
907
910
|
// - after returning back to browse no rows were displayed (because requested page was 3) (this is quick fix)
|
|
908
911
|
removePagingFromStorage();
|
|
909
|
-
loadDataBaseIfAutoFilter(filtersCloned);
|
|
912
|
+
loadDataBaseIfAutoFilter(filtersCloned, fieldAutoFilter);
|
|
910
913
|
};
|
|
911
914
|
// vseobecna metodka - precita hodnotu z filtra (vrati napr. typ Date | null)
|
|
912
915
|
var getFilterValue = function (field) {
|
|
@@ -921,7 +924,7 @@ var XLazyDataTable = function (props) {
|
|
|
921
924
|
// ****** vseobecne metodky pre set/get do/z filtra - pre betweenFilter ********
|
|
922
925
|
// do DataTableFilterMetaData.value ulozime dvojprvkove pole [value1, value2]
|
|
923
926
|
// na backende spracujeme toto dvojprvkove pole
|
|
924
|
-
var setFilterValue1 = function (field, value) {
|
|
927
|
+
var setFilterValue1 = function (field, value, fieldAutoFilter) {
|
|
925
928
|
// na zaciatku (po inicializacii lazy table) je filterValue = null
|
|
926
929
|
var filterValue = getFilterValue(field);
|
|
927
930
|
if (filterValue !== null) {
|
|
@@ -930,9 +933,9 @@ var XLazyDataTable = function (props) {
|
|
|
930
933
|
else {
|
|
931
934
|
filterValue = [value, null];
|
|
932
935
|
}
|
|
933
|
-
setFilterValue(field, filterValue, api_1.FilterMatchMode.BETWEEN);
|
|
936
|
+
setFilterValue(field, filterValue, api_1.FilterMatchMode.BETWEEN, undefined, fieldAutoFilter);
|
|
934
937
|
};
|
|
935
|
-
var setFilterValue2 = function (field, value) {
|
|
938
|
+
var setFilterValue2 = function (field, value, fieldAutoFilter) {
|
|
936
939
|
// na zaciatku (po inicializacii lazy table) je filterValue = null
|
|
937
940
|
var filterValue = getFilterValue(field);
|
|
938
941
|
if (filterValue !== null) {
|
|
@@ -941,7 +944,7 @@ var XLazyDataTable = function (props) {
|
|
|
941
944
|
else {
|
|
942
945
|
filterValue = [null, value];
|
|
943
946
|
}
|
|
944
|
-
setFilterValue(field, filterValue, api_1.FilterMatchMode.BETWEEN);
|
|
947
|
+
setFilterValue(field, filterValue, api_1.FilterMatchMode.BETWEEN, undefined, fieldAutoFilter);
|
|
945
948
|
};
|
|
946
949
|
var getFilterValue1 = function (field) {
|
|
947
950
|
return getFilterValue1or2(field, 0);
|
|
@@ -1215,20 +1218,20 @@ var XLazyDataTable = function (props) {
|
|
|
1215
1218
|
}
|
|
1216
1219
|
var xAssoc = XUtilsMetadataCommon_1.XUtilsMetadataCommon.getXAssocToOneByPath(xEntity, assocField_1);
|
|
1217
1220
|
var object = getFilterValue(childColumn.props.field);
|
|
1218
|
-
filterElement = react_1.default.createElement(XAutoCompleteBase_1.XAutoCompleteBase, { value: object, onChange: function (object, objectChange) { return setFilterValue(childColumn.props.field, object, undefined, object !== null ? [{ where: "[".concat(assocField_1, "] = ").concat(object['id']), params: {} }] : undefined); }, error: undefined, onErrorChange: function (error) { }, idField: "id", field: displayField, suggestionsQuery: { entity: xAssoc.entityName, filter: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.filter, sortField: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.sortField }, searchBrowse: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.searchBrowse, valueForm: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.valueForm, addRowEnabled: false, width: "100%", scrollHeight: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.scrollHeight, suggestionsLoad: "lazy", lazyLoadMaxRows: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.lazyLoadMaxRows, minLength: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.minLength });
|
|
1221
|
+
filterElement = react_1.default.createElement(XAutoCompleteBase_1.XAutoCompleteBase, { value: object, onChange: function (object, objectChange) { return setFilterValue(childColumn.props.field, object, undefined, object !== null ? [{ where: "[".concat(assocField_1, "] = ").concat(object['id']), params: {} }] : undefined, childColumn.props.autoFilter); }, error: undefined, onErrorChange: function (error) { }, idField: "id", field: displayField, suggestionsQuery: { entity: xAssoc.entityName, filter: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.filter, sortField: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.sortField }, searchBrowse: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.searchBrowse, valueForm: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.valueForm, addRowEnabled: false, width: "100%", scrollHeight: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.scrollHeight, suggestionsLoad: "lazy", lazyLoadMaxRows: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.lazyLoadMaxRows, minLength: autoComplete === null || autoComplete === void 0 ? void 0 : autoComplete.minLength });
|
|
1219
1222
|
}
|
|
1220
1223
|
else {
|
|
1221
1224
|
if (xField.type === "boolean") {
|
|
1222
1225
|
var checkboxValue = getFilterValue(childColumn.props.field);
|
|
1223
|
-
filterElement = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: checkboxValue, onChange: function (e) { return setFilterValue(childColumn.props.field, e.value, api_1.FilterMatchMode.EQUALS); } });
|
|
1226
|
+
filterElement = react_1.default.createElement(tristatecheckbox_1.TriStateCheckbox, { value: checkboxValue, onChange: function (e) { return setFilterValue(childColumn.props.field, e.value, api_1.FilterMatchMode.EQUALS, undefined, childColumn.props.autoFilter); } });
|
|
1224
1227
|
}
|
|
1225
1228
|
else if (childColumn.props.dropdownInFilter) {
|
|
1226
1229
|
var dropdownValue = getDropdownFilterValue(childColumn.props.field);
|
|
1227
|
-
filterElement = react_1.default.createElement(XDropdownDTFilter_1.XDropdownDTFilter, { entity: props.entity, path: childColumn.props.field, value: dropdownValue, onValueChange: onDropdownFilterChange, filter: childColumn.props.dropdownFilter, sortField: childColumn.props.dropdownSortField });
|
|
1230
|
+
filterElement = react_1.default.createElement(XDropdownDTFilter_1.XDropdownDTFilter, { entity: props.entity, path: childColumn.props.field, value: dropdownValue, onValueChange: function (field, displayValue) { return onDropdownFilterChange(field, displayValue, childColumn.props.autoFilter); }, filter: childColumn.props.dropdownFilter, sortField: childColumn.props.dropdownSortField });
|
|
1228
1231
|
}
|
|
1229
1232
|
else if (xField.type === "string") {
|
|
1230
1233
|
var stringValue = getFilterValue(childColumn.props.field);
|
|
1231
|
-
filterElement = react_1.default.createElement(XInputTextBase_1.XInputTextBase, { value: stringValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value); } });
|
|
1234
|
+
filterElement = react_1.default.createElement(XInputTextBase_1.XInputTextBase, { value: stringValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value, undefined, undefined, childColumn.props.autoFilter); } });
|
|
1232
1235
|
}
|
|
1233
1236
|
else if (xField.type === "date" || xField.type === "datetime") {
|
|
1234
1237
|
betweenFilter = getBetweenFilter(childColumn.props.betweenFilter, props.betweenFilter);
|
|
@@ -1236,12 +1239,12 @@ var XLazyDataTable = function (props) {
|
|
|
1236
1239
|
// display: 'flex' umiestni XCalendar elementy vedla seba
|
|
1237
1240
|
filterElement =
|
|
1238
1241
|
react_1.default.createElement("div", { style: betweenFilter === "row" ? { display: 'flex' } : undefined },
|
|
1239
|
-
react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value); }, scale: xField.scale, datetime: xField.type === "datetime" }),
|
|
1240
|
-
react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value); }, scale: xField.scale, datetime: xField.type === "datetime" }));
|
|
1242
|
+
react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value, childColumn.props.autoFilter); }, scale: xField.scale, datetime: xField.type === "datetime" }),
|
|
1243
|
+
react_1.default.createElement(XCalendar_1.XCalendar, { value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value, childColumn.props.autoFilter); }, scale: xField.scale, datetime: xField.type === "datetime" }));
|
|
1241
1244
|
}
|
|
1242
1245
|
else {
|
|
1243
1246
|
var dateValue = getFilterValue(childColumn.props.field);
|
|
1244
|
-
filterElement = react_1.default.createElement(XCalendar_1.XCalendar, { value: dateValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value); }, scale: xField.scale, datetime: xField.type === "datetime" });
|
|
1247
|
+
filterElement = react_1.default.createElement(XCalendar_1.XCalendar, { value: dateValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value, undefined, undefined, childColumn.props.autoFilter); }, scale: xField.scale, datetime: xField.type === "datetime" });
|
|
1245
1248
|
}
|
|
1246
1249
|
}
|
|
1247
1250
|
else if (xField.type === "decimal" || xField.type === "number") {
|
|
@@ -1251,12 +1254,12 @@ var XLazyDataTable = function (props) {
|
|
|
1251
1254
|
// display: 'flex' umiestni input elementy pod seba (betweenFilter = "column") resp. vedla seba (betweenFilter = "row")
|
|
1252
1255
|
filterElement =
|
|
1253
1256
|
react_1.default.createElement("div", { style: { display: 'flex', flexDirection: betweenFilter } },
|
|
1254
|
-
react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value); } }, params)),
|
|
1255
|
-
react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value); } }, params)));
|
|
1257
|
+
react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: getFilterValue1(childColumn.props.field), onChange: function (value) { return setFilterValue1(childColumn.props.field, value, childColumn.props.autoFilter); } }, params)),
|
|
1258
|
+
react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: getFilterValue2(childColumn.props.field), onChange: function (value) { return setFilterValue2(childColumn.props.field, value, childColumn.props.autoFilter); } }, params)));
|
|
1256
1259
|
}
|
|
1257
1260
|
else {
|
|
1258
1261
|
var numberValue = getFilterValue(childColumn.props.field);
|
|
1259
|
-
filterElement = react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: numberValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value); } }, params));
|
|
1262
|
+
filterElement = react_1.default.createElement(XInputDecimalBase_1.XInputDecimalBase, __assign({ value: numberValue, onChange: function (value) { return setFilterValue(childColumn.props.field, value, undefined, undefined, childColumn.props.autoFilter); } }, params));
|
|
1260
1263
|
}
|
|
1261
1264
|
}
|
|
1262
1265
|
}
|
|
@@ -1400,5 +1403,6 @@ var XLazyColumn = function (props) {
|
|
|
1400
1403
|
exports.XLazyColumn = XLazyColumn;
|
|
1401
1404
|
exports.XLazyColumn.defaultProps = {
|
|
1402
1405
|
//autoCompleteEnabled: "forStringOnly",
|
|
1403
|
-
columnViewStatus: true
|
|
1406
|
+
columnViewStatus: true,
|
|
1407
|
+
autoFilter: false
|
|
1404
1408
|
};
|
|
@@ -49,6 +49,8 @@ export declare class XUtils {
|
|
|
49
49
|
static csvEncodingOptions: CsvEncoding[];
|
|
50
50
|
static remSize: number | null;
|
|
51
51
|
static FIELD_LABEL_WIDTH: string;
|
|
52
|
+
static lastVersionCheckTimestamp: number | null;
|
|
53
|
+
static VERSION_CHECK_PERIOD: number;
|
|
52
54
|
static demo(): boolean;
|
|
53
55
|
static isMobile(): boolean;
|
|
54
56
|
static mobileCssSuffix(): string;
|
|
@@ -108,4 +110,8 @@ export declare class XUtils {
|
|
|
108
110
|
static saveValueIntoStorage(key: string, value: any): void;
|
|
109
111
|
static getValueFromStorage(key: string, initValue: any): any;
|
|
110
112
|
static removeValueFromStorage(key: string): void;
|
|
113
|
+
static reloadIfNewVersion(): void;
|
|
114
|
+
static reloadIfNewVersionNow(): Promise<void>;
|
|
115
|
+
static isNewVersion(): Promise<boolean>;
|
|
116
|
+
static reload(): void;
|
|
111
117
|
}
|
package/lib/components/XUtils.js
CHANGED
|
@@ -749,6 +749,95 @@ var XUtils = /** @class */ (function () {
|
|
|
749
749
|
XUtils.removeValueFromStorage = function (key) {
|
|
750
750
|
sessionStorage.removeItem(key);
|
|
751
751
|
};
|
|
752
|
+
// hleper method used for items of XLazyDataTable (shortcut ldt)
|
|
753
|
+
// static getValueFromStorageLdt(entity: string, stateKeySuffix: XStateKeySuffix, initValue: any): any {
|
|
754
|
+
// return XUtils.getValueFromStorage(`xldt-state-${entity}-${stateKeySuffix}`, initValue);
|
|
755
|
+
// }
|
|
756
|
+
XUtils.reloadIfNewVersion = function () {
|
|
757
|
+
// to save requests, we check for new version only if 10 minutes (or another time period) are passed from the last check
|
|
758
|
+
// we could use method setInterval (timer) and run check exactly 10 minutes but the disadvantage is that then there will be
|
|
759
|
+
// some processing during idle time and that can exhaust battery on mobile phone (mobile phone will not go to sleeping mode) - is it true?
|
|
760
|
+
var currentTimestamp = Date.now(); // Current time
|
|
761
|
+
if (XUtils.lastVersionCheckTimestamp === null || currentTimestamp - XUtils.lastVersionCheckTimestamp > XUtils.VERSION_CHECK_PERIOD) {
|
|
762
|
+
XUtils.reloadIfNewVersionNow();
|
|
763
|
+
XUtils.lastVersionCheckTimestamp = currentTimestamp;
|
|
764
|
+
}
|
|
765
|
+
};
|
|
766
|
+
XUtils.reloadIfNewVersionNow = function () {
|
|
767
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
768
|
+
return __generator(this, function (_a) {
|
|
769
|
+
switch (_a.label) {
|
|
770
|
+
case 0: return [4 /*yield*/, XUtils.isNewVersion()];
|
|
771
|
+
case 1:
|
|
772
|
+
if (_a.sent()) {
|
|
773
|
+
alert("New version was released. Application will be restarted.");
|
|
774
|
+
XUtils.reload();
|
|
775
|
+
}
|
|
776
|
+
return [2 /*return*/];
|
|
777
|
+
}
|
|
778
|
+
});
|
|
779
|
+
});
|
|
780
|
+
};
|
|
781
|
+
XUtils.isNewVersion = function () {
|
|
782
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
783
|
+
var response, text, r, remoteMainScript, localMainScript, scripts, scripts_1, scripts_1_1, script, rl, err_1;
|
|
784
|
+
var e_7, _a;
|
|
785
|
+
return __generator(this, function (_b) {
|
|
786
|
+
switch (_b.label) {
|
|
787
|
+
case 0:
|
|
788
|
+
_b.trys.push([0, 3, , 4]);
|
|
789
|
+
return [4 /*yield*/, fetch("index.html", { method: 'GET', cache: "no-store" })];
|
|
790
|
+
case 1:
|
|
791
|
+
response = _b.sent();
|
|
792
|
+
return [4 /*yield*/, response.text()];
|
|
793
|
+
case 2:
|
|
794
|
+
text = _b.sent();
|
|
795
|
+
r = /^.*<script.*\/(main.*\.js).*$/gim.exec(text);
|
|
796
|
+
if (!r || r.length < 2) {
|
|
797
|
+
return [2 /*return*/, false];
|
|
798
|
+
}
|
|
799
|
+
remoteMainScript = r.length > 1 ? r[1] : null;
|
|
800
|
+
if (remoteMainScript === null) {
|
|
801
|
+
return [2 /*return*/, false];
|
|
802
|
+
}
|
|
803
|
+
localMainScript = null;
|
|
804
|
+
scripts = document.body.getElementsByTagName('script');
|
|
805
|
+
try {
|
|
806
|
+
for (scripts_1 = __values(scripts), scripts_1_1 = scripts_1.next(); !scripts_1_1.done; scripts_1_1 = scripts_1.next()) {
|
|
807
|
+
script = scripts_1_1.value;
|
|
808
|
+
rl = /^.*\/(main.*\.js).*$/gim.exec(script.src);
|
|
809
|
+
if (!rl || rl.length < 2) {
|
|
810
|
+
continue;
|
|
811
|
+
}
|
|
812
|
+
localMainScript = rl[1];
|
|
813
|
+
break;
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
817
|
+
finally {
|
|
818
|
+
try {
|
|
819
|
+
if (scripts_1_1 && !scripts_1_1.done && (_a = scripts_1.return)) _a.call(scripts_1);
|
|
820
|
+
}
|
|
821
|
+
finally { if (e_7) throw e_7.error; }
|
|
822
|
+
}
|
|
823
|
+
if (localMainScript === null) {
|
|
824
|
+
return [2 /*return*/, false];
|
|
825
|
+
}
|
|
826
|
+
return [2 /*return*/, remoteMainScript !== localMainScript];
|
|
827
|
+
case 3:
|
|
828
|
+
err_1 = _b.sent();
|
|
829
|
+
console.log(err_1);
|
|
830
|
+
return [2 /*return*/, false];
|
|
831
|
+
case 4: return [2 /*return*/];
|
|
832
|
+
}
|
|
833
|
+
});
|
|
834
|
+
});
|
|
835
|
+
};
|
|
836
|
+
XUtils.reload = function () {
|
|
837
|
+
// page reload (like pressing F5 or Enter on url bar)
|
|
838
|
+
// warning - if user has typed some data in form, the data will be lost
|
|
839
|
+
window.location.reload();
|
|
840
|
+
};
|
|
752
841
|
XUtils.dropdownEmptyOptionValue = " ";
|
|
753
842
|
XUtils.xBackendUrl = undefined;
|
|
754
843
|
// nacachovany XToken - na rozlicnych miestach potrebujeme vediet uzivatela
|
|
@@ -766,6 +855,8 @@ var XUtils = /** @class */ (function () {
|
|
|
766
855
|
XUtils.remSize = null;
|
|
767
856
|
// konstanty (zatial takto jednoducho)
|
|
768
857
|
XUtils.FIELD_LABEL_WIDTH = '10.5rem';
|
|
858
|
+
XUtils.lastVersionCheckTimestamp = null;
|
|
859
|
+
XUtils.VERSION_CHECK_PERIOD = 10 * 60 * 1000; // 10 minutes in milliseconds
|
|
769
860
|
return XUtils;
|
|
770
861
|
}());
|
|
771
862
|
exports.XUtils = XUtils;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@michalrakus/x-react-web-lib",
|
|
3
|
-
"version": "1.32.
|
|
3
|
+
"version": "1.32.9",
|
|
4
4
|
"description": "",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"clean": "rimraf lib",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"peerDependencies": {
|
|
41
41
|
"primeflex": "^3.3.1",
|
|
42
42
|
"primeicons": "^7.0.0",
|
|
43
|
-
"primereact": "10.
|
|
43
|
+
"primereact": "10.8.5",
|
|
44
44
|
"quill": "^2.0.3",
|
|
45
45
|
"react": "^18.3.1",
|
|
46
46
|
"react-dom": "^18.3.1",
|