Skip to content

Commit 72f3afc

Browse files
authored
Merge pull request #2736 from aryanas159/issue-#2652
fix: infinite api requests when the verification token is invalid
2 parents 6bb0bde + b90d5db commit 72f3afc

File tree

1 file changed

+19
-55
lines changed

1 file changed

+19
-55
lines changed
Lines changed: 19 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,31 @@
1-
import PropTypes from 'prop-types';
2-
import React, { useEffect } from 'react';
3-
import { connect } from 'react-redux';
4-
import { bindActionCreators } from 'redux';
5-
import { withTranslation } from 'react-i18next';
1+
import React, { useEffect, useMemo } from 'react';
62
import { Helmet } from 'react-helmet';
7-
import browserHistory from '../../../browserHistory';
3+
import { useLocation, useHistory } from 'react-router-dom';
4+
import { useSelector, useDispatch } from 'react-redux';
5+
import { useTranslation } from 'react-i18next';
86
import { verifyEmailConfirmation } from '../actions';
97
import RootPage from '../../../components/RootPage';
108
import Nav from '../../IDE/components/Header/Nav';
119

12-
const EmailVerificationView = (props) => {
13-
const { emailVerificationTokenState, location, t } = props;
14-
15-
const verificationTokenFromLocation = () => {
10+
const EmailVerificationView = () => {
11+
const { t } = useTranslation();
12+
const location = useLocation();
13+
const dispatch = useDispatch();
14+
const browserHistory = useHistory();
15+
const emailVerificationTokenState = useSelector(
16+
(state) => state.user.emailVerificationTokenState
17+
);
18+
const verificationToken = useMemo(() => {
1619
const searchParams = new URLSearchParams(location.search);
1720
return searchParams.get('t');
18-
};
19-
21+
}, [location.search]);
2022
useEffect(() => {
21-
const verificationToken = verificationTokenFromLocation();
22-
if (verificationToken != null) {
23-
props.verifyEmailConfirmation(verificationToken);
23+
if (verificationToken) {
24+
dispatch(verifyEmailConfirmation(verificationToken));
2425
}
25-
}, [location, props]);
26-
26+
}, [dispatch, verificationToken]);
2727
let status = null;
28-
29-
if (verificationTokenFromLocation() == null) {
28+
if (!verificationToken) {
3029
status = <p>{t('EmailVerificationView.InvalidTokenNull')}</p>;
3130
} else if (emailVerificationTokenState === 'checking') {
3231
status = <p>{t('EmailVerificationView.Checking')}</p>;
@@ -54,39 +53,4 @@ const EmailVerificationView = (props) => {
5453
</RootPage>
5554
);
5655
};
57-
58-
function mapStateToProps(state) {
59-
return {
60-
emailVerificationTokenState: state.user.emailVerificationTokenState
61-
};
62-
}
63-
64-
function mapDispatchToProps(dispatch) {
65-
return bindActionCreators(
66-
{
67-
verifyEmailConfirmation
68-
},
69-
dispatch
70-
);
71-
}
72-
73-
EmailVerificationView.defaultProps = {
74-
emailVerificationTokenState: null
75-
};
76-
77-
EmailVerificationView.propTypes = {
78-
emailVerificationTokenState: PropTypes.oneOf([
79-
'checking',
80-
'verified',
81-
'invalid'
82-
]),
83-
verifyEmailConfirmation: PropTypes.func.isRequired,
84-
t: PropTypes.func.isRequired,
85-
location: PropTypes.shape({
86-
search: PropTypes.string.isRequired
87-
}).isRequired
88-
};
89-
90-
export default withTranslation()(
91-
connect(mapStateToProps, mapDispatchToProps)(EmailVerificationView)
92-
);
56+
export default EmailVerificationView;

0 commit comments

Comments
 (0)