bigbuffet-rw/app/soapbox/features/email_confirmation/index.js

75 lines
1.8 KiB
JavaScript
Raw Normal View History

2022-03-21 11:09:01 -07:00
import PropTypes from 'prop-types';
import * as React from 'react';
import { useIntl } from 'react-intl';
import { useDispatch } from 'react-redux';
import { Redirect } from 'react-router-dom';
import snackbar from 'soapbox/actions/snackbar';
import { Spinner } from 'soapbox/components/ui';
import { confirmChangedEmail } from '../../actions/security';
import { buildErrorMessage } from '../../utils/errors';
const Statuses = {
IDLE: 'IDLE',
SUCCESS: 'SUCCESS',
FAIL: 'FAIL',
};
const token = new URLSearchParams(window.location.search).get('confirmation_token');
const EmailConfirmation = () => {
const intl = useIntl();
const dispatch = useDispatch();
const [status, setStatus] = React.useState(Statuses.IDLE);
React.useEffect(() => {
if (token) {
dispatch(confirmChangedEmail(token))
.then(() => {
setStatus(Statuses.SUCCESS);
dispatch(
snackbar.success(
intl.formatMessage({
id: 'email_confirmation.success',
defaultMessage: 'Your email has been confirmed!',
}),
),
);
})
.catch((error) => {
setStatus(Statuses.FAIL);
if (error.response.data.error) {
const defaultMessage = buildErrorMessage(error.response.data.error);
dispatch(
snackbar.error(
intl.formatMessage({
id: 'email_confirmation.fail',
defaultMessage,
}),
),
);
}
});
}
}, [token]);
if (!token || status === Statuses.SUCCESS || status === Statuses.FAIL) {
return <Redirect to='/' />;
}
return (
<Spinner />
);
};
EmailConfirmation.propTypes = {
history: PropTypes.object,
};
export default EmailConfirmation;