import React from 'react'
import { useTranslation } from 'react-i18next'
import { StyleSheet, Text, View } from 'react-native'
import Celebration from 'src/icons/Celebration'
import EarnCoins from 'src/icons/EarnCoins'
import MagicWand from 'src/icons/MagicWand'
import SwapArrows from 'src/icons/SwapArrows'
import { navigate } from 'src/navigator/NavigationService'
import { Screens } from 'src/navigator/Screens'
import ActivityCard, { Props as ActivityCardProps, MoreComingCard } from 'src/points/ActivityCard'
import { compareAmountAndTitle } from 'src/points/cardSort'
import { BottomSheetParams, PointsActivity } from 'src/points/types'
import Colors from 'src/styles/colors'
import { typeScale } from 'src/styles/fonts'
import { Spacing } from 'src/styles/styles'
interface Props {
pointsActivities: PointsActivity[]
onCardPress: (bottomSheetDetails: BottomSheetParams) => void
}
export default function ActivityCardSection({ pointsActivities, onCardPress }: Props) {
const { t } = useTranslation()
function mapActivityToCardProps(activity: PointsActivity): ActivityCardProps {
switch (activity.activityId) {
case 'create-wallet':
return {
...activity,
title: t('points.activityCards.createWallet.title'),
icon: ,
}
case 'swap':
return {
...activity,
title: t('points.activityCards.swap.title'),
icon: ,
onPress: () =>
onCardPress({
...activity,
title: t('points.activityCards.swap.bottomSheet.title'),
body: t('points.activityCards.swap.bottomSheet.body', {
pointsValue: activity.pointsAmount,
}),
cta: {
text: t('points.activityCards.swap.bottomSheet.cta'),
onPress: () => {
navigate(Screens.SwapScreenWithBack)
},
},
}),
}
case 'create-live-link':
return {
...activity,
title: t('points.activityCards.createLiveLink.title'),
icon: ,
onPress: () =>
onCardPress({
...activity,
title: t('points.activityCards.createLiveLink.bottomSheet.title'),
body: t('points.activityCards.createLiveLink.bottomSheet.body', {
pointsValue: activity.pointsAmount,
}),
cta: {
text: t('points.activityCards.createLiveLink.bottomSheet.cta'),
onPress: () => {
navigate(Screens.JumpstartEnterAmount)
},
},
}),
}
case 'deposit-earn':
return {
...activity,
title: t('points.activityCards.depositEarn.title'),
icon: ,
onPress: () =>
onCardPress({
...activity,
title: t('points.activityCards.depositEarn.bottomSheet.title'),
body: t('points.activityCards.depositEarn.bottomSheet.body', {
pointsValue: activity.pointsAmount,
}),
cta: {
text: t('points.activityCards.depositEarn.bottomSheet.cta'),
onPress: () => {
navigate(Screens.EarnHome)
},
},
}),
}
default:
// To catch any missing cases at compile time
const assertNever: never = activity.activityId
return assertNever
}
}
const { incompleteActivities, completedActivities } = React.useMemo(() => {
const sortedActivities = pointsActivities
.map(mapActivityToCardProps)
.sort(compareAmountAndTitle)
const incompleteActivities = sortedActivities.filter(({ completed }) => !completed)
const completedActivities = sortedActivities.filter(({ completed }) => completed)
return { incompleteActivities, completedActivities }
}, [pointsActivities])
return (
{t('points.activitySection.title')}
{t('points.activitySection.body')}
{incompleteActivities.map(renderActivityCard)}
{completedActivities.map(renderActivityCard)}
)
}
function renderActivityCard(props: ActivityCardProps) {
return
}
const styles = StyleSheet.create({
container: {
padding: Spacing.Regular16,
borderWidth: 1,
borderColor: Colors.borderPrimary,
borderRadius: Spacing.Small12,
},
cardsContainer: {
gap: Spacing.Regular16,
marginTop: Spacing.Thick24,
},
title: {
...typeScale.labelSemiBoldMedium,
},
body: {
...typeScale.bodyXSmall,
color: Colors.contentSecondary,
marginTop: Spacing.Tiny4,
},
})