@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.
@@ -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 _c = __values(Object.entries(xFieldSetValues)), _d = _c.next(); !_d.done; _d = _c.next()) {
83
- var _e = __read(_d.value, 2), field = _e[0], value = _e[1];
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
- if (xFieldMeta.type === XFieldType.checkbox) {
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 (_d && !_d.done && (_a = _c.return)) _a.call(_c);
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 "xldt-state-".concat((_a = props.stateKey) !== null && _a !== void 0 ? _a : props.entity, "-").concat(stateKeySuffix);
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 // XViewStatus.ReadWrite
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
  }
@@ -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.7",
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.9.2",
43
+ "primereact": "10.8.5",
44
44
  "quill": "^2.0.3",
45
45
  "react": "^18.3.1",
46
46
  "react-dom": "^18.3.1",