import { useQuote, TradeType } from '0xtrails'
import { useWalletClient, useAccount } from 'wagmi'
import { useState } from 'react'
export const CustomSwapComponent = () => {
const { data: walletClient } = useWalletClient()
const { address } = useAccount()
const [fromToken, setFromToken] = useState('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48') // USDC on Ethereum
const [toToken, setToToken] = useState('0x833589fcd6edb6e08f4c7c32d4f71b54bda02913') // USDC on Base
const [amount, setAmount] = useState('1000000') // 1 USDC
const { quote, swap, isLoadingQuote, quoteError } = useQuote({
walletClient,
fromTokenAddress: fromToken,
fromChainId: 1, // Ethereum
toTokenAddress: toToken,
toChainId: 8453, // Base
swapAmount: amount,
tradeType: TradeType.EXACT_INPUT,
toAddress: address,
slippageTolerance: '0.005', // 0.5%
onStatusUpdate: (states) => {
console.log('Swap progress:', states)
},
})
const handleSwap = async () => {
if (!swap) return
try {
const result = await swap()
console.log('Swap result:', result)
} catch (error) {
console.error('Swap failed:', error)
}
}
if (isLoadingQuote) {
return <div>Loading quote...</div>
}
if (quoteError) {
return <div>Error getting quote: {String(quoteError)}</div>
}
if (!quote) {
return <div>No quote available</div>
}
return (
<div className="swap-component">
<div className="quote-info">
<h3>Swap Quote</h3>
<p>From: {quote.originAmountFormatted} {quote.originToken.symbol} on {quote.originChain.name}</p>
<p>To: {quote.destinationAmountFormatted} {quote.destinationToken.symbol} on {quote.destinationChain.name}</p>
<p>Fee: {quote.totalFeeAmountUsdDisplay}</p>
<p>Estimated time: {quote.completionEstimateSeconds}s</p>
</div>
<button onClick={handleSwap} className="execute-swap-button">
Execute Swap
</button>
</div>
)
}