import React from 'react'
import { useTranslation } from 'react-i18next'
import { StyleSheet, Text, View } from 'react-native'
import RowDivider from 'src/components/RowDivider'
import TokenDisplay from 'src/components/TokenDisplay'
import { useEarnPositionProviderName } from 'src/earn/hooks'
import ArrowRightThick from 'src/icons/ArrowRightThick'
import { NETWORK_NAMES } from 'src/shared/conts'
import Colors from 'src/styles/colors'
import { typeScale } from 'src/styles/fonts'
import { Spacing } from 'src/styles/styles'
import { useTokenInfo } from 'src/tokens/hooks'
import FeeRowItem from 'src/transactions/feed/detailContent/FeeRowItem'
import {
EarnClaimReward,
EarnDeposit,
EarnSwapDeposit,
EarnWithdraw,
FeeType,
TokenTransactionTypeV2,
} from 'src/transactions/types'
interface EarnClaimRewardProps {
transaction: EarnClaimReward
}
export function EarnClaimContent({ transaction }: EarnClaimRewardProps) {
const { t } = useTranslation()
const providerName = useEarnPositionProviderName(transaction.providerId)
const tokenInfo = useTokenInfo(transaction.amount.tokenId)
const tokenSymbol = tokenInfo?.symbol ?? ''
return (
<>
{t('earnFlow.transactionDetails.descriptionLabel')}
{!!providerName && (
{t('earnFlow.transactionDetails.earnClaimSubtitle', { providerName, tokenSymbol })}
)}
{t('earnFlow.transactionDetails.earnClaimDetails')}
>
)
}
interface EarnDepositProps {
transaction: EarnDeposit | EarnSwapDeposit
}
export function EarnDepositContent({ transaction }: EarnDepositProps) {
const { t } = useTranslation()
const providerName = useEarnPositionProviderName(
transaction.type === TokenTransactionTypeV2.EarnSwapDeposit
? transaction.deposit.providerId
: transaction.providerId
)
const depositAmount =
transaction.type === TokenTransactionTypeV2.EarnDeposit
? transaction.outAmount
: transaction.deposit.outAmount
const depositTokenInfo = useTokenInfo(depositAmount.tokenId)
const depositTokenSymbol = depositTokenInfo?.symbol ?? ''
return (
<>
{t('earnFlow.transactionDetails.descriptionLabel')}
{!!providerName && (
{t('earnFlow.transactionDetails.earnDepositSubtitle', {
providerName,
tokenSymbol: depositTokenSymbol,
})}
)}
{t('earnFlow.transactionDetails.earnDepositDetails')}
{transaction.type === TokenTransactionTypeV2.EarnSwapDeposit && (
{t('earnFlow.transactionDetails.swap')}
)}
{transaction.type === TokenTransactionTypeV2.EarnSwapDeposit && (
{t('earnFlow.transactionDetails.network')}
{NETWORK_NAMES[transaction.networkId]}
)}
{t('earnFlow.transactionDetails.fees')}
{transaction.type === TokenTransactionTypeV2.EarnSwapDeposit && (
)}
>
)
}
interface EarnWithdrawProps {
transaction: EarnWithdraw
}
export function EarnWithdrawContent({ transaction }: EarnWithdrawProps) {
const { t } = useTranslation()
const providerName = useEarnPositionProviderName(transaction.providerId)
const tokenInfo = useTokenInfo(transaction.inAmount.tokenId)
const tokenSymbol = tokenInfo?.symbol ?? ''
return (
<>
{t('earnFlow.transactionDetails.descriptionLabel')}
{!!providerName && (
{t('earnFlow.transactionDetails.earnWithdrawSubtitle', { providerName, tokenSymbol })}
)}
{t('earnFlow.transactionDetails.earnWithdrawDetails')}
>
)
}
const styles = StyleSheet.create({
detailsTitle: {
...typeScale.labelSmall,
},
detailsSubtitle: {
...typeScale.bodyMedium,
},
row: {
flex: 1,
flexDirection: 'row',
justifyContent: 'space-between',
flexWrap: 'wrap',
},
bodyText: {
...typeScale.bodyMedium,
},
bodyTextValue: {
...typeScale.bodyMedium,
textAlign: 'right',
},
amountTitle: {
...typeScale.labelSemiBoldMedium,
},
amountSubtitle: {
...typeScale.bodySmall,
color: Colors.contentSecondary,
marginLeft: 'auto',
},
amountContainer: {
gap: Spacing.Regular16,
},
feeContainer: {
marginTop: Spacing.Smallest8,
gap: Spacing.Regular16,
},
swapValueContainer: {
flexDirection: 'row',
justifyContent: 'flex-end',
gap: Spacing.Tiny4,
alignItems: 'center',
},
})