1
1
import PropTypes from 'prop-types' ;
2
- import React from 'react' ;
2
+ import React , { useEffect } from 'react' ;
3
3
import { connect } from 'react-redux' ;
4
4
import { bindActionCreators } from 'redux' ;
5
5
import { withTranslation } from 'react-i18next' ;
@@ -9,57 +9,51 @@ import { verifyEmailConfirmation } from '../actions';
9
9
import RootPage from '../../../components/RootPage' ;
10
10
import Nav from '../../IDE/components/Header/Nav' ;
11
11
12
- class EmailVerificationView extends React . Component {
13
- static defaultProps = {
14
- emailVerificationTokenState : null
15
- } ;
16
-
17
- componentWillMount ( ) {
18
- const verificationToken = this . verificationToken ( ) ;
19
- if ( verificationToken != null ) {
20
- this . props . verifyEmailConfirmation ( verificationToken ) ;
21
- }
22
- }
12
+ const EmailVerificationView = ( props ) => {
13
+ const { emailVerificationTokenState, location, t } = props ;
23
14
24
- verificationToken = ( ) => {
25
- const { location } = this . props ;
15
+ const verificationTokenFromLocation = ( ) => {
26
16
const searchParams = new URLSearchParams ( location . search ) ;
27
17
return searchParams . get ( 't' ) ;
28
18
} ;
29
19
30
- render ( ) {
31
- let status = null ;
32
- const { emailVerificationTokenState } = this . props ;
33
-
34
- if ( this . verificationToken ( ) == null ) {
35
- status = < p > { this . props . t ( 'EmailVerificationView.InvalidTokenNull' ) } </ p > ;
36
- } else if ( emailVerificationTokenState === 'checking' ) {
37
- status = < p > { this . props . t ( 'EmailVerificationView.Checking' ) } </ p > ;
38
- } else if ( emailVerificationTokenState === 'verified' ) {
39
- status = < p > { this . props . t ( 'EmailVerificationView.Verified' ) } </ p > ;
40
- setTimeout ( ( ) => browserHistory . push ( '/' ) , 1000 ) ;
41
- } else if ( emailVerificationTokenState === 'invalid' ) {
42
- status = < p > { this . props . t ( 'EmailVerificationView.InvalidState' ) } </ p > ;
20
+ useEffect ( ( ) => {
21
+ const verificationToken = verificationTokenFromLocation ( ) ;
22
+ if ( verificationToken != null ) {
23
+ props . verifyEmailConfirmation ( verificationToken ) ;
43
24
}
25
+ } , [ location , props ] ) ;
44
26
45
- return (
46
- < RootPage >
47
- < Nav layout = "dashboard" />
48
- < div className = "form-container" >
49
- < Helmet >
50
- < title > { this . props . t ( 'EmailVerificationView.Title' ) } </ title >
51
- </ Helmet >
52
- < div className = "form-container__content" >
53
- < h2 className = "form-container__title" >
54
- { this . props . t ( 'EmailVerificationView.Verify' ) }
55
- </ h2 >
56
- { status }
57
- </ div >
58
- </ div >
59
- </ RootPage >
60
- ) ;
27
+ let status = null ;
28
+
29
+ if ( verificationTokenFromLocation ( ) == null ) {
30
+ status = < p > { t ( 'EmailVerificationView.InvalidTokenNull' ) } </ p > ;
31
+ } else if ( emailVerificationTokenState === 'checking' ) {
32
+ status = < p > { t ( 'EmailVerificationView.Checking' ) } </ p > ;
33
+ } else if ( emailVerificationTokenState === 'verified' ) {
34
+ status = < p > { t ( 'EmailVerificationView.Verified' ) } </ p > ;
35
+ setTimeout ( ( ) => browserHistory . push ( '/' ) , 1000 ) ;
36
+ } else if ( emailVerificationTokenState === 'invalid' ) {
37
+ status = < p > { t ( 'EmailVerificationView.InvalidState' ) } </ p > ;
61
38
}
62
- }
39
+
40
+ return (
41
+ < RootPage >
42
+ < Nav layout = "dashboard" />
43
+ < div className = "form-container" >
44
+ < Helmet >
45
+ < title > { t ( 'EmailVerificationView.Title' ) } </ title >
46
+ </ Helmet >
47
+ < div className = "form-container__content" >
48
+ < h2 className = "form-container__title" >
49
+ { t ( 'EmailVerificationView.Verify' ) }
50
+ </ h2 >
51
+ { status }
52
+ </ div >
53
+ </ div >
54
+ </ RootPage >
55
+ ) ;
56
+ } ;
63
57
64
58
function mapStateToProps ( state ) {
65
59
return {
@@ -76,6 +70,10 @@ function mapDispatchToProps(dispatch) {
76
70
) ;
77
71
}
78
72
73
+ EmailVerificationView . defaultProps = {
74
+ emailVerificationTokenState : null
75
+ } ;
76
+
79
77
EmailVerificationView . propTypes = {
80
78
emailVerificationTokenState : PropTypes . oneOf ( [
81
79
'checking' ,
0 commit comments