diff --git a/.changeset/violet-readers-warn.md b/.changeset/violet-readers-warn.md
new file mode 100644
index 00000000000..efc532bacef
--- /dev/null
+++ b/.changeset/violet-readers-warn.md
@@ -0,0 +1,5 @@
+---
+"thirdweb": patch
+---
+
+Fix supportedTokens address comparison
diff --git a/packages/thirdweb/src/react/core/hooks/usePaymentMethods.ts b/packages/thirdweb/src/react/core/hooks/usePaymentMethods.ts
index 7f6ac866495..bb67e4a7c22 100644
--- a/packages/thirdweb/src/react/core/hooks/usePaymentMethods.ts
+++ b/packages/thirdweb/src/react/core/hooks/usePaymentMethods.ts
@@ -93,32 +93,15 @@ export function usePaymentMethods(options: {
type: "wallet" as const,
quote: s.quote,
}));
- const insufficientBalanceQuotes = validTokenQuotes
- .filter((s) => s.balance < s.quote.originAmount)
- .sort((a, b) => {
- return (
- Number.parseFloat(
- toTokens(a.quote.originAmount, a.originToken.decimals),
- ) *
- (a.originToken.prices.USD || 1) -
- Number.parseFloat(
- toTokens(b.quote.originAmount, b.originToken.decimals),
- ) *
- (b.originToken.prices.USD || 1)
- );
- });
+
const sufficientBalanceQuotes = validTokenQuotes
- .filter((s) => s.balance >= s.quote.originAmount)
+ .filter((s) => !!s.originToken.prices.USD)
.sort((a, b) => {
return (
- Number.parseFloat(
- toTokens(a.quote.originAmount, a.originToken.decimals),
- ) *
- (a.originToken.prices.USD || 1) -
- Number.parseFloat(
- toTokens(b.quote.originAmount, b.originToken.decimals),
- ) *
- (b.originToken.prices.USD || 1)
+ Number.parseFloat(toTokens(b.balance, b.originToken.decimals)) *
+ (b.originToken.prices.USD || 1) -
+ Number.parseFloat(toTokens(a.balance, a.originToken.decimals)) *
+ (a.originToken.prices.USD || 1)
);
});
@@ -133,15 +116,14 @@ export function usePaymentMethods(options: {
)
: [];
const finalQuotes = supportedTokens
- ? [...sufficientBalanceQuotes, ...insufficientBalanceQuotes].filter(
- (q) =>
- tokensToInclude.find(
- (t) =>
- t.chainId === q.originToken.chainId &&
- t.address === q.originToken.address,
- ),
+ ? sufficientBalanceQuotes.filter((q) =>
+ tokensToInclude.find(
+ (t) =>
+ t.chainId === q.originToken.chainId &&
+ t.address.toLowerCase() === q.originToken.address.toLowerCase(),
+ ),
)
- : [...sufficientBalanceQuotes, ...insufficientBalanceQuotes];
+ : sufficientBalanceQuotes;
return finalQuotes;
},
queryKey: [
diff --git a/packages/thirdweb/src/react/web/ui/Bridge/BridgeOrchestrator.tsx b/packages/thirdweb/src/react/web/ui/Bridge/BridgeOrchestrator.tsx
index 7caf3ebc3c6..9346ab31bad 100644
--- a/packages/thirdweb/src/react/web/ui/Bridge/BridgeOrchestrator.tsx
+++ b/packages/thirdweb/src/react/web/ui/Bridge/BridgeOrchestrator.tsx
@@ -192,6 +192,7 @@ export function BridgeOrchestrator({
// Handle errors
const handleError = useCallback(
(error: Error) => {
+ console.error(error);
onError?.(error);
send({ error, type: "ERROR_OCCURRED" });
},
diff --git a/packages/thirdweb/src/react/web/ui/Bridge/BuyWidget.tsx b/packages/thirdweb/src/react/web/ui/Bridge/BuyWidget.tsx
index 85f3e4266b7..b185c038a8f 100644
--- a/packages/thirdweb/src/react/web/ui/Bridge/BuyWidget.tsx
+++ b/packages/thirdweb/src/react/web/ui/Bridge/BuyWidget.tsx
@@ -33,6 +33,9 @@ import { BridgeOrchestrator, type UIOptions } from "./BridgeOrchestrator.js";
import { UnsupportedTokenScreen } from "./UnsupportedTokenScreen.js";
export type BuyWidgetProps = {
+ /**
+ * Customize the supported tokens that users can pay with.
+ */
supportedTokens?: SupportedTokens;
/**
* A client is the entry point to the thirdweb SDK.
@@ -217,7 +220,7 @@ type UIOptionsResult =
*
* ```
*
@@ -229,11 +232,34 @@ type UIOptionsResult =
*
* ```
*
+ * ### Customize the supported tokens
+ *
+ * You can customize the supported tokens that users can pay with by passing a `supportedTokens` object to the `BuyWidget` component.
+ *
+ * ```tsx
+ *
+ * ```
+ *
+ *
* ### Customize the UI
*
* You can customize the UI of the `BuyWidget` component by passing a custom theme object to the `theme` prop.
diff --git a/packages/thirdweb/src/react/web/ui/Bridge/CheckoutWidget.tsx b/packages/thirdweb/src/react/web/ui/Bridge/CheckoutWidget.tsx
index 78a3d40cf1a..b7346bac010 100644
--- a/packages/thirdweb/src/react/web/ui/Bridge/CheckoutWidget.tsx
+++ b/packages/thirdweb/src/react/web/ui/Bridge/CheckoutWidget.tsx
@@ -29,6 +29,9 @@ import { BridgeOrchestrator, type UIOptions } from "./BridgeOrchestrator.js";
import { UnsupportedTokenScreen } from "./UnsupportedTokenScreen.js";
export type CheckoutWidgetProps = {
+ /**
+ * Customize the supported tokens that users can pay with.
+ */
supportedTokens?: SupportedTokens;
/**
* A client is the entry point to the thirdweb SDK.
@@ -215,11 +218,43 @@ type UIOptionsResult =
* @example
* ### Default configuration
*
- * By default, the `CheckoutWidget` component will allows users to fund their wallets with crypto or fiat on any of the supported chains..
+ * The `CheckoutWidget` component allows user to pay a given wallet for any product or service. You can register webhooks to get notified for every purchase done via the widget.
+ *
+ * ```tsx
+ * {
+ * alert("Purchase successful!");
+ * }}
+ * />
+ * ```
+ *
+ * ### Customize the supported tokens
+ *
+ * You can customize the supported tokens that users can pay with by passing a `supportedTokens` object to the `CheckoutWidget` component.
*
* ```tsx
*
* ```
*
@@ -230,6 +265,9 @@ type UIOptionsResult =
* ```tsx
*
* ```
*
+ * ### Customize the supported tokens
+ *
+ * You can customize the supported tokens that users can pay with by passing a `supportedTokens` object to the `TransactionWidget` component.
+ *
+ * ```tsx
+ *
+ * ```
+ *
* ### Customize the UI
*
* You can customize the UI of the `TransactionWidget` component by passing a custom theme object to the `theme` prop.