@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.
- package/UI/Components/MasterPage/MasterPage.tsx +24 -12
- package/UI/Components/Offline/OfflineIndicator.tsx +54 -0
- package/build/dist/UI/Components/MasterPage/MasterPage.js +7 -2
- package/build/dist/UI/Components/MasterPage/MasterPage.js.map +1 -1
- package/build/dist/UI/Components/Offline/OfflineIndicator.js +27 -0
- package/build/dist/UI/Components/Offline/OfflineIndicator.js.map +1 -0
- package/package.json +1 -1
|
@@ -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
|
-
|
|
41
|
-
<div className={props.
|
|
42
|
-
<
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
56
|
+
{props.children}
|
|
51
57
|
|
|
52
|
-
|
|
53
|
-
|
|
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;
|
|
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"}
|