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',
},
})