Changeset View
Changeset View
Standalone View
Standalone View
native/account/registration/cool-or-nerd-mode-selection.react.js
// @flow | // @flow | ||||
import invariant from 'invariant'; | import invariant from 'invariant'; | ||||
import * as React from 'react'; | import * as React from 'react'; | ||||
import { Text } from 'react-native'; | import { Text } from 'react-native'; | ||||
import RegistrationButtonContainer from './registration-button-container.react.js'; | import RegistrationButtonContainer from './registration-button-container.react.js'; | ||||
import RegistrationButton from './registration-button.react.js'; | import RegistrationButton from './registration-button.react.js'; | ||||
import RegistrationContainer from './registration-container.react.js'; | import RegistrationContainer from './registration-container.react.js'; | ||||
import RegistrationContentContainer from './registration-content-container.react.js'; | import RegistrationContentContainer from './registration-content-container.react.js'; | ||||
import { RegistrationContext } from './registration-context.js'; | |||||
import type { RegistrationNavigationProp } from './registration-navigator.react.js'; | import type { RegistrationNavigationProp } from './registration-navigator.react.js'; | ||||
import { | import { | ||||
RegistrationTile, | RegistrationTile, | ||||
RegistrationTileHeader, | RegistrationTileHeader, | ||||
} from './registration-tile.react.js'; | } from './registration-tile.react.js'; | ||||
import type { CoolOrNerdMode } from './registration-types.js'; | import type { CoolOrNerdMode } from './registration-types.js'; | ||||
import { | import { | ||||
type NavigationRoute, | type NavigationRoute, | ||||
KeyserverSelectionRouteName, | KeyserverSelectionRouteName, | ||||
} from '../../navigation/route-names.js'; | } from '../../navigation/route-names.js'; | ||||
import { useStyles } from '../../themes/colors.js'; | import { useStyles } from '../../themes/colors.js'; | ||||
type Props = { | type Props = { | ||||
+navigation: RegistrationNavigationProp<'CoolOrNerdModeSelection'>, | +navigation: RegistrationNavigationProp<'CoolOrNerdModeSelection'>, | ||||
+route: NavigationRoute<'CoolOrNerdModeSelection'>, | +route: NavigationRoute<'CoolOrNerdModeSelection'>, | ||||
}; | }; | ||||
function CoolOrNerdModeSelection(props: Props): React.Node { | function CoolOrNerdModeSelection(props: Props): React.Node { | ||||
const registrationContext = React.useContext(RegistrationContext); | |||||
invariant(registrationContext, 'registrationContext should be set'); | |||||
const { cachedSelections, setCachedSelections } = registrationContext; | |||||
const [currentSelection, setCurrentSelection] = | const [currentSelection, setCurrentSelection] = | ||||
React.useState<?CoolOrNerdMode>(); | React.useState<?CoolOrNerdMode>(cachedSelections.coolOrNerdMode); | ||||
const selectCool = React.useCallback(() => { | const selectCool = React.useCallback(() => { | ||||
setCurrentSelection('cool'); | setCurrentSelection('cool'); | ||||
}, []); | setCachedSelections(oldUserSelections => ({ | ||||
...oldUserSelections, | |||||
coolOrNerdMode: 'cool', | |||||
})); | |||||
}, [setCachedSelections]); | |||||
const selectNerd = React.useCallback(() => { | const selectNerd = React.useCallback(() => { | ||||
setCurrentSelection('nerd'); | setCurrentSelection('nerd'); | ||||
}, []); | setCachedSelections(oldUserSelections => ({ | ||||
...oldUserSelections, | |||||
coolOrNerdMode: 'nerd', | |||||
})); | |||||
}, [setCachedSelections]); | |||||
const { navigate } = props.navigation; | const { navigate } = props.navigation; | ||||
const onSubmit = React.useCallback(() => { | const onSubmit = React.useCallback(() => { | ||||
invariant( | invariant( | ||||
currentSelection, | currentSelection, | ||||
'Button should be disabled if currentSelection is not set', | 'Button should be disabled if currentSelection is not set', | ||||
); | ); | ||||
navigate<'KeyserverSelection'>({ | navigate<'KeyserverSelection'>({ | ||||
▲ Show 20 Lines • Show All 88 Lines • Show Last 20 Lines |