Skip to content

Commit 6a8c4c3

Browse files
committed
[MNY-256] SDK: Update onSuccess prop of BuyWidget, CheckoutWidget, BridgeWidget components
1 parent e830109 commit 6a8c4c3

File tree

9 files changed

+69
-16
lines changed

9 files changed

+69
-16
lines changed

.changeset/strong-buses-love.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
"thirdweb": patch
3+
---
4+
5+
Update `onSuccess` prop on `BuyWidget`, `CheckoutWidget`, `SwapWidget`, and `BridgeWidget` components to include `statuses` and `quote` objects instead of just `quote`.
6+
7+
```tsx
8+
<BuyWidget
9+
onSuccess={(data) => {
10+
console.log(data.statuses);
11+
console.log(data.quote);
12+
}}
13+
/>
14+
```

apps/dashboard/src/@/components/blocks/BuyAndSwapEmbed.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ export function BuyAndSwapEmbed(props: {
147147
});
148148
}
149149
}}
150-
onSuccess={(quote) => {
150+
onSuccess={({ quote }) => {
151151
reportTokenBuySuccessful({
152152
buyTokenChainId:
153153
quote.type === "buy"
@@ -208,7 +208,7 @@ export function BuyAndSwapEmbed(props: {
208208
pageType: props.pageType,
209209
});
210210
}}
211-
onSuccess={(quote) => {
211+
onSuccess={({ quote }) => {
212212
reportTokenSwapSuccessful({
213213
buyTokenChainId: quote.intent.destinationChainId,
214214
buyTokenAddress: quote.intent.destinationTokenAddress,

apps/portal/src/app/bridge/bridge-widget-script/page.mdx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,10 @@ type Options = {
104104
swap?: {
105105
className?: string;
106106
style?: React.CSSProperties;
107-
onSuccess?: (quote: SwapPreparedQuote) => void;
107+
onSuccess?: (data: {
108+
quote: SwapPreparedQuote;
109+
statuses: CompletedStatusResult[];
110+
}) => void;
108111
onError?: (error: Error, quote: SwapPreparedQuote) => void;
109112
onCancel?: (quote: SwapPreparedQuote) => void;
110113
onDisconnect?: () => void;
@@ -132,7 +135,10 @@ type Options = {
132135
error: Error,
133136
quote: BuyOrOnrampPrepareResult | undefined,
134137
) => void;
135-
onSuccess?: (quote: BuyOrOnrampPrepareResult) => void;
138+
onSuccess?: (data: {
139+
quote: BuyOrOnrampPrepareResult;
140+
statuses: CompletedStatusResult[];
141+
}) => void;
136142
className?: string;
137143
country?: string;
138144
presetOptions?: [number, number, number];

packages/thirdweb/src/exports/react.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,12 @@ export type {
7373
SendTransactionPayModalConfig,
7474
} from "../react/core/hooks/transaction/useSendTransaction.js";
7575
export { useSimulateTransaction } from "../react/core/hooks/transaction/useSimulateTransaction.js";
76+
export type { BridgePrepareResult } from "../react/core/hooks/useBridgePrepare.js";
7677
export {
7778
type UseBridgeRoutesParams,
7879
useBridgeRoutes,
7980
} from "../react/core/hooks/useBridgeRoutes.js";
81+
export type { CompletedStatusResult } from "../react/core/hooks/useStepExecutor.js";
8082
export { useActiveAccount } from "../react/core/hooks/wallets/useActiveAccount.js";
8183
// wallet hooks
8284
export { useActiveWallet } from "../react/core/hooks/wallets/useActiveWallet.js";
@@ -133,7 +135,7 @@ export { useProfiles } from "../react/web/hooks/wallets/useProfiles.js";
133135
export { useUnlinkProfile } from "../react/web/hooks/wallets/useUnlinkProfile.js";
134136
export { ThirdwebProvider } from "../react/web/providers/thirdweb-provider.js";
135137
export { AutoConnect } from "../react/web/ui/AutoConnect/AutoConnect.js";
136-
138+
export type { BuyOrOnrampPrepareResult } from "../react/web/ui/Bridge/BuyWidget.js";
137139
export {
138140
BuyWidget,
139141
type BuyWidgetProps,
@@ -276,7 +278,6 @@ export { SiteEmbed } from "../react/web/ui/SiteEmbed.js";
276278
export { SiteLink } from "../react/web/ui/SiteLink.js";
277279
export { TransactionButton } from "../react/web/ui/TransactionButton/index.js";
278280
export type { LocaleId } from "../react/web/ui/types.js";
279-
280281
// Utils
281282
export { getLastAuthProvider } from "../react/web/utils/storage.js";
282283
export type {

packages/thirdweb/src/react/web/ui/Bridge/BuyWidget.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,10 @@ export type BuyWidgetProps = {
158158
/**
159159
* Callback triggered when the purchase is successful.
160160
*/
161-
onSuccess?: (quote: BuyOrOnrampPrepareResult) => void;
161+
onSuccess?: (data: {
162+
quote: BuyOrOnrampPrepareResult;
163+
statuses: CompletedStatusResult[];
164+
}) => void;
162165

163166
/**
164167
* Callback triggered when the purchase encounters an error.
@@ -616,7 +619,10 @@ function BridgeWidgetContent(
616619
screen.preparedQuote.type === "buy" ||
617620
screen.preparedQuote.type === "onramp"
618621
) {
619-
props.onSuccess?.(screen.preparedQuote);
622+
props.onSuccess?.({
623+
quote: screen.preparedQuote,
624+
statuses: completedStatuses,
625+
});
620626
}
621627
setScreen({
622628
id: "6:success",

packages/thirdweb/src/react/web/ui/Bridge/CheckoutWidget.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,10 @@ export type CheckoutWidgetProps = {
170170
/**
171171
* Callback triggered when the purchase is successful.
172172
*/
173-
onSuccess?: (quote: BridgePrepareResult) => void;
173+
onSuccess?: (data: {
174+
quote: BridgePrepareResult;
175+
statuses: CompletedStatusResult[];
176+
}) => void;
174177

175178
/**
176179
* Callback triggered when the purchase encounters an error.
@@ -660,7 +663,10 @@ function CheckoutWidgetContent(
660663
handleCancel(screen.preparedQuote);
661664
}}
662665
onComplete={(completedStatuses) => {
663-
props.onSuccess?.(screen.preparedQuote);
666+
props.onSuccess?.({
667+
quote: screen.preparedQuote,
668+
statuses: completedStatuses,
669+
});
664670
setScreen({
665671
id: "6:success",
666672
preparedQuote: screen.preparedQuote,

packages/thirdweb/src/react/web/ui/Bridge/bridge-widget/bridge-widget.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
spacing,
1414
type Theme,
1515
} from "../../../../core/design-system/index.js";
16+
import type { CompletedStatusResult } from "../../../../core/hooks/useStepExecutor.js";
1617
import { EmbedContainer } from "../../ConnectWallet/Modal/ConnectEmbed.js";
1718
import { Container } from "../../components/basic.js";
1819
import { Button } from "../../components/buttons.js";
@@ -82,7 +83,10 @@ export type BridgeWidgetProps = {
8283
/** Optional style overrides applied to the Swap tab content container. */
8384
style?: React.CSSProperties;
8485
/** Callback invoked when a swap is successful. */
85-
onSuccess?: (quote: SwapPreparedQuote) => void;
86+
onSuccess?: (data: {
87+
quote: SwapPreparedQuote;
88+
statuses: CompletedStatusResult[];
89+
}) => void;
8690
/** Callback invoked when an error occurs during swapping. */
8791
onError?: (error: Error, quote: SwapPreparedQuote) => void;
8892
/** Callback invoked when the user cancels the swap. */
@@ -172,7 +176,10 @@ export type BridgeWidgetProps = {
172176
quote: BuyOrOnrampPrepareResult | undefined,
173177
) => void;
174178
/** Callback triggered when the purchase is successful. */
175-
onSuccess?: (quote: BuyOrOnrampPrepareResult) => void;
179+
onSuccess?: (data: {
180+
quote: BuyOrOnrampPrepareResult;
181+
statuses: CompletedStatusResult[];
182+
}) => void;
176183
/** Optional class name applied to the Buy tab content container. */
177184
className?: string;
178185
/** The user's ISO 3166 alpha-2 country code. Used to determine onramp provider support. */

packages/thirdweb/src/react/web/ui/Bridge/swap-widget/SwapWidget.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,10 @@ export type SwapWidgetProps = {
145145
/**
146146
* Callback to be called when the swap is successful.
147147
*/
148-
onSuccess?: (quote: SwapPreparedQuote) => void;
148+
onSuccess?: (data: {
149+
quote: SwapPreparedQuote;
150+
statuses: CompletedStatusResult[];
151+
}) => void;
149152
/**
150153
* Callback to be called when user encounters an error when swapping.
151154
*/
@@ -465,7 +468,10 @@ function SwapWidgetContent(
465468
}}
466469
onCancel={() => props.onCancel?.(screen.preparedQuote)}
467470
onComplete={(completedStatuses) => {
468-
props.onSuccess?.(screen.preparedQuote);
471+
props.onSuccess?.({
472+
quote: screen.preparedQuote,
473+
statuses: completedStatuses,
474+
});
469475
setScreen({
470476
...screen,
471477
id: "4:success",

packages/thirdweb/src/script-exports/bridge-widget-script.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
type Theme,
88
type ThemeOverrides,
99
} from "../react/core/design-system/index.js";
10+
import type { CompletedStatusResult } from "../react/core/hooks/useStepExecutor.js";
1011
import type { BuyOrOnrampPrepareResult } from "../react/web/ui/Bridge/BuyWidget.js";
1112
import { BridgeWidget } from "../react/web/ui/Bridge/bridge-widget/bridge-widget.js";
1213
import type { SwapPreparedQuote } from "../react/web/ui/Bridge/swap-widget/types.js";
@@ -23,7 +24,10 @@ export type BridgeWidgetScriptProps = {
2324
swap?: {
2425
className?: string;
2526
style?: React.CSSProperties;
26-
onSuccess?: (quote: SwapPreparedQuote) => void;
27+
onSuccess?: (data: {
28+
quote: SwapPreparedQuote;
29+
statuses: CompletedStatusResult[];
30+
}) => void;
2731
onError?: (error: Error, quote: SwapPreparedQuote) => void;
2832
onCancel?: (quote: SwapPreparedQuote) => void;
2933
onDisconnect?: () => void;
@@ -51,7 +55,10 @@ export type BridgeWidgetScriptProps = {
5155
error: Error,
5256
quote: BuyOrOnrampPrepareResult | undefined,
5357
) => void;
54-
onSuccess?: (quote: BuyOrOnrampPrepareResult) => void;
58+
onSuccess?: (data: {
59+
quote: BuyOrOnrampPrepareResult;
60+
statuses: CompletedStatusResult[];
61+
}) => void;
5562
className?: string;
5663
country?: string;
5764
presetOptions?: [number, number, number];

0 commit comments

Comments
 (0)