@oneuptime/common 7.0.4257 → 7.0.4260

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.
@@ -1,5 +1,6 @@
1
1
  import PageError from "../Error/PageError";
2
2
  import PageLoader from "../Loader/PageLoader";
3
+ import OfflineIndicator from "../Offline/OfflineIndicator";
3
4
  import TopSection from "../TopSection/TopSection";
4
5
  import React, { FunctionComponent, ReactElement } from "react";
5
6
 
@@ -19,6 +20,8 @@ export interface ComponentProps {
19
20
  const MasterPage: FunctionComponent<ComponentProps> = (
20
21
  props: ComponentProps,
21
22
  ): ReactElement => {
23
+ const [isOnline, setIsOnline] = React.useState(true);
24
+
22
25
  if (props.isLoading) {
23
26
  return (
24
27
  <React.Fragment>
@@ -37,20 +40,29 @@ const MasterPage: FunctionComponent<ComponentProps> = (
37
40
 
38
41
  return (
39
42
  <React.Fragment>
40
- <div className={props.className}>
41
- <div className={props.makeTopSectionUnstick ? "" : "sticky top-0 z-10"}>
42
- <TopSection
43
- hideHeader={props.hideHeader}
44
- className={props.topSectionClassName}
45
- header={props.header}
46
- navbar={props.navBar}
47
- />
48
- </div>
43
+ {isOnline && (
44
+ <div className={props.className}>
45
+ <div
46
+ className={props.makeTopSectionUnstick ? "" : "sticky top-0 z-10"}
47
+ >
48
+ <TopSection
49
+ hideHeader={props.hideHeader}
50
+ className={props.topSectionClassName}
51
+ header={props.header}
52
+ navbar={props.navBar}
53
+ />
54
+ </div>
49
55
 
50
- {props.children}
56
+ {props.children}
51
57
 
52
- {props.footer && props.footer}
53
- </div>
58
+ {props.footer && props.footer}
59
+ </div>
60
+ )}
61
+ <OfflineIndicator
62
+ onOnlineOfflineChange={(isOnline: boolean) => {
63
+ return setIsOnline(isOnline);
64
+ }}
65
+ />
54
66
  </React.Fragment>
55
67
  );
56
68
  };
@@ -0,0 +1,54 @@
1
+ import React, { useState, useEffect, ReactElement } from "react";
2
+ import EmptyState from "../EmptyState/EmptyState";
3
+ import IconProp from "../../../Types/Icon/IconProp";
4
+ import { VoidFunction } from "../../../Types/FunctionTypes";
5
+
6
+ interface OfflineIndicatorProps {
7
+ onOnlineOfflineChange?: (isOnline: boolean) => void;
8
+ }
9
+
10
+ type OfflineIndicatorComponent = React.FC<OfflineIndicatorProps>;
11
+
12
+ const OfflineIndicator: OfflineIndicatorComponent = ({
13
+ onOnlineOfflineChange,
14
+ }: OfflineIndicatorProps): ReactElement => {
15
+ const [isOnline, setIsOnline] = useState(navigator.onLine);
16
+
17
+ useEffect(() => {
18
+ const handleOnline: VoidFunction = () => {
19
+ setIsOnline(true);
20
+ onOnlineOfflineChange?.(true);
21
+ };
22
+
23
+ const handleOffline: VoidFunction = () => {
24
+ setIsOnline(false);
25
+ onOnlineOfflineChange?.(false);
26
+ };
27
+
28
+ window.addEventListener("online", handleOnline);
29
+ window.addEventListener("offline", handleOffline);
30
+
31
+ // Call with initial state
32
+ onOnlineOfflineChange?.(navigator.onLine);
33
+
34
+ return () => {
35
+ window.removeEventListener("online", handleOnline);
36
+ window.removeEventListener("offline", handleOffline);
37
+ };
38
+ }, [onOnlineOfflineChange]);
39
+
40
+ return (
41
+ <div>
42
+ {!isOnline && (
43
+ <EmptyState
44
+ id="offline-indicator"
45
+ title="You are offline"
46
+ description="Please check your internet connection."
47
+ icon={IconProp.NoSignal}
48
+ />
49
+ )}
50
+ </div>
51
+ );
52
+ };
53
+
54
+ export default OfflineIndicator;
@@ -1,8 +1,10 @@
1
1
  import PageError from "../Error/PageError";
2
2
  import PageLoader from "../Loader/PageLoader";
3
+ import OfflineIndicator from "../Offline/OfflineIndicator";
3
4
  import TopSection from "../TopSection/TopSection";
4
5
  import React from "react";
5
6
  const MasterPage = (props) => {
7
+ const [isOnline, setIsOnline] = React.useState(true);
6
8
  if (props.isLoading) {
7
9
  return (React.createElement(React.Fragment, null,
8
10
  React.createElement(PageLoader, { isVisible: true })));
@@ -12,11 +14,14 @@ const MasterPage = (props) => {
12
14
  React.createElement(PageError, { message: props.error })));
13
15
  }
14
16
  return (React.createElement(React.Fragment, null,
15
- React.createElement("div", { className: props.className },
17
+ isOnline && (React.createElement("div", { className: props.className },
16
18
  React.createElement("div", { className: props.makeTopSectionUnstick ? "" : "sticky top-0 z-10" },
17
19
  React.createElement(TopSection, { hideHeader: props.hideHeader, className: props.topSectionClassName, header: props.header, navbar: props.navBar })),
18
20
  props.children,
19
- props.footer && props.footer)));
21
+ props.footer && props.footer)),
22
+ React.createElement(OfflineIndicator, { onOnlineOfflineChange: (isOnline) => {
23
+ return setIsOnline(isOnline);
24
+ } })));
20
25
  };
21
26
  export default MasterPage;
22
27
  //# sourceMappingURL=MasterPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MasterPage.js","sourceRoot":"","sources":["../../../../../UI/Components/MasterPage/MasterPage.tsx"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAC9C,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,KAA0C,MAAM,OAAO,CAAC;AAe/D,MAAM,UAAU,GAAsC,CACpD,KAAqB,EACP,EAAE;IAChB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,CACL,oBAAC,KAAK,CAAC,QAAQ;YACb,oBAAC,UAAU,IAAC,SAAS,EAAE,IAAI,GAAI,CAChB,CAClB,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CACL,oBAAC,KAAK,CAAC,QAAQ;YACb,oBAAC,SAAS,IAAC,OAAO,EAAE,KAAK,CAAC,KAAK,GAAI,CACpB,CAClB,CAAC;IACJ,CAAC;IAED,OAAO,CACL,oBAAC,KAAK,CAAC,QAAQ;QACb,6BAAK,SAAS,EAAE,KAAK,CAAC,SAAS;YAC7B,6BAAK,SAAS,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB;gBACpE,oBAAC,UAAU,IACT,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,SAAS,EAAE,KAAK,CAAC,mBAAmB,EACpC,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,MAAM,EAAE,KAAK,CAAC,MAAM,GACpB,CACE;YAEL,KAAK,CAAC,QAAQ;YAEd,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CACzB,CACS,CAClB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"MasterPage.js","sourceRoot":"","sources":["../../../../../UI/Components/MasterPage/MasterPage.tsx"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAC9C,OAAO,gBAAgB,MAAM,6BAA6B,CAAC;AAC3D,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,KAA0C,MAAM,OAAO,CAAC;AAe/D,MAAM,UAAU,GAAsC,CACpD,KAAqB,EACP,EAAE;IAChB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAErD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,CACL,oBAAC,KAAK,CAAC,QAAQ;YACb,oBAAC,UAAU,IAAC,SAAS,EAAE,IAAI,GAAI,CAChB,CAClB,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CACL,oBAAC,KAAK,CAAC,QAAQ;YACb,oBAAC,SAAS,IAAC,OAAO,EAAE,KAAK,CAAC,KAAK,GAAI,CACpB,CAClB,CAAC;IACJ,CAAC;IAED,OAAO,CACL,oBAAC,KAAK,CAAC,QAAQ;QACZ,QAAQ,IAAI,CACX,6BAAK,SAAS,EAAE,KAAK,CAAC,SAAS;YAC7B,6BACE,SAAS,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB;gBAEjE,oBAAC,UAAU,IACT,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,SAAS,EAAE,KAAK,CAAC,mBAAmB,EACpC,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,MAAM,EAAE,KAAK,CAAC,MAAM,GACpB,CACE;YAEL,KAAK,CAAC,QAAQ;YAEd,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CACzB,CACP;QACD,oBAAC,gBAAgB,IACf,qBAAqB,EAAE,CAAC,QAAiB,EAAE,EAAE;gBAC3C,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC,GACD,CACa,CAClB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,27 @@
1
+ import React, { useState, useEffect } from "react";
2
+ import EmptyState from "../EmptyState/EmptyState";
3
+ import IconProp from "../../../Types/Icon/IconProp";
4
+ const OfflineIndicator = ({ onOnlineOfflineChange, }) => {
5
+ const [isOnline, setIsOnline] = useState(navigator.onLine);
6
+ useEffect(() => {
7
+ const handleOnline = () => {
8
+ setIsOnline(true);
9
+ onOnlineOfflineChange === null || onOnlineOfflineChange === void 0 ? void 0 : onOnlineOfflineChange(true);
10
+ };
11
+ const handleOffline = () => {
12
+ setIsOnline(false);
13
+ onOnlineOfflineChange === null || onOnlineOfflineChange === void 0 ? void 0 : onOnlineOfflineChange(false);
14
+ };
15
+ window.addEventListener("online", handleOnline);
16
+ window.addEventListener("offline", handleOffline);
17
+ // Call with initial state
18
+ onOnlineOfflineChange === null || onOnlineOfflineChange === void 0 ? void 0 : onOnlineOfflineChange(navigator.onLine);
19
+ return () => {
20
+ window.removeEventListener("online", handleOnline);
21
+ window.removeEventListener("offline", handleOffline);
22
+ };
23
+ }, [onOnlineOfflineChange]);
24
+ return (React.createElement("div", null, !isOnline && (React.createElement(EmptyState, { id: "offline-indicator", title: "You are offline", description: "Please check your internet connection.", icon: IconProp.NoSignal }))));
25
+ };
26
+ export default OfflineIndicator;
27
+ //# sourceMappingURL=OfflineIndicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OfflineIndicator.js","sourceRoot":"","sources":["../../../../../UI/Components/Offline/OfflineIndicator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAgB,MAAM,OAAO,CAAC;AACjE,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,QAAQ,MAAM,8BAA8B,CAAC;AASpD,MAAM,gBAAgB,GAA8B,CAAC,EACnD,qBAAqB,GACC,EAAgB,EAAE;IACxC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAE3D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAiB,GAAG,EAAE;YACtC,WAAW,CAAC,IAAI,CAAC,CAAC;YAClB,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAG,IAAI,CAAC,CAAC;QAChC,CAAC,CAAC;QAEF,MAAM,aAAa,GAAiB,GAAG,EAAE;YACvC,WAAW,CAAC,KAAK,CAAC,CAAC;YACnB,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAG,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAChD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAElD,0BAA0B;QAC1B,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAE1C,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACnD,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACvD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAE5B,OAAO,CACL,iCACG,CAAC,QAAQ,IAAI,CACZ,oBAAC,UAAU,IACT,EAAE,EAAC,mBAAmB,EACtB,KAAK,EAAC,iBAAiB,EACvB,WAAW,EAAC,wCAAwC,EACpD,IAAI,EAAE,QAAQ,CAAC,QAAQ,GACvB,CACH,CACG,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oneuptime/common",
3
- "version": "7.0.4257",
3
+ "version": "7.0.4260",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {