1
1
import React from 'react' ;
2
2
import clsx from 'clsx' ;
3
- import Translate from '@docusaurus/Translate' ;
3
+ import Translate , { translate } from '@docusaurus/Translate' ;
4
4
import useDocusaurusContext from '@docusaurus/useDocusaurusContext' ;
5
5
import { Button } from '@deriv-com/quill-ui' ;
6
6
import {
@@ -14,13 +14,21 @@ import { IUserNavbarItemProps } from './item.types';
14
14
import styles from './UserNavbarItem.module.scss' ;
15
15
import Cookies from 'js-cookie' ;
16
16
import { useHandleLogin } from '@site/src/hooks/useHandleLogin' ;
17
+ import useAuthContext from '@site/src/hooks/useAuthContext' ;
18
+ import CustomTooltip from '../CustomTooltip' ;
17
19
18
20
interface IActionProps {
19
21
handleClick : ( ) => void ;
20
22
isDesktop : boolean ;
23
+ siteActive : boolean ;
21
24
}
22
25
23
- const DashboardActions : React . FC < IActionProps > = ( { handleClick, isDesktop } ) => {
26
+ const siteDownErrMsg = translate ( {
27
+ message :
28
+ 'The server is currently unable to handle the request due to a temporary overload or maintenance of the server. Please try again later.' ,
29
+ } ) ;
30
+
31
+ const DashboardActions : React . FC < IActionProps > = ( { handleClick, isDesktop, siteActive } ) => {
24
32
const {
25
33
i18n : { currentLocale } ,
26
34
} = useDocusaurusContext ( ) ;
@@ -31,72 +39,105 @@ const DashboardActions: React.FC<IActionProps> = ({ handleClick, isDesktop }) =>
31
39
location . assign ( pathInfo ) ;
32
40
} ;
33
41
34
- return (
35
- < React . Fragment >
36
- < Button
37
- onClick = { onClickDashboard }
38
- type = 'button'
39
- className = { styles . dashboardButton }
40
- variant = 'tertiary'
41
- color = 'black'
42
- icon = { < LabelPairedGridLgRegularIcon /> }
43
- data-testid = 'da_login'
44
- >
45
- < Translate > Dashboard</ Translate >
46
- </ Button >
47
- { isDesktop && (
42
+ const renderDashboardBtn = ( ) => {
43
+ return (
44
+ < React . Fragment >
48
45
< Button
49
- onClick = { handleClick }
46
+ onClick = { onClickDashboard }
50
47
type = 'button'
48
+ className = { styles . dashboardButton }
51
49
variant = 'tertiary'
52
50
color = 'black'
53
- className = { styles . logoutButton }
54
- icon = { < StandaloneRightFromBracketBoldIcon /> }
55
- data-testid = 'da_logout'
51
+ icon = { < LabelPairedGridLgRegularIcon /> }
52
+ data-testid = 'da_login'
53
+ disabled = { ! siteActive }
56
54
>
57
- < Translate > Log out </ Translate >
55
+ < Translate > Dashboard </ Translate >
58
56
</ Button >
57
+ { isDesktop && (
58
+ < Button
59
+ onClick = { handleClick }
60
+ type = 'button'
61
+ variant = 'tertiary'
62
+ color = 'black'
63
+ className = { styles . logoutButton }
64
+ icon = { < StandaloneRightFromBracketBoldIcon /> }
65
+ data-testid = 'da_logout'
66
+ disabled = { ! siteActive }
67
+ >
68
+ < Translate > Log out</ Translate >
69
+ </ Button >
70
+ ) }
71
+ </ React . Fragment >
72
+ ) ;
73
+ } ;
74
+
75
+ return (
76
+ < React . Fragment >
77
+ { siteActive ? (
78
+ renderDashboardBtn ( )
79
+ ) : (
80
+ < CustomTooltip text = { siteDownErrMsg } >
81
+ < span > { renderDashboardBtn ( ) } </ span >
82
+ </ CustomTooltip >
59
83
) }
60
84
</ React . Fragment >
61
85
) ;
62
86
} ;
63
87
64
- const SignedInActions : React . FC < IActionProps > = ( { handleClick, isDesktop } ) => {
88
+ const SignedInActions : React . FC < IActionProps > = ( { handleClick, isDesktop, siteActive } ) => {
65
89
const signedInButtonClasses = clsx ( 'navbar__item' , styles . UserNavbarItem , styles . SignedInButton ) ;
66
90
67
91
const { handleLogin } = useHandleLogin ( {
68
92
onClickLogin : handleClick ,
69
93
} ) ;
70
94
71
- return (
72
- < nav className = 'right-navigation' >
73
- < Button
74
- variant = 'secondary'
75
- color = 'black'
76
- onClick = { handleLogin }
77
- className = { signedInButtonClasses }
78
- data-testid = 'sa_login'
79
- >
80
- < Translate > Log in</ Translate >
81
- </ Button >
82
- { isDesktop && (
95
+ const renderSignupBtn = ( ) => {
96
+ return (
97
+ < nav className = 'right-navigation' >
83
98
< Button
84
- variant = 'primary'
85
- onClick = { ( ) => location . assign ( 'https://deriv.com/signup/' ) }
99
+ variant = 'secondary'
100
+ color = 'black'
101
+ onClick = { handleLogin }
86
102
className = { signedInButtonClasses }
87
- data-testid = 'sa_signup'
103
+ data-testid = 'sa_login'
104
+ disabled = { ! siteActive }
88
105
>
89
- < Translate > Sign up </ Translate >
106
+ < Translate > Log in </ Translate >
90
107
</ Button >
108
+ { isDesktop && (
109
+ < Button
110
+ variant = 'primary'
111
+ onClick = { ( ) => location . assign ( 'https://deriv.com/signup/' ) }
112
+ className = { signedInButtonClasses }
113
+ data-testid = 'sa_signup'
114
+ disabled = { ! siteActive }
115
+ >
116
+ < Translate > Sign up</ Translate >
117
+ </ Button >
118
+ ) }
119
+ </ nav >
120
+ ) ;
121
+ } ;
122
+
123
+ return (
124
+ < React . Fragment >
125
+ { siteActive ? (
126
+ renderSignupBtn ( )
127
+ ) : (
128
+ < CustomTooltip text = { siteDownErrMsg } >
129
+ < span > { renderSignupBtn ( ) } </ span >
130
+ </ CustomTooltip >
91
131
) }
92
- </ nav >
132
+ </ React . Fragment >
93
133
) ;
94
134
} ;
95
135
96
136
const UserNavbarDesktopItem = ( { authUrl, is_logged_in } : IUserNavbarItemProps ) => {
97
137
const { deviceType } = useDeviceType ( ) ;
98
138
const isDesktop = deviceType === 'desktop' ;
99
-
139
+ const { siteActive } = useAuthContext ( ) ;
140
+
100
141
const handleClick = ( ) => {
101
142
location . assign ( authUrl ) ;
102
143
} ;
@@ -130,9 +171,9 @@ const UserNavbarDesktopItem = ({ authUrl, is_logged_in }: IUserNavbarItemProps)
130
171
} , [ isOAuth2Enabled , loggedState , logout , handleLogin , isLoginAccountsPopulated ] ) ;
131
172
132
173
return is_logged_in ? (
133
- < DashboardActions handleClick = { logout } isDesktop = { isDesktop } />
174
+ < DashboardActions handleClick = { logout } isDesktop = { isDesktop } siteActive = { siteActive } />
134
175
) : (
135
- < SignedInActions handleClick = { handleClick } isDesktop = { isDesktop } />
176
+ < SignedInActions handleClick = { handleClick } isDesktop = { isDesktop } siteActive = { siteActive } />
136
177
) ;
137
178
} ;
138
179
0 commit comments