@dexteel/mesf-core 4.10.5 → 4.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [4.11.1](https://github.com/dexteel/mesf-core-frontend/compare/v4.11.0...v4.11.1) (2024-05-05)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **TimeService:** Add some try catches and handle utc datetime strings ([b073cd1](https://github.com/dexteel/mesf-core-frontend/commit/b073cd1e1fc3dcceed7a2155ab1a33e21e962805))
11
+
12
+ ## [4.11.0](https://github.com/dexteel/mesf-core-frontend/compare/v4.10.5...v4.11.0) (2024-05-02)
13
+
14
+
15
+ ### Features
16
+
17
+ * Implement TimeService and timezone from server ([8861ab6](https://github.com/dexteel/mesf-core-frontend/commit/8861ab619c10426e85b4671819bfb74b303a4f8f))
18
+
5
19
  ### [4.10.5](https://github.com/dexteel/mesf-core-frontend/compare/v4.10.4...v4.10.5) (2024-05-02)
6
20
 
7
21
 
@@ -7,6 +7,7 @@ interface Props {
7
7
  navbarTitle?: string;
8
8
  configurations: any;
9
9
  showAreaSelector?: boolean;
10
+ showTrendingsIcon?: boolean;
10
11
  }
11
- declare function MESFMain({ authentication, routes, navbar, navbarTitle, configurations, showAreaSelector, }: Props): React.JSX.Element;
12
+ declare function MESFMain({ authentication, routes, navbar, navbarTitle, configurations, showAreaSelector, showTrendingsIcon, }: Props): React.JSX.Element;
12
13
  export { MESFMain };
@@ -1,5 +1,6 @@
1
1
  import React from "react";
2
- export default function Header({ showAreaSelector, navbarTitle, }: {
2
+ export default function Header({ showAreaSelector, showTrendingsIcon, navbarTitle, }: {
3
3
  showAreaSelector?: boolean;
4
+ showTrendingsIcon?: boolean;
4
5
  navbarTitle?: string;
5
6
  }): React.JSX.Element;
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
- declare const Navigation: ({ showAreaSelector, navbarTitle, }: {
2
+ declare const Navigation: ({ showAreaSelector, showTrendingsIcon, navbarTitle, }: {
3
3
  showAreaSelector?: boolean | undefined;
4
+ showTrendingsIcon?: boolean | undefined;
4
5
  navbarTitle?: string | undefined;
5
6
  }) => React.JSX.Element;
6
7
  export default Navigation;
@@ -1,11 +1,35 @@
1
1
  import { default as React, ReactNode } from "react";
2
2
  export declare const useUTLSettingsContext: () => {
3
3
  state: {
4
- hideBlueBoxes: any;
4
+ serverTimeZone: string;
5
+ settings: {
6
+ [key: string]: any;
7
+ };
5
8
  };
6
9
  actions: import("@reduxjs/toolkit").CaseReducerActions<{
7
- setHideBlueBoxes(state: import("immer/dist/internal").WritableDraft<{
8
- hideBlueBoxes: any;
10
+ setServerTimeZone(state: import("immer/dist/internal").WritableDraft<{
11
+ serverTimeZone: string;
12
+ settings: {
13
+ [key: string]: any;
14
+ };
15
+ }>, { payload }: {
16
+ payload: any;
17
+ type: string;
18
+ }): void;
19
+ setSetting(state: import("immer/dist/internal").WritableDraft<{
20
+ serverTimeZone: string;
21
+ settings: {
22
+ [key: string]: any;
23
+ };
24
+ }>, { payload }: {
25
+ payload: any;
26
+ type: string;
27
+ }): void;
28
+ initSettings(state: import("immer/dist/internal").WritableDraft<{
29
+ serverTimeZone: string;
30
+ settings: {
31
+ [key: string]: any;
32
+ };
9
33
  }>, { payload }: {
10
34
  payload: any;
11
35
  type: string;
@@ -1,3 +1,5 @@
1
- export declare const useSearchUTLSettings: (setError: (err: string) => void) => {
2
- searchUTLSettings: () => void;
1
+ export declare const useSearchUTLSettings: ({ onError }: {
2
+ onError: (err: string) => void;
3
+ }) => {
4
+ searchUTLSettings: () => Promise<void>;
3
5
  };
package/dist/index.esm.js CHANGED
@@ -77,6 +77,8 @@ import 'ag-grid-community/styles/ag-theme-alpine.css';
77
77
  import ImageIcon from '@material-ui/icons/Image';
78
78
  import ListAltIcon from '@material-ui/icons/ListAlt';
79
79
  import DescriptionIcon from '@material-ui/icons/Description';
80
+ import { format, fromZonedTime, formatInTimeZone } from 'date-fns-tz';
81
+ import { findIana } from 'windows-iana';
80
82
  import FormControlLabel$1 from '@material-ui/core/FormControlLabel';
81
83
  import Checkbox$1 from '@material-ui/core/Checkbox';
82
84
  import Input from '@material-ui/core/Input';
@@ -7297,6 +7299,62 @@ var MESApiService = /** @class */ (function () {
7297
7299
  return MESApiService;
7298
7300
  }());
7299
7301
 
7302
+ var TimeService = /** @class */ (function () {
7303
+ function TimeService() {
7304
+ this.timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
7305
+ }
7306
+ TimeService.getInstance = function () {
7307
+ if (!TimeService.instance) {
7308
+ TimeService.instance = new TimeService();
7309
+ }
7310
+ return TimeService.instance;
7311
+ };
7312
+ TimeService.prototype.setTimeZone = function (timeZone) {
7313
+ var ianaTimeZones = findIana(timeZone);
7314
+ if (ianaTimeZones.length) {
7315
+ this.timeZone = ianaTimeZones[0];
7316
+ }
7317
+ else {
7318
+ this.timeZone = timeZone;
7319
+ }
7320
+ };
7321
+ TimeService.prototype.toUTC = function (datetime, format$1) {
7322
+ try {
7323
+ if (datetime instanceof Date) {
7324
+ return format(datetime, format$1);
7325
+ }
7326
+ return format(fromZonedTime(datetime, TimeService.instance.timeZone), format$1);
7327
+ }
7328
+ catch (e) {
7329
+ console.log({ datetime: datetime, e: e });
7330
+ return '';
7331
+ }
7332
+ };
7333
+ TimeService.prototype.toLocalServerTime = function (datetime, format) {
7334
+ try {
7335
+ if (isNil$1(datetime) || !datetime) {
7336
+ return '';
7337
+ }
7338
+ if (typeof datetime === 'string') {
7339
+ if (datetime.includes('Z')) {
7340
+ datetime = new Date(datetime);
7341
+ }
7342
+ else {
7343
+ datetime = new Date("".concat(datetime, "Z"));
7344
+ }
7345
+ }
7346
+ return formatInTimeZone(datetime, TimeService.instance.timeZone, format);
7347
+ }
7348
+ catch (e) {
7349
+ console.log({ datetime: datetime, e: e });
7350
+ return '';
7351
+ }
7352
+ };
7353
+ return TimeService;
7354
+ }());
7355
+ var dxtToUTC = TimeService.getInstance().toUTC;
7356
+ var dxtToLocalServerTime = TimeService.getInstance().toLocalServerTime;
7357
+
7300
7358
  var getUser = function (UserId, UserName) { return __awaiter(void 0, void 0, void 0, function () {
7301
7359
  var apiService, parameters, resp;
7302
7360
  return __generator(this, function (_a) {
@@ -8138,15 +8196,32 @@ var useSearchAssets = function (setError) {
8138
8196
  };
8139
8197
 
8140
8198
  var UTLSettingsInitialState = {
8141
- hideBlueBoxes: {}
8199
+ serverTimeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
8200
+ settings: {}
8142
8201
  };
8143
8202
  var UTLSettingsReducer = createSlice({
8144
8203
  name: "__",
8145
8204
  initialState: UTLSettingsInitialState,
8146
8205
  reducers: {
8147
- setHideBlueBoxes: function (state, _a) {
8206
+ setServerTimeZone: function (state, _a) {
8207
+ var payload = _a.payload;
8208
+ state.serverTimeZone = payload;
8209
+ },
8210
+ setSetting: function (state, _a) {
8148
8211
  var payload = _a.payload;
8149
- state.hideBlueBoxes = payload;
8212
+ state.settings[payload.key] = payload.value;
8213
+ },
8214
+ initSettings: function (state, _a) {
8215
+ var payload = _a.payload;
8216
+ state.settings = payload
8217
+ .reduce(function (acc, cur) {
8218
+ if (cur.SettingName.trim() === 'TimeZone') {
8219
+ var timeService = TimeService.getInstance();
8220
+ timeService.setTimeZone(cur.Value);
8221
+ }
8222
+ acc[cur.SettingName.trim()] = cur.Value;
8223
+ return acc;
8224
+ }, {});
8150
8225
  }
8151
8226
  }
8152
8227
  });
@@ -8165,24 +8240,27 @@ var UTLSettingsProvider = function (_a) {
8165
8240
  return (React__default.createElement(UTLSettingsContext.Provider, { value: { state: state, actions: actions } }, children));
8166
8241
  };
8167
8242
 
8168
- var useSearchUTLSettings = function (setError) {
8169
- var setHideBlueBoxes = useUTLSettingsContext().actions.setHideBlueBoxes;
8170
- var searchUTLSettings = function () {
8171
- getUTLSettings().then(function (res) { return __awaiter(void 0, void 0, void 0, function () {
8172
- var hideBlueBoxesSetting;
8173
- return __generator(this, function (_a) {
8174
- if (res.ok) {
8175
- hideBlueBoxesSetting = get(res, "data.tables[0].rows[4]", {});
8176
- hideBlueBoxesSetting.SettingName =
8177
- hideBlueBoxesSetting === null || hideBlueBoxesSetting === void 0 ? void 0 : hideBlueBoxesSetting.SettingName.trim();
8178
- setHideBlueBoxes(hideBlueBoxesSetting);
8179
- }
8180
- else
8181
- setError(res.message);
8182
- return [2 /*return*/];
8183
- });
8184
- }); });
8185
- };
8243
+ var useSearchUTLSettings = function (_a) {
8244
+ var onError = _a.onError;
8245
+ var initSettings = useUTLSettingsContext().actions.initSettings;
8246
+ var searchUTLSettings = function () { return __awaiter(void 0, void 0, void 0, function () {
8247
+ var res, settings;
8248
+ return __generator(this, function (_a) {
8249
+ switch (_a.label) {
8250
+ case 0: return [4 /*yield*/, getUTLSettings()];
8251
+ case 1:
8252
+ res = _a.sent();
8253
+ if (res.ok) {
8254
+ settings = get(res, "data.tables[0].rows", []);
8255
+ initSettings(settings);
8256
+ }
8257
+ else {
8258
+ onError(res.message);
8259
+ }
8260
+ return [2 /*return*/];
8261
+ }
8262
+ });
8263
+ }); };
8186
8264
  return { searchUTLSettings: searchUTLSettings };
8187
8265
  };
8188
8266
 
@@ -8192,14 +8270,17 @@ var AreaSelector$1 = lazy(function () {
8192
8270
  }); });
8193
8271
  });
8194
8272
  function Header$1(_a) {
8195
- var _b = _a.showAreaSelector, showAreaSelector = _b === void 0 ? false : _b, _c = _a.navbarTitle, navbarTitle = _c === void 0 ? "MESF" : _c;
8273
+ var _b = _a.showAreaSelector, showAreaSelector = _b === void 0 ? false : _b, _c = _a.showTrendingsIcon, showTrendingsIcon = _c === void 0 ? true : _c, _d = _a.navbarTitle, navbarTitle = _d === void 0 ? "MESF" : _d;
8196
8274
  var getUserName = useToken().getUserName;
8197
- var _d = useState(""), error = _d[0], setError = _d[1];
8198
- var _e = useState(new Date()), date = _e[0], setDate = _e[1];
8275
+ var _e = useState(""), error = _e[0], setError = _e[1];
8276
+ var _f = useState(new Date()), date = _f[0], setDate = _f[1];
8199
8277
  var CustomNavbar = useContext(NavbarContext);
8200
8278
  var userName = useState(getUserName())[0];
8201
8279
  var searchAssets = useSearchAssets(setError).searchAssets;
8202
- var searchUTLSettings = useSearchUTLSettings(setError).searchUTLSettings;
8280
+ var _g = useState(false), settingsIsReady = _g[0], setSettingsIsReady = _g[1];
8281
+ var searchUTLSettings = useSearchUTLSettings({
8282
+ onError: setError
8283
+ }).searchUTLSettings;
8203
8284
  var userLogged = useUserContext().state.userLogged;
8204
8285
  var tick = function () {
8205
8286
  setDate(new Date());
@@ -8213,11 +8294,15 @@ function Header$1(_a) {
8213
8294
  };
8214
8295
  });
8215
8296
  useEffect(function () {
8216
- if (showAreaSelector && userLogged) {
8297
+ searchUTLSettings().then(function () {
8298
+ setSettingsIsReady(true);
8299
+ });
8300
+ }, []);
8301
+ useEffect(function () {
8302
+ if (showAreaSelector && userLogged && settingsIsReady) {
8217
8303
  searchAssets();
8218
- searchUTLSettings();
8219
8304
  }
8220
- }, [userLogged]);
8305
+ }, [userLogged, settingsIsReady]);
8221
8306
  return (React__default.createElement(Navbar, { variant: "dark", expand: "lg", className: "mes-primary-color mes-menu-top" },
8222
8307
  React__default.createElement(Container, { fluid: true },
8223
8308
  React__default.createElement(Navbar.Brand, { as: Link, to: "/home" }, navbarTitle),
@@ -8226,12 +8311,12 @@ function Header$1(_a) {
8226
8311
  React__default.createElement(Nav, { className: "me-auto" },
8227
8312
  React__default.createElement(CustomNavbar, null)),
8228
8313
  React__default.createElement(Nav, { className: "ml-auto", style: { alignItems: "baseline" } },
8229
- React__default.createElement(Nav, { className: "mx-2" },
8314
+ showTrendingsIcon ? (React__default.createElement(Nav, { className: "mx-2" },
8230
8315
  React__default.createElement(Nav.Link, { as: Link, to: "/trendings" },
8231
8316
  React__default.createElement(Tooltip, { title: 'Trendings', placement: "top", arrow: true, interactive: true, enterDelay: 1500 },
8232
- React__default.createElement(ShowChartIcon, null)))),
8317
+ React__default.createElement(ShowChartIcon, null))))) : null,
8233
8318
  React__default.createElement(Nav, null,
8234
- React__default.createElement("span", { className: "navbar-text" }, date.toLocaleTimeString())),
8319
+ React__default.createElement("span", { className: "navbar-text" }, dxtToLocalServerTime(date, 'HH:mm:ss z'))),
8235
8320
  React__default.createElement(Nav, { className: "mx-2" },
8236
8321
  React__default.createElement(Nav.Link, { as: Link, to: "/configuration" },
8237
8322
  React__default.createElement("i", { className: "fas fa-cog" }))),
@@ -11091,8 +11176,8 @@ var MESFMainContainer = function () { return (React__default.createElement("div"
11091
11176
  React__default.createElement(MESFMainRouter, null))); };
11092
11177
 
11093
11178
  var Navigation = function (_a) {
11094
- var _b = _a.showAreaSelector, showAreaSelector = _b === void 0 ? false : _b, _c = _a.navbarTitle, navbarTitle = _c === void 0 ? "MESF" : _c;
11095
- var _d = useSearchParams(), params = _d[0]; _d[1];
11179
+ var _b = _a.showAreaSelector, showAreaSelector = _b === void 0 ? false : _b, _c = _a.showTrendingsIcon, showTrendingsIcon = _c === void 0 ? true : _c, _d = _a.navbarTitle, navbarTitle = _d === void 0 ? "MESF" : _d;
11180
+ var _e = useSearchParams(), params = _e[0]; _e[1];
11096
11181
  var mounted = useRef(true);
11097
11182
  useEffect(function () {
11098
11183
  if (params.has("redirectTo")) {
@@ -11107,7 +11192,7 @@ var Navigation = function (_a) {
11107
11192
  };
11108
11193
  }, [params.toString()]);
11109
11194
  return (React__default.createElement("div", { className: "wrapper" },
11110
- React__default.createElement(Header$1, { showAreaSelector: showAreaSelector, navbarTitle: navbarTitle }),
11195
+ React__default.createElement(Header$1, { showAreaSelector: showAreaSelector, navbarTitle: navbarTitle, showTrendingsIcon: showTrendingsIcon }),
11111
11196
  React__default.createElement(MESFMainContainer, null)));
11112
11197
  };
11113
11198
 
@@ -11116,7 +11201,7 @@ n(css,{});
11116
11201
 
11117
11202
  var base = document.getElementsByTagName("base")[0].getAttribute("href") || "/";
11118
11203
  function MESFMain(_a) {
11119
- var authentication = _a.authentication, routes = _a.routes, navbar = _a.navbar, _b = _a.navbarTitle, navbarTitle = _b === void 0 ? "MESF" : _b, configurations = _a.configurations, _c = _a.showAreaSelector, showAreaSelector = _c === void 0 ? false : _c;
11204
+ var authentication = _a.authentication, routes = _a.routes, navbar = _a.navbar, _b = _a.navbarTitle, navbarTitle = _b === void 0 ? "MESF" : _b, configurations = _a.configurations, _c = _a.showAreaSelector, showAreaSelector = _c === void 0 ? false : _c, _d = _a.showTrendingsIcon, showTrendingsIcon = _d === void 0 ? true : _d;
11120
11205
  return (React__default.createElement(AuthProvider, { authConfig: authentication },
11121
11206
  React__default.createElement(UserProvider, null,
11122
11207
  React__default.createElement(AssetProvider, null,
@@ -11127,7 +11212,7 @@ function MESFMain(_a) {
11127
11212
  React__default.createElement(BrowserRouter, { basename: base },
11128
11213
  React__default.createElement(Routes, null,
11129
11214
  React__default.createElement(Route, { path: "/logout", element: React__default.createElement(Logout, null) })),
11130
- React__default.createElement(Navigation, { showAreaSelector: showAreaSelector, navbarTitle: navbarTitle }))))))))));
11215
+ React__default.createElement(Navigation, { showAreaSelector: showAreaSelector, showTrendingsIcon: showTrendingsIcon, navbarTitle: navbarTitle }))))))))));
11131
11216
  }
11132
11217
 
11133
11218
  var useDefaultAreaId = function (setError) {
@@ -11269,5 +11354,5 @@ var areaSelector = /*#__PURE__*/Object.freeze({
11269
11354
  AreaSelector: AreaSelector
11270
11355
  });
11271
11356
 
11272
- export { Account, AssetProvider, AuthContext, AuthProvider, BarChartControl, ButtonWithLoading, ChangePassword, CheckBoxControl, Configuration$1 as Configuration, CurrencyFormatter, DataGridControl, DateFormatter, DateTimeFormatter, ErrorModal, FetchError, FilterPanel, GenericPanel, GenericTable, GetCrewColor, GetShiftColor, HorizontalTextControl, IntegerFormatter, Login, Logout, LongFilterPanel, MESApiService, MESFMain, MESSAGE_API, MESSAGE_ERRORS, MasterDetailPanel, MesfModal, ModalTreeFilterControl, MultipleSelectorControl, NumberFormatter, NumericTextControl, SimplePasswordControl, SimpleSelectorControl, SimpleTextAreaControl, SimpleTextControl, TimeFormatter, TreePickerControl, TrendingsPage, USER_LABELS, UTLSettingsProvider, UploadFileControl, UserProvider, axiosInstance, deleteUser, formatNumber, getAuthTypes, getCrewStyle, getDataUser, getError, getProfiles, getShiftStyle, getTokenFromLS, getUsers, renewToken, setPassword, setProfilesToUser, upsertUser, useAssetContext, useToken, useUTLSettingsContext, useUserContext };
11357
+ export { Account, AssetProvider, AuthContext, AuthProvider, BarChartControl, ButtonWithLoading, ChangePassword, CheckBoxControl, Configuration$1 as Configuration, CurrencyFormatter, DataGridControl, DateFormatter, DateTimeFormatter, ErrorModal, FetchError, FilterPanel, GenericPanel, GenericTable, GetCrewColor, GetShiftColor, HorizontalTextControl, IntegerFormatter, Login, Logout, LongFilterPanel, MESApiService, MESFMain, MESSAGE_API, MESSAGE_ERRORS, MasterDetailPanel, MesfModal, ModalTreeFilterControl, MultipleSelectorControl, NumberFormatter, NumericTextControl, SimplePasswordControl, SimpleSelectorControl, SimpleTextAreaControl, SimpleTextControl, TimeFormatter, TimeService, TreePickerControl, TrendingsPage, USER_LABELS, UTLSettingsProvider, UploadFileControl, UserProvider, axiosInstance, deleteUser, dxtToLocalServerTime, dxtToUTC, formatNumber, getAuthTypes, getCrewStyle, getDataUser, getError, getProfiles, getShiftStyle, getTokenFromLS, getUsers, renewToken, setPassword, setProfilesToUser, upsertUser, useAssetContext, useToken, useUTLSettingsContext, useUserContext };
11273
11358
  //# sourceMappingURL=index.esm.js.map