1import * as React from 'react' 2import * as Container from '../../util/container' 3import * as SettingsGen from '../../actions/settings-gen' 4import * as SettingsConstants from '../../constants/settings' 5import * as SignupGen from '../../actions/signup-gen' 6import * as SignupConstants from '../../constants/signup' 7import * as RouteTreeGen from '../../actions/route-tree-gen' 8import * as Platform from '../../constants/platform' 9import {anyWaiting} from '../../constants/waiting' 10import EnterEmail, {Props} from '.' 11 12type OwnProps = {} 13 14type WatcherProps = Props & { 15 addedEmail?: string 16 onSuccess: (email: string) => void 17} 18const WatchForSuccess = (props: WatcherProps) => { 19 const [addEmailInProgress, setAddEmailInProgress] = React.useState('') 20 React.useEffect(() => { 21 if (props.addedEmail === addEmailInProgress) { 22 props.onSuccess(addEmailInProgress) 23 } 24 }, [props.addedEmail, addEmailInProgress, props]) 25 26 const onCreate = (email: string, searchable: boolean) => { 27 props.onCreate(email, searchable) 28 setAddEmailInProgress(email) 29 } 30 31 return ( 32 <EnterEmail 33 error={props.error} 34 initialEmail={props.initialEmail} 35 onCreate={onCreate} 36 onSkip={props.onSkip} 37 waiting={props.waiting} 38 /> 39 ) 40} 41 42const ConnectedEnterEmail = Container.connect( 43 (state: Container.TypedState) => ({ 44 _showPushPrompt: Platform.isMobile && !state.push.hasPermissions && state.push.showPushPrompt, 45 addedEmail: state.settings.email.addedEmail, 46 error: state.settings.email.error || '', 47 initialEmail: state.signup.email, 48 waiting: anyWaiting(state, SettingsConstants.addEmailWaitingKey), 49 }), 50 (dispatch: Container.TypedDispatch) => ({ 51 _navClearModals: () => dispatch(RouteTreeGen.createClearModals()), 52 _navToPushPrompt: () => 53 dispatch( 54 RouteTreeGen.createNavigateAppend({ 55 path: ['settingsPushPrompt'], 56 replace: true, 57 }) 58 ), 59 _onSkip: () => dispatch(SignupGen.createSetJustSignedUpEmail({email: SignupConstants.noEmail})), 60 _onSuccess: (email: string) => dispatch(SignupGen.createSetJustSignedUpEmail({email})), 61 onCreate: (email: string, searchable: boolean) => { 62 dispatch(SettingsGen.createAddEmail({email, searchable})) 63 }, 64 }), 65 (s, d, o: OwnProps) => ({ 66 addedEmail: s.addedEmail, 67 error: s.error, 68 initialEmail: s.initialEmail, 69 onCreate: d.onCreate, 70 onSkip: () => { 71 d._onSkip() 72 s._showPushPrompt ? d._navToPushPrompt() : d._navClearModals() 73 }, 74 onSuccess: (email: string) => { 75 d._onSuccess(email) 76 s._showPushPrompt ? d._navToPushPrompt() : d._navClearModals() 77 }, 78 waiting: s.waiting, 79 ...o, 80 }) 81)(WatchForSuccess) 82 83export default ConnectedEnterEmail 84