aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/auth/AuthLayout.jsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/auth/AuthLayout.jsx')
-rw-r--r--src/components/auth/AuthLayout.jsx124
1 files changed, 124 insertions, 0 deletions
diff --git a/src/components/auth/AuthLayout.jsx b/src/components/auth/AuthLayout.jsx
new file mode 100644
index 000000000..8a88cedb1
--- /dev/null
+++ b/src/components/auth/AuthLayout.jsx
@@ -0,0 +1,124 @@
1import { cloneElement, Component } from 'react';
2import PropTypes from 'prop-types';
3import { observer } from 'mobx-react';
4import { TitleBar } from 'electron-react-titlebar/renderer';
5
6import { injectIntl } from 'react-intl';
7import { mdiFlash } from '@mdi/js';
8import Link from '../ui/Link';
9import InfoBar from '../ui/InfoBar';
10
11import { Component as PublishDebugInfo } from '../../features/publishDebugInfo';
12
13import {
14 oneOrManyChildElements,
15 globalError as globalErrorPropType,
16} from '../../prop-types';
17import globalMessages from '../../i18n/globalMessages';
18
19import { isWindows } from '../../environment';
20import AppUpdateInfoBar from '../AppUpdateInfoBar';
21import { GITHUB_FERDIUM_URL } from '../../config';
22import Icon from '../ui/icon';
23
24import { serverName } from '../../api/apiBase';
25
26class AuthLayout extends Component {
27 static propTypes = {
28 children: oneOrManyChildElements.isRequired,
29 error: globalErrorPropType.isRequired,
30 isOnline: PropTypes.bool.isRequired,
31 isAPIHealthy: PropTypes.bool.isRequired,
32 retryHealthCheck: PropTypes.func.isRequired,
33 isHealthCheckLoading: PropTypes.bool.isRequired,
34 isFullScreen: PropTypes.bool.isRequired,
35 installAppUpdate: PropTypes.func.isRequired,
36 appUpdateIsDownloaded: PropTypes.bool.isRequired,
37 };
38
39 constructor() {
40 super();
41
42 this.state = {
43 shouldShowAppUpdateInfoBar: true,
44 };
45 }
46
47 render() {
48 const {
49 children,
50 error,
51 isOnline,
52 isAPIHealthy,
53 retryHealthCheck,
54 isHealthCheckLoading,
55 isFullScreen,
56 installAppUpdate,
57 appUpdateIsDownloaded,
58 } = this.props;
59
60 const { intl } = this.props;
61
62 let serverNameParse = serverName();
63 serverNameParse =
64 serverNameParse === 'Custom' ? 'your Custom Server' : serverNameParse;
65
66 return (
67 <>
68 {isWindows && !isFullScreen && (
69 <TitleBar
70 menu={window['ferdium'].menu.template}
71 icon="assets/images/logo.svg"
72 />
73 )}
74 <div className="auth">
75 {!isOnline && (
76 <InfoBar type="warning">
77 <Icon icon={mdiFlash} />
78 {intl.formatMessage(globalMessages.notConnectedToTheInternet)}
79 </InfoBar>
80 )}
81 {appUpdateIsDownloaded && this.state.shouldShowAppUpdateInfoBar && (
82 <AppUpdateInfoBar
83 onInstallUpdate={installAppUpdate}
84 onHide={() => {
85 this.setState({ shouldShowAppUpdateInfoBar: false });
86 }}
87 />
88 )}
89 {isOnline && !isAPIHealthy && (
90 <InfoBar
91 type="danger"
92 ctaLabel="Try again"
93 ctaLoading={isHealthCheckLoading}
94 sticky
95 onClick={retryHealthCheck}
96 >
97 <Icon icon={mdiFlash} />
98 {intl.formatMessage(globalMessages.APIUnhealthy, {
99 serverNameParse,
100 })}
101 </InfoBar>
102 )}
103 <div className="auth__layout">
104 {/* Inject globalError into children */}
105 {cloneElement(children, {
106 error,
107 })}
108 </div>
109 {/* </div> */}
110 <Link
111 to={`${GITHUB_FERDIUM_URL}/ferdium-app`}
112 className="auth__adlk"
113 target="_blank"
114 >
115 <img src="./assets/images/adlk.svg" alt="" />
116 </Link>
117 </div>
118 <PublishDebugInfo />
119 </>
120 );
121 }
122}
123
124export default injectIntl(observer(AuthLayout));