0xtrails
Version:
SDK for Trails
602 lines (591 loc) • 22.4 kB
text/typescript
import { useCallback } from "react"
import { parseUnits } from "viem"
import { getNormalizedQuoteObject } from "../../prepareSend.js"
import type { PrepareSendQuote } from "../../prepareSend.js"
import type { TransactionState } from "../../transactions.js"
type Screen =
| "connect"
| "tokens"
| "send-form"
| "fund-form"
| "fund-methods"
| "earn"
| "earn-pools"
| "swap"
| "receive"
| "wallet-confirmation"
| "qr-code-deposit"
| "pending"
| "receipt"
| "mesh-connect"
| "wallet-connect"
| "wallet-list"
| "wallet-connection-pending"
| "account-history"
| "chain-list"
interface UseDebugScreensProps {
setCurrentScreen: (screen: Screen) => void
setSelectedToken: (token: any) => void
setTransactionStates: (states: TransactionState[]) => void
setPrepareSendQuote: (quote: PrepareSendQuote | null) => void
setShowWalletConfirmRetry: (show: boolean) => void
setCurrentMode: (mode: any) => void
setSelectedWalletId: (id: string | null) => void
setShowWalletConnectionRetry: (show: boolean) => void
setError: (error: string | null) => void
setIsConnecting: (connecting: boolean) => void
setMeshConnectProps: (props: any) => void
isConnected: boolean
}
export const useDebugScreens = ({
setCurrentScreen,
setSelectedToken,
setTransactionStates,
setPrepareSendQuote,
setShowWalletConfirmRetry,
setCurrentMode,
setSelectedWalletId,
setShowWalletConnectionRetry,
setError,
isConnected,
}: UseDebugScreensProps) => {
const handleDebugScreenSelect = useCallback(
async (screen: string) => {
// Reset necessary state based on the target screen
setError(null)
const dummySelectedToken = {
id: 1,
name: "USD Coin",
symbol: "USDC",
balance: parseUnits("1.99", 6)?.toString(),
imageUrl:
"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png",
chainId: 1,
contractAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
contractInfo: {
decimals: 6,
symbol: "USDC",
name: "USD Coin",
},
}
const dummyQuote = await getNormalizedQuoteObject({
originDepositAddress: "0x5A0fb747531bC369367CB031472b89ea4D5c6Df7",
destinationDepositAddress: "0x5A0fb747531bC369367CB031472b89ea4D5c6Df7",
originAmount: parseUnits("1", 6)?.toString(),
originTokenAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
originChainId: 1,
originTokenPriceUsd: "1",
destinationChainId: 137,
destinationTokenAddress: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
destinationAmount: parseUnits("0.97", 6)?.toString(),
destinationTokenPriceUsd: "1",
})
switch (screen) {
case "connect":
setSelectedToken(null)
setTransactionStates([])
setCurrentScreen("connect")
break
case "tokens":
if (isConnected) {
setSelectedToken(null)
setTransactionStates([])
setCurrentScreen("tokens")
}
break
case "chain-list":
setSelectedToken(null)
setTransactionStates([])
setCurrentScreen("chain-list")
break
case "send-form":
// Set dummy USDC token for debug mode and set mode to pay
setCurrentMode("pay")
setSelectedToken(dummySelectedToken)
setTransactionStates([])
setCurrentScreen("send-form")
break
case "fund-form":
// Set dummy USDC token for debug mode and set mode to fund
setCurrentMode("fund")
setSelectedToken(dummySelectedToken)
setTransactionStates([])
setCurrentScreen("fund-form")
break
case "wallet-confirmation":
// Set dummy USDC token for debug mode
setSelectedToken(dummySelectedToken)
setPrepareSendQuote(dummyQuote)
setTransactionStates([])
setShowWalletConfirmRetry(false)
setCurrentScreen("wallet-confirmation")
break
case "wallet-confirmation-retry":
// Set dummy USDC token for debug mode
setSelectedToken(dummySelectedToken)
setPrepareSendQuote(dummyQuote)
setTransactionStates([])
setShowWalletConfirmRetry(true)
setCurrentScreen("wallet-confirmation")
break
case "pending-1-item-0-confirmed":
// Set dummy transaction states for debug mode - showing all steps
setTransactionStates([
{
transactionHash:
"0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
explorerUrl:
"https://polygonscan.com/tx/0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
chainId: 137,
state: "pending",
label: "Swap",
},
])
setPrepareSendQuote(dummyQuote)
setCurrentScreen("pending")
break
case "pending-1-item-1-confirmed":
// Set dummy transaction states for debug mode - showing all steps
setTransactionStates([
{
transactionHash:
"0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
explorerUrl:
"https://polygonscan.com/tx/0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
chainId: 137,
state: "confirmed",
label: "Swap",
},
])
setPrepareSendQuote(dummyQuote)
setCurrentScreen("pending")
break
case "pending-2-item-0-confirmed":
// Set dummy transaction states for debug mode - showing all steps
setTransactionStates([
{
transactionHash:
"0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
explorerUrl:
"https://polygonscan.com/tx/0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
chainId: 137,
state: "pending",
label: "Transfer",
},
{
transactionHash:
"0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
explorerUrl:
"https://polygonscan.com/tx/0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
chainId: 137,
state: "pending",
label: "Swap",
},
])
setPrepareSendQuote(dummyQuote)
setCurrentScreen("pending")
break
case "pending-2-item-1-confirmed":
// Set dummy transaction states for debug mode - showing all steps
setTransactionStates([
{
transactionHash:
"0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
explorerUrl:
"https://polygonscan.com/tx/0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
chainId: 137,
state: "confirmed",
label: "Transfer",
},
{
transactionHash:
"0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
explorerUrl:
"https://polygonscan.com/tx/0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
chainId: 137,
state: "pending",
label: "Swap",
},
])
setPrepareSendQuote(dummyQuote)
setCurrentScreen("pending")
break
case "pending-2-item-2-confirmed":
// Set dummy transaction states for debug mode - showing all steps
setTransactionStates([
{
transactionHash:
"0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
explorerUrl:
"https://polygonscan.com/tx/0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
chainId: 137,
state: "confirmed",
label: "Transfer",
},
{
transactionHash:
"0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
explorerUrl:
"https://polygonscan.com/tx/0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
chainId: 137,
state: "confirmed",
label: "Swap",
},
])
setPrepareSendQuote(dummyQuote)
setCurrentScreen("pending")
break
case "pending-3-item-0-confirmed":
// Set dummy transaction states for debug mode - showing all steps
setTransactionStates([
{
transactionHash:
"0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
explorerUrl:
"https://polygonscan.com/tx/0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
chainId: 137,
state: "pending",
label: "Transfer",
},
{
transactionHash:
"0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
explorerUrl:
"https://polygonscan.com/tx/0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
chainId: 137,
state: "pending",
label: "Swap & Bridge",
},
{
transactionHash:
"0xf3b172111d2e64e9d4940d91097f04a0bbd0acc816e2cf49eec664c6f8fcaf76",
explorerUrl:
"https://arbiscan.io/tx/0xf3b172111d2e64e9d4940d91097f04a0bbd0acc816e2cf49eec664c6f8fcaf76",
chainId: 42161,
state: "pending",
label: "Execute",
},
])
setPrepareSendQuote(dummyQuote)
setCurrentScreen("pending")
break
case "pending-3-item-1-confirmed":
// Set dummy transaction states for debug mode - showing all steps
setTransactionStates([
{
transactionHash:
"0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
explorerUrl:
"https://polygonscan.com/tx/0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
chainId: 137,
state: "confirmed",
label: "Transfer",
},
{
transactionHash:
"0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
explorerUrl:
"https://polygonscan.com/tx/0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
chainId: 137,
state: "pending",
label: "Swap & Bridge",
},
{
transactionHash:
"0xf3b172111d2e64e9d4940d91097f04a0bbd0acc816e2cf49eec664c6f8fcaf76",
explorerUrl:
"https://arbiscan.io/tx/0xf3b172111d2e64e9d4940d91097f04a0bbd0acc816e2cf49eec664c6f8fcaf76",
chainId: 42161,
state: "pending",
label: "Execute",
},
])
setPrepareSendQuote(dummyQuote)
setCurrentScreen("pending")
break
case "pending-3-item-2-confirmed":
// Set dummy transaction states for debug mode - showing all steps
setTransactionStates([
{
transactionHash:
"0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
explorerUrl:
"https://polygonscan.com/tx/0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
chainId: 137,
state: "confirmed",
label: "Transfer",
},
{
transactionHash:
"0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
explorerUrl:
"https://polygonscan.com/tx/0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
chainId: 137,
state: "confirmed",
label: "Swap & Bridge",
},
{
transactionHash:
"0xf3b172111d2e64e9d4940d91097f04a0bbd0acc816e2cf49eec664c6f8fcaf76",
explorerUrl:
"https://arbiscan.io/tx/0xf3b172111d2e64e9d4940d91097f04a0bbd0acc816e2cf49eec664c6f8fcaf76",
chainId: 42161,
state: "pending",
label: "Execute",
},
])
setPrepareSendQuote(dummyQuote)
setCurrentScreen("pending")
break
case "pending-3-item-3-confirmed":
// Set dummy transaction states for debug mode - showing all steps
setTransactionStates([
{
transactionHash:
"0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
explorerUrl:
"https://polygonscan.com/tx/0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
chainId: 137,
state: "confirmed",
label: "Transfer",
},
{
transactionHash:
"0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
explorerUrl:
"https://polygonscan.com/tx/0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
chainId: 137,
state: "confirmed",
label: "Swap & Bridge",
},
{
transactionHash:
"0xf3b172111d2e64e9d4940d91097f04a0bbd0acc816e2cf49eec664c6f8fcaf76",
explorerUrl:
"https://arbiscan.io/tx/0xf3b172111d2e64e9d4940d91097f04a0bbd0acc816e2cf49eec664c6f8fcaf76",
chainId: 42161,
state: "confirmed",
label: "Execute",
},
])
setPrepareSendQuote(dummyQuote)
setCurrentScreen("pending")
break
case "pending-3-item-2-confirmed-with-error":
// Set dummy transaction states for debug mode - second item has CallFailed event
setTransactionStates([
{
transactionHash:
"0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
explorerUrl:
"https://polygonscan.com/tx/0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
chainId: 137,
state: "confirmed",
label: "Transfer",
},
{
transactionHash:
"0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
explorerUrl:
"https://polygonscan.com/tx/0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
chainId: 137,
state: "confirmed",
label: "Swap & Bridge",
decodedGuestModuleEvents: [
{
type: "CallFailed",
opHash:
"0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
index: BigInt(1),
returnData: "0x",
} as any,
],
},
{
transactionHash:
"0xf3b172111d2e64e9d4940d91097f04a0bbd0acc816e2cf49eec664c6f8fcaf76",
explorerUrl:
"https://arbiscan.io/tx/0xf3b172111d2e64e9d4940d91097f04a0bbd0acc816e2cf49eec664c6f8fcaf76",
chainId: 42161,
state: "pending",
label: "Execute",
},
])
setPrepareSendQuote(dummyQuote)
setCurrentScreen("pending")
break
case "receipt":
// Set dummy transaction states data for debug mode
setTransactionStates([
{
transactionHash:
"0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
explorerUrl:
"https://polygonscan.com/tx/0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
chainId: 137,
state: "confirmed",
label: "Transfer",
},
{
transactionHash:
"0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
explorerUrl:
"https://polygonscan.com/tx/0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
chainId: 137,
state: "confirmed",
label: "Swap & Bridge",
},
{
transactionHash:
"0xf3b172111d2e64e9d4940d91097f04a0bbd0acc816e2cf49eec664c6f8fcaf76",
explorerUrl:
"https://arbiscan.io/tx/0xf3b172111d2e64e9d4940d91097f04a0bbd0acc816e2cf49eec664c6f8fcaf76",
chainId: 42161,
state: "confirmed",
label: "Execute",
},
])
setCurrentScreen("receipt")
break
case "receipt-failed":
// Set dummy transaction states data for debug mode
setTransactionStates([
{
transactionHash:
"0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
explorerUrl:
"https://polygonscan.com/tx/0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
chainId: 137,
state: "confirmed",
label: "Transfer",
},
{
transactionHash:
"0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
explorerUrl:
"https://polygonscan.com/tx/0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
chainId: 137,
state: "confirmed",
label: "Swap & Bridge",
},
{
transactionHash: "",
explorerUrl: "",
chainId: 42161,
state: "failed",
label: "Execute",
},
])
setCurrentScreen("receipt")
break
case "receipt-refunded":
// Set dummy transaction states data for debug mode
setTransactionStates([
{
transactionHash:
"0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
explorerUrl:
"https://polygonscan.com/tx/0x45bb2259631e73f32841a6058b0a4008c75bca296942bec6326d188978d5353d",
chainId: 137,
state: "confirmed",
label: "Transfer",
},
{
transactionHash:
"0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
explorerUrl:
"https://polygonscan.com/tx/0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
chainId: 137,
state: "confirmed",
label: "Swap & Bridge",
},
{
transactionHash:
"0xf3b172111d2e64e9d4940d91097f04a0bbd0acc816e2cf49eec664c6f8fcaf76",
explorerUrl:
"https://arbiscan.io/tx/0xf3b172111d2e64e9d4940d91097f04a0bbd0acc816e2cf49eec664c6f8fcaf76",
chainId: 42161,
state: "confirmed",
label: "Execute",
decodedGuestModuleEvents: [
{
type: "CallFailed",
opHash:
"0x6ff30196ca0d4998cc6928bca2ec282766eb3c3997535e0a61e0d69c9c9b16b8",
index: BigInt(1),
returnData: "0x",
} as any,
],
decodedTrailsTokenSweeperEvents: [
{
type: "Sweep",
token: "0x0000000000000000000000000000000000000000",
recipient: "0x0000000000000000000000000000000000000000",
amount: BigInt(1000000000000000000),
} as any,
],
refunded: true,
},
])
setCurrentScreen("receipt")
break
case "mesh-connect":
setCurrentScreen("mesh-connect")
break
case "wallet-connect":
setCurrentScreen("wallet-connect")
break
case "wallet-list":
setCurrentScreen("wallet-list")
break
case "wallet-connection-pending":
setSelectedWalletId("metamask")
setCurrentScreen("wallet-connection-pending")
break
case "wallet-connection-pending-retry":
setSelectedWalletId("metamask")
setShowWalletConnectionRetry(true)
setCurrentScreen("wallet-connection-pending")
break
case "fund-methods":
setCurrentScreen("fund-methods")
break
case "earn":
setCurrentMode("earn")
setCurrentScreen("earn")
break
case "earn-pools":
setCurrentScreen("earn-pools")
break
case "swap":
setCurrentMode("swap")
setSelectedToken(null)
setTransactionStates([])
setCurrentScreen("swap")
break
case "receive":
setCurrentMode("receive")
setCurrentScreen("receive")
break
case "account-history":
setSelectedToken(null)
setTransactionStates([])
setCurrentScreen("account-history")
break
}
},
[
setCurrentScreen,
setSelectedToken,
setTransactionStates,
setPrepareSendQuote,
setShowWalletConfirmRetry,
setCurrentMode,
setSelectedWalletId,
setShowWalletConnectionRetry,
setError,
isConnected,
],
)
return { handleDebugScreenSelect }
}