import React, { useMemo } from 'react'
import { useTranslation } from 'react-i18next'
import { ScrollView, StyleSheet, Text, View } from 'react-native'
import { SafeAreaView } from 'react-native-safe-area-context'
import AppAnalytics from 'src/analytics/AppAnalytics'
import { OnboardingEvents } from 'src/analytics/Events'
import Card from 'src/components/Card'
import DevSkipButton from 'src/components/DevSkipButton'
import TextButton from 'src/components/TextButton'
import Touchable from 'src/components/Touchable'
import { FiatExchangeFlow } from 'src/fiatExchanges/types'
import EarnCoins from 'src/icons/EarnCoins'
import PlusIcon from 'src/icons/PlusIcon'
import ProfilePlus from 'src/icons/ProfilePlus'
import LogoHeart from 'src/images/LogoHeart'
import { nuxNavigationOptionsNoBackButton } from 'src/navigator/Headers'
import {
navigate,
navigateHome,
navigateHomeAndThenToScreen,
} from 'src/navigator/NavigationService'
import { Screens } from 'src/navigator/Screens'
import { AdventureCardName } from 'src/onboarding/types'
import { useSelector } from 'src/redux/hooks'
import colors from 'src/styles/colors'
import { typeScale } from 'src/styles/fonts'
import { Shadow, Spacing } from 'src/styles/styles'
import { shuffle } from 'src/utils/random'
import { walletAddressSelector } from 'src/web3/selectors'
const DEFAULT_SEED = '0x0'
const AdventureCard = ({
onPress,
text,
index,
icon,
}: {
onPress: () => void
text: string
index: number
icon: React.ReactNode
}) => (
<>
{icon}
{text}
>
)
function ChooseYourAdventure() {
const { t } = useTranslation()
const address = useSelector(walletAddressSelector)
const cardDetails = [
{
text: t('chooseYourAdventure.options.add'),
goToNextScreen: () => {
// navigate home so that closing the fiat exchange currency bottom sheet
// takes the user back to Home screen. Can't use
// navigateHomeAndThenToScreen here because it doesn't work for bottom
// sheets.
navigateHome()
navigate(Screens.FiatExchangeCurrencyBottomSheet, { flow: FiatExchangeFlow.CashIn })
},
icon: ,
name: AdventureCardName.Add,
},
{
text: t('chooseYourAdventure.options.earn'),
goToNextScreen: () => {
navigateHomeAndThenToScreen(Screens.EarnInfoScreen)
},
icon: ,
name: AdventureCardName.Earn,
},
{
text: t('chooseYourAdventure.options.profile'),
goToNextScreen: () => {
navigateHomeAndThenToScreen(Screens.Profile)
},
icon: ,
name: AdventureCardName.Profile,
},
{
text: t('chooseYourAdventure.options.learnPoints'),
goToNextScreen: () => {
navigateHomeAndThenToScreen(Screens.PointsIntro)
},
icon: ,
name: AdventureCardName.LearnPoints,
},
]
const shuffledCardDetails = useMemo(() => {
return shuffle(cardDetails, address ?? DEFAULT_SEED)
}, [address])
const cardOrder: AdventureCardName[] = useMemo(() => {
return shuffledCardDetails.map((details) => details.name)
}, [shuffledCardDetails])
const getAdventureCards = () => {
return shuffledCardDetails.map(({ text, goToNextScreen, icon, name }, index) => {
const onPress = () => {
AppAnalytics.track(OnboardingEvents.cya_button_press, {
position: index + 1,
cardName: name,
cardOrder,
})
goToNextScreen()
}
return
})
}
const onNavigateHome = () => {
AppAnalytics.track(OnboardingEvents.cya_later, {
cardOrder,
})
navigateHome()
}
return (
{t('chooseYourAdventure.header')}
{t('chooseYourAdventure.subtitle')}
{getAdventureCards()}
{t('chooseYourAdventure.later')}
)
}
ChooseYourAdventure.navOptions = nuxNavigationOptionsNoBackButton
export default ChooseYourAdventure
const styles = StyleSheet.create({
container: {
flexGrow: 1,
justifyContent: 'space-between',
},
scrollContainer: {
padding: 24,
paddingTop: 40,
},
subtitle: {
textAlign: 'center',
marginTop: 8,
marginBottom: 8,
...typeScale.bodyMedium,
},
header: {
textAlign: 'center',
marginTop: 50,
...typeScale.titleMedium,
},
card: {
marginTop: Spacing.Regular16,
backgroundColor: colors.backgroundSecondary,
flex: 1,
padding: 0,
},
pressableCard: {
flexDirection: 'row',
alignItems: 'center',
flex: 1,
padding: Spacing.Regular16,
},
iconContainer: {
width: 32,
height: 32,
borderRadius: 100,
marginRight: Spacing.Regular16,
justifyContent: 'center',
alignItems: 'center',
},
bottomButtonContainer: {
padding: Spacing.Thick24,
alignItems: 'center',
},
skip: {
color: colors.contentPrimary,
},
cardText: {
...typeScale.bodySmall,
flex: 1,
flexWrap: 'wrap',
},
})