import React from 'react' import { useTranslation } from 'react-i18next' import { ScrollView, StyleSheet, Text, View } from 'react-native' import AppAnalytics from 'src/analytics/AppAnalytics' import { HomeEvents } from 'src/analytics/Events' import Card from 'src/components/Card' import Touchable from 'src/components/Touchable' import { ENABLED_QUICK_ACTIONS } from 'src/config' import { FiatExchangeFlow } from 'src/fiatExchanges/types' import { HomeActionName } from 'src/home/types' import QuickActionsAdd from 'src/icons/quick-actions/Add' import QuickActionsReceive from 'src/icons/quick-actions/Receive' import QuickActionsSend from 'src/icons/quick-actions/Send' import QuickActionsWithdraw from 'src/icons/quick-actions/Withdraw' import SwapArrows from 'src/icons/SwapArrows' import { navigate } from 'src/navigator/NavigationService' import { Screens } from 'src/navigator/Screens' import { isAppSwapsEnabledSelector } from 'src/navigator/selectors' import { useSelector } from 'src/redux/hooks' import Colors from 'src/styles/colors' import { typeScale } from 'src/styles/fonts' import { Spacing } from 'src/styles/styles' type Actions = Record< HomeActionName, { title: string; icon: React.ReactNode; onPress: () => void; hidden?: boolean } > function ActionsCarousel() { const { t } = useTranslation() const shouldShowSwapAction = useSelector(isAppSwapsEnabledSelector) const actions: Actions = { [HomeActionName.Send]: { title: t('homeActions.send'), icon: , onPress: () => { navigate(Screens.SendSelectRecipient) }, }, [HomeActionName.Receive]: { title: t('homeActions.receive'), icon: , onPress: () => { navigate(Screens.QRNavigator, { screen: Screens.QRCode, }) }, }, [HomeActionName.Add]: { title: t('homeActions.add'), icon: , onPress: () => { navigate(Screens.FiatExchangeCurrencyBottomSheet, { flow: FiatExchangeFlow.CashIn }) }, }, [HomeActionName.Swap]: { title: t('homeActions.swap'), icon: , onPress: () => { navigate(Screens.SwapScreenWithBack) }, hidden: !shouldShowSwapAction, }, [HomeActionName.Withdraw]: { title: t('homeActions.withdraw'), icon: , onPress: () => { navigate(Screens.WithdrawSpend) }, }, } if (!ENABLED_QUICK_ACTIONS.length) { return null } return ( {ENABLED_QUICK_ACTIONS.map((name) => ({ ...actions[name], name })) .filter(({ hidden }) => !hidden) .map(({ name, title, icon, onPress }) => ( { AppAnalytics.track(HomeEvents.home_action_pressed, { action: name }) onPress() }} style={styles.touchable} borderRadius={8} testID={`HomeActionTouchable-${name}`} > <> {icon} {title} ))} ) } const styles = StyleSheet.create({ viewContainer: { backgroundColor: Colors.backgroundPrimary, }, carouselContainer: { padding: Spacing.Regular16, gap: Spacing.Regular16, }, card: { width: 84, padding: 0, backgroundColor: Colors.buttonQuickActionBackground, borderColor: Colors.buttonQuickActionBorder, borderWidth: 1, borderRadius: 10, }, touchable: { alignItems: 'center', paddingVertical: 16, }, name: { ...typeScale.labelSmall, lineHeight: 17, paddingTop: Spacing.Smallest8, color: Colors.buttonQuickActionContent, }, }) export default ActionsCarousel