1import * as React from 'react'
2import * as WalletsGen from '../../actions/wallets-gen'
3import * as Constants from '../../constants/wallets'
4import * as Container from '../../util/container'
5import * as Types from '../../constants/types/wallets'
6import {anyErrors} from '../../constants/waiting'
7import Onboarding from '.'
8
9type OwnProps = {
10  nextScreen: Types.NextScreenAfterAcceptance
11}
12
13const ConnectedOnboarding = Container.connect(
14  state => {
15    const error = anyErrors(state, Constants.acceptDisclaimerWaitingKey)
16    const {acceptingDisclaimerDelay} = state.wallets
17    return {
18      acceptDisclaimerError: error && error.message ? error.message : '',
19      acceptingDisclaimerDelay: acceptingDisclaimerDelay,
20    }
21  },
22  dispatch => ({
23    onAcceptDisclaimer: () => dispatch(WalletsGen.createAcceptDisclaimer()),
24    onCheckDisclaimer: (nextScreen: Types.NextScreenAfterAcceptance) =>
25      dispatch(WalletsGen.createCheckDisclaimer({nextScreen})),
26    onClose: () => dispatch(WalletsGen.createRejectDisclaimer()),
27  }),
28  (stateProps, dispatchProps, ownProps: OwnProps) => ({
29    acceptDisclaimerError: stateProps.acceptDisclaimerError,
30    acceptingDisclaimerDelay: stateProps.acceptingDisclaimerDelay,
31    nextScreen: ownProps.nextScreen,
32    onAcceptDisclaimer: dispatchProps.onAcceptDisclaimer,
33    onCheckDisclaimer: dispatchProps.onCheckDisclaimer,
34    onClose: dispatchProps.onClose,
35  })
36)(Onboarding)
37
38// A wrapper to harmonize the type of OwnProps between the
39// routed case and <Onboarding /> case.
40type RoutedOnboardingProps = Container.RouteProps<OwnProps>
41export const RoutedOnboarding = (ownProps: RoutedOnboardingProps) => (
42  <ConnectedOnboarding nextScreen={Container.getRouteProps(ownProps, 'nextScreen', 'openWallet')} />
43)
44
45export default ConnectedOnboarding
46