import BigNumber from 'bignumber.js' import React from 'react' import { useTranslation } from 'react-i18next' import { StyleSheet, Text, View } from 'react-native' import AppAnalytics from 'src/analytics/AppAnalytics' import { HomeEvents } from 'src/analytics/Events' import TokenDisplay from 'src/components/TokenDisplay' import Touchable from 'src/components/Touchable' import { navigate } from 'src/navigator/NavigationService' import { Screens } from 'src/navigator/Screens' import Colors from 'src/styles/colors' import { typeScale } from 'src/styles/fonts' import { Spacing } from 'src/styles/styles' import variables from 'src/styles/variables' import TransactionFeedItemImage from 'src/transactions/feed/TransactionFeedItemImage' import { DepositOrWithdraw, TokenTransactionTypeV2 } from 'src/transactions/types' interface DescriptionProps { transaction: DepositOrWithdraw } function Description({ transaction }: DescriptionProps) { const { t } = useTranslation() const txAppName = transaction.appName let title let subtitle switch (transaction.type) { case TokenTransactionTypeV2.Deposit: case TokenTransactionTypeV2.CrossChainDeposit: title = t('transactionFeed.depositTitle') subtitle = t('transactionFeed.depositSubtitle', { context: !txAppName ? 'noTxAppName' : undefined, txAppName, }) break case TokenTransactionTypeV2.Withdraw: title = t('transactionFeed.withdrawTitle') subtitle = t('transactionFeed.withdrawSubtitle', { context: !txAppName ? 'noTxAppName' : undefined, txAppName, }) break } return ( {title} {subtitle} ) } interface AmountDisplayProps { transaction: DepositOrWithdraw isLocal: boolean } function AmountDisplay({ transaction, isLocal }: AmountDisplayProps) { let amountValue let localAmount let tokenId switch (transaction.type) { case TokenTransactionTypeV2.Deposit: case TokenTransactionTypeV2.CrossChainDeposit: amountValue = new BigNumber(-transaction.outAmount.value) localAmount = transaction.outAmount.localAmount tokenId = transaction.outAmount.tokenId break case TokenTransactionTypeV2.Withdraw: amountValue = new BigNumber(transaction.inAmount.value) localAmount = transaction.inAmount.localAmount tokenId = transaction.inAmount.tokenId break } const textStyle = isLocal ? styles.amountSubtitle : [ styles.amountTitle, transaction.type === TokenTransactionTypeV2.Withdraw && { color: Colors.accent }, ] return ( ) } interface AmountProps { transaction: DepositOrWithdraw } function Amount({ transaction }: AmountProps) { return ( ) } interface Props { transaction: DepositOrWithdraw } export default function DepositOrWithdrawFeedItem({ transaction }: Props) { return ( { AppAnalytics.track(HomeEvents.transaction_feed_item_select, { itemType: transaction.type, }) navigate(Screens.TransactionDetailsScreen, { transaction }) }} > ) } const styles = StyleSheet.create({ container: { flexDirection: 'row', paddingVertical: Spacing.Small12, paddingHorizontal: variables.contentPadding, alignItems: 'center', }, contentContainer: { flex: 1, paddingHorizontal: variables.contentPadding, }, title: { ...typeScale.labelMedium, }, subtitle: { ...typeScale.bodySmall, color: Colors.contentSecondary, }, amountContainer: { maxWidth: '50%', }, amountTitle: { ...typeScale.labelMedium, flexWrap: 'wrap', textAlign: 'right', }, amountSubtitle: { ...typeScale.bodySmall, color: Colors.contentSecondary, flexWrap: 'wrap', textAlign: 'right', }, })