Skip to content

Commit 0bbb40f

Browse files
authored
Merge pull request #1249 from peanutprotocol/feat/manteca-deposit
[TASK-14942] feat(manteca-deposit): fix manteca deposit
2 parents 9539994 + a641e15 commit 0bbb40f

14 files changed

Lines changed: 245 additions & 286 deletions

File tree

src/app/(mobile-ui)/add-money/[country]/[regional-method]/page.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
'use client'
2-
import MercadoPago from '@/components/AddMoney/components/RegionalMethods/MercadoPago'
2+
import MantecaAddMoney from '@/components/AddMoney/components/MantecaAddMoney'
33
import { CountryData, countryData } from '@/components/AddMoney/consts'
44
import { MantecaSupportedExchanges } from '@/components/AddMoney/consts'
55
import { useParams } from 'next/navigation'
@@ -13,10 +13,9 @@ export default function AddMoneyRegionalMethodPage() {
1313

1414
if (
1515
MantecaSupportedExchanges[countryDetails?.id as keyof typeof MantecaSupportedExchanges] &&
16-
method === 'mercadopago'
16+
method === 'manteca'
1717
) {
18-
return <MercadoPago source="regionalMethod" />
18+
return <MantecaAddMoney source="regionalMethod" />
1919
}
20-
21-
return <div>Unsupported Method</div>
20+
return null
2221
}

src/app/(mobile-ui)/add-money/[country]/bank/page.tsx

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import { updateUserById } from '@/app/actions/users'
2424
import AddMoneyBankDetails from '@/components/AddMoney/components/AddMoneyBankDetails'
2525
import { getCurrencyConfig, getCurrencySymbol, getMinimumAmount } from '@/utils/bridge.utils'
2626
import { OnrampConfirmationModal } from '@/components/AddMoney/components/OnrampConfirmationModal'
27-
import MercadoPago from '@/components/AddMoney/components/RegionalMethods/MercadoPago'
2827
import { InitiateBridgeKYCModal } from '@/components/Kyc/InitiateBridgeKYCModal'
2928

3029
type AddStep = 'inputAmount' | 'kyc' | 'loading' | 'collectUserDetails' | 'showDetails'
@@ -319,11 +318,6 @@ export default function OnrampBankPage() {
319318
return <AddMoneyBankDetails />
320319
}
321320

322-
// Show Mercado Pago flow for Argentina bank transfers
323-
if (step === 'inputAmount' && selectedCountry.id === 'AR') {
324-
return <MercadoPago source="bank" />
325-
}
326-
327321
if (step === 'inputAmount') {
328322
return (
329323
<div className="flex flex-col justify-start space-y-8">

src/components/AddMoney/components/InputAmountStep.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@ const InputAmountStep = ({
4444
<TokenAmountInput
4545
tokenValue={tokenAmount}
4646
setTokenValue={(e) => setTokenAmount(e ?? '')}
47-
walletBalance={undefined}
48-
hideCurrencyToggle
4947
setUsdValue={(e) => setTokenUSDAmount(e)}
5048
currency={
5149
currencyData
@@ -56,7 +54,7 @@ const InputAmountStep = ({
5654
}
5755
: undefined
5856
}
59-
hideBalance={true}
57+
hideBalance
6058
/>
6159
<div className="flex items-center gap-2 text-xs text-grey-1">
6260
<Icon name="info" width={16} height={16} />

src/components/AddMoney/components/RegionalMethods/MercadoPago/index.tsx renamed to src/components/AddMoney/components/MantecaAddMoney.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
11
'use client'
22
import { FC, useEffect, useMemo, useState } from 'react'
3-
import MercadoPagoDepositDetails from './MercadoPagoDepositDetails'
4-
import InputAmountStep from '../../InputAmountStep'
3+
import MantecaDepositShareDetails from '@/components/AddMoney/components/MantecaDepositShareDetails'
4+
import InputAmountStep from '@/components/AddMoney/components/InputAmountStep'
55
import { useParams, useRouter } from 'next/navigation'
66
import { CountryData, countryData } from '@/components/AddMoney/consts'
7-
import { MantecaDepositDetails } from '@/types/manteca.types'
7+
import { MantecaDepositResponseData } from '@/types/manteca.types'
88
import { InitiateMantecaKYCModal } from '@/components/Kyc/InitiateMantecaKYCModal'
99
import { useMantecaKycFlow } from '@/hooks/useMantecaKycFlow'
1010
import { useCurrency } from '@/hooks/useCurrency'
1111
import { useAuth } from '@/context/authContext'
1212
import { useWebSocket } from '@/hooks/useWebSocket'
1313
import { mantecaApi } from '@/services/manteca'
1414

15-
interface MercadoPagoProps {
15+
interface MantecaAddMoneyProps {
1616
source: 'bank' | 'regionalMethod'
1717
}
1818

1919
type stepType = 'inputAmount' | 'depositDetails'
2020

21-
const MercadoPago: FC<MercadoPagoProps> = ({ source }) => {
21+
const MantecaAddMoney: FC<MantecaAddMoneyProps> = ({ source }) => {
2222
const params = useParams()
2323
const router = useRouter()
2424
const [step, setStep] = useState<stepType>('inputAmount')
2525
const [isCreatingDeposit, setIsCreatingDeposit] = useState(false)
2626
const [tokenAmount, setTokenAmount] = useState('')
2727
const [tokenUSDAmount, setTokenUSDAmount] = useState('')
2828
const [error, setError] = useState<string | null>(null)
29-
const [depositDetails, setDepositDetails] = useState<MantecaDepositDetails>()
29+
const [depositDetails, setDepositDetails] = useState<MantecaDepositResponseData>()
3030
const [isKycModalOpen, setIsKycModalOpen] = useState(false)
3131

3232
const selectedCountryPath = params.country as string
@@ -97,7 +97,7 @@ const MercadoPago: FC<MercadoPagoProps> = ({ source }) => {
9797
if (isMantecaKycRequired) {
9898
setIsKycModalOpen(true)
9999
}
100-
}, [isMantecaKycRequired, countryData])
100+
}, [isMantecaKycRequired])
101101

102102
if (!selectedCountry) return null
103103

@@ -131,10 +131,10 @@ const MercadoPago: FC<MercadoPagoProps> = ({ source }) => {
131131
}
132132

133133
if (step === 'depositDetails' && depositDetails) {
134-
return <MercadoPagoDepositDetails source={source} depositDetails={depositDetails} />
134+
return <MantecaDepositShareDetails source={source} depositDetails={depositDetails} />
135135
}
136136

137137
return null
138138
}
139139

140-
export default MercadoPago
140+
export default MantecaAddMoney

src/components/AddMoney/components/MantecaDepositCard.tsx

Lines changed: 0 additions & 62 deletions
This file was deleted.
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
'use client'
2+
3+
import NavHeader from '@/components/Global/NavHeader'
4+
import { useParams, useRouter } from 'next/navigation'
5+
import React, { useMemo } from 'react'
6+
import { countryData } from '@/components/AddMoney/consts'
7+
import ShareButton from '@/components/Global/ShareButton'
8+
import { MantecaDepositResponseData } from '@/types/manteca.types'
9+
import { PaymentInfoRow } from '@/components/Payment/PaymentInfoRow'
10+
import { Icon } from '@/components/Global/Icons/Icon'
11+
import Image from 'next/image'
12+
import { Card } from '@/components/0_Bruddle/Card'
13+
14+
const MantecaDepositShareDetails = ({
15+
depositDetails,
16+
source,
17+
}: {
18+
depositDetails: MantecaDepositResponseData
19+
source: 'bank' | 'regionalMethod'
20+
}) => {
21+
const router = useRouter()
22+
const params = useParams()
23+
const currentCountryName = params.country as string
24+
25+
const currentCountryDetails = useMemo(() => {
26+
// check if we have country params (from dynamic route)
27+
if (currentCountryName) {
28+
return countryData.find(
29+
(country) => country.type === 'country' && country.path === currentCountryName.toLowerCase()
30+
)
31+
}
32+
// Default to Argentina
33+
return countryData.find((c) => c.id === 'AR')
34+
}, [currentCountryName])
35+
36+
const countryCodeForFlag = useMemo(() => {
37+
const countryId = currentCountryDetails?.id || 'AR'
38+
return countryId.toLowerCase()
39+
}, [currentCountryDetails])
40+
41+
const depositAddressLabel = useMemo(() => {
42+
switch (currentCountryDetails?.id) {
43+
case 'AR':
44+
return 'CBU'
45+
case 'BR':
46+
return 'Pix Key'
47+
default:
48+
return 'Deposit Address'
49+
}
50+
}, [currentCountryDetails])
51+
52+
const depositAddress = depositDetails.details.depositAddress
53+
const depositAlias = depositDetails.details.depositAlias
54+
const depositAmount = depositDetails.stages['1'].thresholdAmount
55+
const usdAmount = depositDetails.stages['3'].amount
56+
const currencySymbol = depositDetails.stages['1'].asset
57+
const exchangeRate = depositDetails.details.price
58+
59+
const generateShareText = () => {
60+
const textParts = []
61+
const currencySymbol = currentCountryDetails?.currency || 'ARS'
62+
63+
textParts.push(`Amount: ${currencySymbol} ${depositAmount}`)
64+
65+
if (depositAddress) {
66+
textParts.push(`${depositAddressLabel}: ${depositAddress}`)
67+
}
68+
if (depositAlias) {
69+
textParts.push(`Alias: ${depositAlias}`)
70+
}
71+
72+
return textParts.join('\n')
73+
}
74+
75+
return (
76+
<div className="flex h-full w-full flex-col justify-start gap-8 self-start">
77+
<NavHeader title={'Add Money'} onPrev={() => router.back()} />
78+
<div className="my-auto flex h-full w-full flex-col justify-center space-y-4">
79+
{/* Amount Display Card */}
80+
<Card className="p-4">
81+
<div className="flex items-center space-x-3">
82+
<div className="relative h-12 w-12">
83+
<Image
84+
src={`https://flagcdn.com/w160/${countryCodeForFlag}.png`}
85+
alt={`flag`}
86+
width={48}
87+
height={48}
88+
className="h-12 w-12 rounded-full object-cover"
89+
/>
90+
<div className="absolute -bottom-1 -right-1 flex h-6 w-6 items-center justify-center rounded-full bg-yellow-1">
91+
<Icon name="bank" size={12} />
92+
</div>
93+
</div>
94+
<div>
95+
<p className="flex items-center gap-1 text-center text-sm text-gray-600">
96+
<Icon name="arrow-down" size={10} /> You're adding
97+
</p>
98+
<p className="text-2xl font-bold">
99+
{currencySymbol} {depositAmount}
100+
</p>
101+
<div className="text-lg font-bold">{usdAmount} USD</div>
102+
</div>
103+
</div>
104+
</Card>
105+
<h2 className="font-bold">Account details</h2>
106+
<Card className="space-y-0 rounded-sm px-4">
107+
{depositAddress && <PaymentInfoRow label={depositAddressLabel} value={depositAddress} allowCopy />}
108+
{depositAlias && <PaymentInfoRow label="Alias" value={depositAlias} allowCopy />}
109+
{currentCountryDetails?.id === 'AR' && (
110+
<>
111+
<PaymentInfoRow label="Razón Social" value="Sixalime Sas" />
112+
<PaymentInfoRow label="CUIT" value="30-71678845-3" />
113+
</>
114+
)}
115+
<PaymentInfoRow label="Exchange Rate" value={`1 USD = ${exchangeRate} ${currencySymbol}`} />
116+
<PaymentInfoRow label="Peanut fee" value="Sponsored by Peanut!" hideBottomBorder />
117+
</Card>
118+
</div>
119+
120+
<ShareButton
121+
generateText={async () => generateShareText()}
122+
title="Bank Transfer Details"
123+
variant="purple"
124+
className="w-full"
125+
>
126+
Share Details
127+
</ShareButton>
128+
</div>
129+
)
130+
}
131+
132+
export default MantecaDepositShareDetails

src/components/AddMoney/components/RegionalMethods/MercadoPago/MercadoPagoDepositDetails.tsx

Lines changed: 0 additions & 79 deletions
This file was deleted.

0 commit comments

Comments
 (0)