// @flow import * as React from 'react'; import Button from 'component/button'; import UserSignOutButton from 'component/userSignOutButton'; import I18nMessage from 'component/i18nMessage'; import Card from 'component/common/card'; const THIRTY_SECONDS_IN_MS = 30000; type Props = { email: string, isReturningUser: boolean, resendVerificationEmail: string => void, resendingEmail: boolean, checkEmailVerified: () => void, toast: string => void, user: { has_verified_email: boolean, }, }; type State = { wait: boolean, }; class UserEmailVerify extends React.PureComponent<Props, State> { constructor(props: Props) { super(props); this.emailVerifyCheckInterval = null; this.state = { wait: false }; (this: any).handleResendVerificationEmail = this.handleResendVerificationEmail.bind(this); } componentDidMount() { this.emailVerifyCheckInterval = setInterval(() => { this.checkIfVerified(); }, 5000); } componentDidUpdate() { const { user } = this.props; if (this.emailVerifyCheckInterval && user && user.has_verified_email) { clearInterval(this.emailVerifyCheckInterval); } } componentWillUnmount() { if (this.emailVerifyCheckInterval) { clearInterval(this.emailVerifyCheckInterval); } } handleResendVerificationEmail() { const { email, resendVerificationEmail, toast } = this.props; if (!this.state.wait) { resendVerificationEmail(email); toast(__('New email sent.')); this.setState({ wait: true, }); setTimeout(() => this.setState({ wait: false }), THIRTY_SECONDS_IN_MS); } else { toast(__('Please wait a bit longer before requesting again.')); } } checkIfVerified() { const { checkEmailVerified } = this.props; checkEmailVerified(); } emailVerifyCheckInterval: ?IntervalID; render() { const { email, isReturningUser, resendingEmail } = this.props; return ( <div className="main__sign-up"> <Card title={isReturningUser ? __('Check Your email') : __('Confirm your account')} subtitle={ <p> {__('We just sent an email to %email% with a link for you to %verify_text%.', { email, verify_text: isReturningUser ? __('log in') : __('verify your account'), })} </p> } actions={ <React.Fragment> <div className="section__actions"> <Button button="primary" label={__('Resend Link')} onClick={this.handleResendVerificationEmail} disabled={resendingEmail} /> <UserSignOutButton label={__('Start Over')} /> </div> <p className="help--card-actions"> <I18nMessage tokens={{ help_link: <Button button="link" href="mailto:help@lbry.com" label="help@lbry.com" />, chat_link: <Button button="link" href="https://chat.lbry.com" label={__('chat')} />, }} > Email %help_link% or join our %chat_link% if you encounter any trouble verifying. </I18nMessage> </p> </React.Fragment> } /> </div> ); } } export default UserEmailVerify;