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