1import * as React from 'react' 2import * as Container from '../../util/container' 3import * as RouteTreeGen from '../../actions/route-tree-gen' 4import * as SettingsGen from '../../actions/settings-gen' 5import * as SettingsConstants from '../../constants/settings' 6import {anyWaiting} from '../../constants/waiting' 7import VerifyPhoneNumber, {Props} from './verify' 8 9type OwnProps = {} 10 11type WatcherProps = Props & { 12 onCleanup: () => void 13 onSuccess: () => void 14 verificationStatus?: 'success' | 'error' 15} 16// Watches for verification to succeed and exits 17export class WatchForSuccess extends React.Component<WatcherProps> { 18 componentDidUpdate() { 19 if (this.props.verificationStatus === 'success') { 20 this.props.onSuccess() 21 } 22 } 23 componentWillUnmount() { 24 this.props.onCleanup() 25 } 26 render() { 27 return ( 28 <VerifyPhoneNumber 29 error={this.props.error} 30 onBack={this.props.onBack} 31 onContinue={this.props.onContinue} 32 onResend={this.props.onResend} 33 phoneNumber={this.props.phoneNumber} 34 resendWaiting={this.props.resendWaiting} 35 verifyWaiting={this.props.verifyWaiting} 36 /> 37 ) 38 } 39} 40 41export default Container.namedConnect( 42 state => ({ 43 error: state.settings.phoneNumbers.verificationState === 'error' ? state.settings.phoneNumbers.error : '', 44 phoneNumber: state.settings.phoneNumbers.pendingVerification, 45 resendWaiting: anyWaiting( 46 state, 47 SettingsConstants.resendVerificationForPhoneWaitingKey, 48 SettingsConstants.addPhoneNumberWaitingKey 49 ), 50 verificationStatus: state.settings.phoneNumbers.verificationState, 51 verifyWaiting: anyWaiting(state, SettingsConstants.verifyPhoneNumberWaitingKey), 52 }), 53 dispatch => ({ 54 _onContinue: (phoneNumber: string, code: string) => 55 dispatch(SettingsGen.createVerifyPhoneNumber({code, phoneNumber})), 56 _onResend: (phoneNumber: string) => 57 dispatch(SettingsGen.createResendVerificationForPhoneNumber({phoneNumber})), 58 onBack: () => dispatch(RouteTreeGen.createNavigateUp()), 59 onCleanup: () => dispatch(SettingsGen.createClearPhoneNumberAdd()), 60 onSuccess: () => dispatch(RouteTreeGen.createClearModals()), 61 }), 62 (stateProps, dispatchProps, _: OwnProps) => ({ 63 error: stateProps.error, 64 onBack: dispatchProps.onBack, 65 onCleanup: dispatchProps.onCleanup, 66 onContinue: (code: string) => dispatchProps._onContinue(stateProps.phoneNumber, code), 67 onResend: () => dispatchProps._onResend(stateProps.phoneNumber), 68 onSuccess: dispatchProps.onSuccess, 69 phoneNumber: stateProps.phoneNumber, 70 resendWaiting: stateProps.resendWaiting, 71 verificationStatus: stateProps.verificationStatus, 72 verifyWaiting: stateProps.verifyWaiting, 73 }), 74 'ConnectedVerifyPhoneNumber' 75)(WatchForSuccess) 76