Skip to content

Commit acd8b9e

Browse files
Feat: tokenAddress and amount bridge params (#7176)
Signed-off-by: greg <gregfromstl@gmail.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
1 parent 52d451f commit acd8b9e

File tree

3 files changed

+55
-9
lines changed

3 files changed

+55
-9
lines changed

apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/universal-bridge/webhooks/components/webhooks.client.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,8 @@ export function PayWebhooksPage(props: PayWebhooksPageProps) {
111111
<TableHead>Label</TableHead>
112112
<TableHead>Url</TableHead>
113113
<TableHead>Created</TableHead>
114-
<TableHead>Version</TableHead>
115-
<TableHead>Delete</TableHead>
114+
<TableHead className="text-center">Version</TableHead>
115+
<TableHead className="text-center">Delete</TableHead>
116116
</TableRow>
117117
</TableHeader>
118118
<TableBody>
@@ -123,8 +123,10 @@ export function PayWebhooksPage(props: PayWebhooksPageProps) {
123123
<TableCell>
124124
{formatDistanceToNow(webhook.createdAt, { addSuffix: true })}
125125
</TableCell>
126-
<TableCell>{webhook.version || "v1"}</TableCell>
127-
<TableCell className="text-right">
126+
<TableCell className="text-center">
127+
{webhook.version || "1"}
128+
</TableCell>
129+
<TableCell className="text-center">
128130
<DeleteWebhookButton
129131
clientId={props.clientId}
130132
teamId={props.teamId}

apps/dashboard/src/app/bridge/components/client/UniversalBridgeEmbed.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
"use client";
22

33
import { useTheme } from "next-themes";
4-
import { PayEmbed } from "thirdweb/react";
4+
import { PayEmbed, type TokenInfo } from "thirdweb/react";
55
import { getSDKTheme } from "../../../(app)/components/sdk-component-theme";
66
import { useV5DashboardChain } from "../../../../lib/v5-adapter";
77
import { bridgeAppThirdwebClient } from "../../constants";
88

9-
export function UniversalBridgeEmbed({ chainId }: { chainId?: number }) {
9+
export function UniversalBridgeEmbed({
10+
chainId,
11+
token,
12+
amount,
13+
}: { chainId?: number; token: TokenInfo | undefined; amount: string }) {
1014
const { theme } = useTheme();
1115
const chain = useV5DashboardChain(chainId || 1);
1216

@@ -17,7 +21,8 @@ export function UniversalBridgeEmbed({ chainId }: { chainId?: number }) {
1721
mode: "fund_wallet",
1822
prefillBuy: {
1923
chain,
20-
amount: "0.01",
24+
token,
25+
amount,
2126
},
2227
}}
2328
theme={getSDKTheme(theme === "light" ? "light" : "dark")}

apps/dashboard/src/app/bridge/page.tsx

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import { ArrowUpRightIcon } from "lucide-react";
22
import type { Metadata } from "next";
3+
import type { Address } from "thirdweb";
4+
import { defineChain } from "thirdweb/chains";
5+
import { getContract } from "thirdweb/contract";
6+
import { getCurrencyMetadata } from "thirdweb/extensions/erc20";
37
import { UniversalBridgeEmbed } from "./components/client/UniversalBridgeEmbed";
8+
import { bridgeAppThirdwebClient } from "./constants";
49

510
const title = "Universal Bridge: Swap, Bridge, and Onramp";
611
const description =
@@ -18,11 +23,45 @@ export const metadata: Metadata = {
1823
export default async function BridgePage({
1924
searchParams,
2025
}: { searchParams: Promise<Record<string, string | string[]>> }) {
21-
const { chainId } = await searchParams;
26+
const { chainId, tokenAddress, amount } = await searchParams;
27+
28+
let symbol: string | undefined;
29+
let decimals: number | undefined;
30+
let tokenName: string | undefined;
31+
32+
if (chainId && tokenAddress) {
33+
try {
34+
const metadata = await getCurrencyMetadata({
35+
contract: getContract({
36+
client: bridgeAppThirdwebClient,
37+
// eslint-disable-next-line no-restricted-syntax
38+
chain: defineChain(Number(chainId)),
39+
address: tokenAddress as Address,
40+
}),
41+
});
42+
({ symbol, decimals, name: tokenName } = metadata);
43+
} catch (error) {
44+
console.warn("Failed to fetch token metadata:", error);
45+
// Continue with undefined values; the component should handle gracefully
46+
}
47+
}
48+
2249
return (
2350
<div className="relative mx-auto flex h-screen w-full flex-col items-center justify-center overflow-hidden border py-10">
2451
<main className="container z-10 flex justify-center">
25-
<UniversalBridgeEmbed chainId={chainId ? Number(chainId) : undefined} />
52+
<UniversalBridgeEmbed
53+
chainId={chainId ? Number(chainId) : undefined}
54+
token={
55+
symbol && decimals && tokenName
56+
? {
57+
address: tokenAddress as Address,
58+
name: tokenName,
59+
symbol,
60+
}
61+
: undefined
62+
}
63+
amount={(amount || "0.01") as string}
64+
/>
2665
</main>
2766

2867
{/* eslint-disable-next-line @next/next/no-img-element */}

0 commit comments

Comments
 (0)