@b3dotfun/sdk 0.0.87-alpha.0 → 0.0.87-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/anyspend/react/components/AnySpend.d.ts +5 -0
- package/dist/cjs/anyspend/react/components/AnySpend.js +59 -49
- package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.d.ts +1 -1
- package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.js +1 -2
- package/dist/cjs/anyspend/react/components/AnySpendDeposit.d.ts +122 -0
- package/dist/cjs/anyspend/react/components/AnySpendDeposit.js +190 -0
- package/dist/cjs/anyspend/react/components/QRDeposit.d.ts +43 -0
- package/dist/cjs/anyspend/react/components/QRDeposit.js +146 -0
- package/dist/cjs/anyspend/react/components/common/OrderDetails.js +17 -12
- package/dist/cjs/anyspend/react/components/common/OrderDetailsCollapsible.d.ts +2 -0
- package/dist/cjs/anyspend/react/components/common/OrderDetailsCollapsible.js +12 -5
- package/dist/cjs/anyspend/react/components/common/OrderStatus.js +2 -2
- package/dist/cjs/anyspend/react/components/common/WarningText.d.ts +32 -0
- package/dist/cjs/anyspend/react/components/common/WarningText.js +36 -0
- package/dist/cjs/anyspend/react/components/icons/CreditCardIcon.d.ts +6 -0
- package/dist/cjs/anyspend/react/components/icons/CreditCardIcon.js +6 -0
- package/dist/cjs/anyspend/react/components/icons/QrCodeIcon.d.ts +6 -0
- package/dist/cjs/anyspend/react/components/icons/QrCodeIcon.js +6 -0
- package/dist/cjs/anyspend/react/components/index.d.ts +2 -0
- package/dist/cjs/anyspend/react/components/index.js +3 -1
- package/dist/cjs/anyspend/react/hooks/index.d.ts +1 -0
- package/dist/cjs/anyspend/react/hooks/index.js +1 -0
- package/dist/cjs/anyspend/react/hooks/useAnyspendFlow.d.ts +2 -2
- package/dist/cjs/anyspend/react/hooks/useAnyspendFlow.js +35 -11
- package/dist/cjs/anyspend/react/hooks/useCreateDepositFirstOrder.d.ts +24 -0
- package/dist/cjs/anyspend/react/hooks/useCreateDepositFirstOrder.js +86 -0
- package/dist/cjs/anyspend/utils/format.js +28 -5
- package/dist/cjs/global-account/react/stores/useModalStore.d.ts +4 -0
- package/dist/esm/anyspend/react/components/AnySpend.d.ts +5 -0
- package/dist/esm/anyspend/react/components/AnySpend.js +59 -49
- package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.d.ts +1 -1
- package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.js +1 -2
- package/dist/esm/anyspend/react/components/AnySpendDeposit.d.ts +122 -0
- package/dist/esm/anyspend/react/components/AnySpendDeposit.js +187 -0
- package/dist/esm/anyspend/react/components/QRDeposit.d.ts +43 -0
- package/dist/esm/anyspend/react/components/QRDeposit.js +143 -0
- package/dist/esm/anyspend/react/components/common/OrderDetails.js +17 -12
- package/dist/esm/anyspend/react/components/common/OrderDetailsCollapsible.d.ts +2 -0
- package/dist/esm/anyspend/react/components/common/OrderDetailsCollapsible.js +12 -5
- package/dist/esm/anyspend/react/components/common/OrderStatus.js +2 -2
- package/dist/esm/anyspend/react/components/common/WarningText.d.ts +32 -0
- package/dist/esm/anyspend/react/components/common/WarningText.js +32 -0
- package/dist/esm/anyspend/react/components/icons/CreditCardIcon.d.ts +6 -0
- package/dist/esm/anyspend/react/components/icons/CreditCardIcon.js +2 -0
- package/dist/esm/anyspend/react/components/icons/QrCodeIcon.d.ts +6 -0
- package/dist/esm/anyspend/react/components/icons/QrCodeIcon.js +2 -0
- package/dist/esm/anyspend/react/components/index.d.ts +2 -0
- package/dist/esm/anyspend/react/components/index.js +1 -0
- package/dist/esm/anyspend/react/hooks/index.d.ts +1 -0
- package/dist/esm/anyspend/react/hooks/index.js +1 -0
- package/dist/esm/anyspend/react/hooks/useAnyspendFlow.d.ts +2 -2
- package/dist/esm/anyspend/react/hooks/useAnyspendFlow.js +35 -11
- package/dist/esm/anyspend/react/hooks/useCreateDepositFirstOrder.d.ts +24 -0
- package/dist/esm/anyspend/react/hooks/useCreateDepositFirstOrder.js +83 -0
- package/dist/esm/anyspend/utils/format.js +28 -5
- package/dist/esm/global-account/react/stores/useModalStore.d.ts +4 -0
- package/dist/styles/index.css +1 -1
- package/dist/types/anyspend/react/components/AnySpend.d.ts +5 -0
- package/dist/types/anyspend/react/components/AnySpendCustomExactIn.d.ts +1 -1
- package/dist/types/anyspend/react/components/AnySpendDeposit.d.ts +122 -0
- package/dist/types/anyspend/react/components/QRDeposit.d.ts +43 -0
- package/dist/types/anyspend/react/components/common/OrderDetailsCollapsible.d.ts +2 -0
- package/dist/types/anyspend/react/components/common/WarningText.d.ts +32 -0
- package/dist/types/anyspend/react/components/icons/CreditCardIcon.d.ts +6 -0
- package/dist/types/anyspend/react/components/icons/QrCodeIcon.d.ts +6 -0
- package/dist/types/anyspend/react/components/index.d.ts +2 -0
- package/dist/types/anyspend/react/hooks/index.d.ts +1 -0
- package/dist/types/anyspend/react/hooks/useAnyspendFlow.d.ts +2 -2
- package/dist/types/anyspend/react/hooks/useCreateDepositFirstOrder.d.ts +24 -0
- package/dist/types/global-account/react/stores/useModalStore.d.ts +4 -0
- package/package.json +1 -1
- package/src/anyspend/react/components/AnySpend.tsx +68 -45
- package/src/anyspend/react/components/AnySpendCustomExactIn.tsx +2 -3
- package/src/anyspend/react/components/AnySpendDeposit.tsx +578 -0
- package/src/anyspend/react/components/QRDeposit.tsx +348 -0
- package/src/anyspend/react/components/common/OrderDetails.tsx +26 -8
- package/src/anyspend/react/components/common/OrderDetailsCollapsible.tsx +20 -8
- package/src/anyspend/react/components/common/OrderStatus.tsx +2 -2
- package/src/anyspend/react/components/common/WarningText.tsx +52 -0
- package/src/anyspend/react/components/icons/CreditCardIcon.tsx +25 -0
- package/src/anyspend/react/components/icons/QrCodeIcon.tsx +25 -0
- package/src/anyspend/react/components/icons/credit-card.svg +5 -0
- package/src/anyspend/react/components/icons/qr-code.svg +5 -0
- package/src/anyspend/react/components/index.ts +2 -0
- package/src/anyspend/react/hooks/index.ts +1 -0
- package/src/anyspend/react/hooks/useAnyspendFlow.ts +37 -12
- package/src/anyspend/react/hooks/useCreateDepositFirstOrder.ts +110 -0
- package/src/anyspend/utils/format.ts +33 -5
- package/src/global-account/react/stores/useModalStore.ts +4 -0
- package/src/styles/index.css +2 -0
|
@@ -24,9 +24,9 @@ interface UseAnyspendFlowProps {
|
|
|
24
24
|
destinationTokenChainId?: number;
|
|
25
25
|
slippage?: number;
|
|
26
26
|
disableUrlParamManagement?: boolean;
|
|
27
|
-
orderType?: "hype_duel" | "custom_exact_in";
|
|
27
|
+
orderType?: "hype_duel" | "custom_exact_in" | "swap";
|
|
28
28
|
}
|
|
29
|
-
export declare function useAnyspendFlow({ paymentType, recipientAddress, loadOrder,
|
|
29
|
+
export declare function useAnyspendFlow({ paymentType, recipientAddress, loadOrder, onOrderSuccess, onTransactionSuccess, sourceTokenAddress, sourceTokenChainId, destinationTokenAddress, destinationTokenChainId, slippage, disableUrlParamManagement, orderType, }: UseAnyspendFlowProps): {
|
|
30
30
|
activePanel: PanelView;
|
|
31
31
|
setActivePanel: import("react").Dispatch<import("react").SetStateAction<PanelView>>;
|
|
32
32
|
orderId: string | undefined;
|
|
@@ -28,7 +28,7 @@ var PanelView;
|
|
|
28
28
|
PanelView[PanelView["FEE_DETAIL"] = 7] = "FEE_DETAIL";
|
|
29
29
|
})(PanelView || (exports.PanelView = PanelView = {}));
|
|
30
30
|
// This hook serves for order hype_duel and custom_exact_in
|
|
31
|
-
function useAnyspendFlow({ paymentType = "crypto", recipientAddress, loadOrder,
|
|
31
|
+
function useAnyspendFlow({ paymentType = "crypto", recipientAddress, loadOrder, onOrderSuccess, onTransactionSuccess, sourceTokenAddress, sourceTokenChainId, destinationTokenAddress, destinationTokenChainId, slippage = 0, disableUrlParamManagement = false, orderType = "hype_duel", }) {
|
|
32
32
|
const searchParams = (0, react_2.useSearchParamsSSR)();
|
|
33
33
|
const router = (0, react_2.useRouter)();
|
|
34
34
|
// Panel and order state
|
|
@@ -135,16 +135,40 @@ function useAnyspendFlow({ paymentType = "crypto", recipientAddress, loadOrder,
|
|
|
135
135
|
// For fiat payments, always use USDC decimals (6) regardless of selectedSrcToken
|
|
136
136
|
const effectiveDecimals = paymentType === "fiat" ? anyspend_1.USDC_BASE.decimals : selectedSrcToken.decimals;
|
|
137
137
|
const activeInputAmountInWei = (0, viem_1.parseUnits)(srcAmount.replace(/,/g, ""), effectiveDecimals).toString();
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
138
|
+
// Build quote request based on order type
|
|
139
|
+
const quoteRequest = (() => {
|
|
140
|
+
const baseParams = {
|
|
141
|
+
srcChain: paymentType === "fiat" ? chains_1.base.id : selectedSrcChainId,
|
|
142
|
+
dstChain: selectedDstChainId ?? chains_1.base.id,
|
|
143
|
+
srcTokenAddress: paymentType === "fiat" ? anyspend_1.USDC_BASE.address : selectedSrcToken.address,
|
|
144
|
+
dstTokenAddress: selectedDstToken.address,
|
|
145
|
+
recipientAddress: effectiveRecipientAddress,
|
|
146
|
+
onrampVendor: paymentType === "fiat" ? getOnrampVendor(selectedFiatPaymentMethod) : undefined,
|
|
147
|
+
};
|
|
148
|
+
if (orderType === "swap") {
|
|
149
|
+
return {
|
|
150
|
+
...baseParams,
|
|
151
|
+
type: "swap",
|
|
152
|
+
tradeType: "EXACT_INPUT",
|
|
153
|
+
amount: activeInputAmountInWei,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
else if (orderType === "hype_duel") {
|
|
157
|
+
return {
|
|
158
|
+
...baseParams,
|
|
159
|
+
type: "hype_duel",
|
|
160
|
+
amount: activeInputAmountInWei,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
return {
|
|
165
|
+
...baseParams,
|
|
166
|
+
type: "custom_exact_in",
|
|
167
|
+
amount: activeInputAmountInWei,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
})();
|
|
171
|
+
const { anyspendQuote, isLoadingAnyspendQuote, getAnyspendQuoteError } = (0, react_1.useAnyspendQuote)(quoteRequest);
|
|
148
172
|
// Get geo options for fiat
|
|
149
173
|
const { geoData, coinbaseAvailablePaymentMethods, stripeWeb2Support } = (0, react_1.useGeoOnrampOptions)(paymentType === "fiat" ? (0, number_1.formatUnits)(activeInputAmountInWei, anyspend_1.USDC_BASE.decimals) : "0");
|
|
150
174
|
// Update destination amount when quote changes
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { components } from "../../../anyspend/types/api";
|
|
2
|
+
import { DepositContractConfig } from "../components/AnySpendDeposit";
|
|
3
|
+
export type CreateDepositFirstOrderParams = {
|
|
4
|
+
recipientAddress: string;
|
|
5
|
+
srcChain: number;
|
|
6
|
+
dstChain: number;
|
|
7
|
+
srcToken: components["schemas"]["Token"];
|
|
8
|
+
dstToken: components["schemas"]["Token"];
|
|
9
|
+
creatorAddress?: string;
|
|
10
|
+
/** Optional contract config for custom execution after deposit */
|
|
11
|
+
contractConfig?: DepositContractConfig;
|
|
12
|
+
};
|
|
13
|
+
export type UseCreateDepositFirstOrderProps = {
|
|
14
|
+
onSuccess?: (data: any) => void;
|
|
15
|
+
onError?: (error: Error) => void;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Hook for creating deposit_first orders in the Anyspend protocol.
|
|
19
|
+
* This order type doesn't require srcAmount - the user deposits tokens after the order is created.
|
|
20
|
+
*/
|
|
21
|
+
export declare function useCreateDepositFirstOrder({ onSuccess, onError }?: UseCreateDepositFirstOrderProps): {
|
|
22
|
+
createOrder: import("@tanstack/react-query").UseMutateFunction<any, Error, CreateDepositFirstOrderParams, unknown>;
|
|
23
|
+
isCreatingOrder: boolean;
|
|
24
|
+
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useCreateDepositFirstOrder = useCreateDepositFirstOrder;
|
|
4
|
+
const anyspend_1 = require("../../../anyspend/services/anyspend");
|
|
5
|
+
const utils_1 = require("../../../anyspend/utils");
|
|
6
|
+
const react_1 = require("../../../global-account/react");
|
|
7
|
+
const fingerprintjs_pro_react_1 = require("@fingerprintjs/fingerprintjs-pro-react");
|
|
8
|
+
const react_query_1 = require("@tanstack/react-query");
|
|
9
|
+
const react_2 = require("react");
|
|
10
|
+
/**
|
|
11
|
+
* Hook for creating deposit_first orders in the Anyspend protocol.
|
|
12
|
+
* This order type doesn't require srcAmount - the user deposits tokens after the order is created.
|
|
13
|
+
*/
|
|
14
|
+
function useCreateDepositFirstOrder({ onSuccess, onError } = {}) {
|
|
15
|
+
const { partnerId } = (0, react_1.useB3)();
|
|
16
|
+
const { data: fpData } = (0, fingerprintjs_pro_react_1.useVisitorData)({ extendedResult: true }, { immediate: true });
|
|
17
|
+
const visitorData = fpData && {
|
|
18
|
+
requestId: fpData.requestId,
|
|
19
|
+
visitorId: fpData.visitorId,
|
|
20
|
+
};
|
|
21
|
+
const { mutate: createOrder, isPending } = (0, react_query_1.useMutation)({
|
|
22
|
+
mutationFn: async (params) => {
|
|
23
|
+
const { recipientAddress, srcChain, dstChain, srcToken, dstToken, creatorAddress, contractConfig } = params;
|
|
24
|
+
// Build payload based on whether we have a contract config
|
|
25
|
+
const payload = contractConfig
|
|
26
|
+
? {
|
|
27
|
+
functionAbi: contractConfig.functionAbi,
|
|
28
|
+
functionName: contractConfig.functionName,
|
|
29
|
+
functionArgs: contractConfig.functionArgs,
|
|
30
|
+
to: (0, utils_1.normalizeAddress)(contractConfig.to),
|
|
31
|
+
spenderAddress: contractConfig.spenderAddress ? (0, utils_1.normalizeAddress)(contractConfig.spenderAddress) : undefined,
|
|
32
|
+
action: contractConfig.action,
|
|
33
|
+
}
|
|
34
|
+
: {};
|
|
35
|
+
try {
|
|
36
|
+
return await anyspend_1.anyspendService.createOrder({
|
|
37
|
+
recipientAddress: (0, utils_1.normalizeAddress)(recipientAddress),
|
|
38
|
+
type: "deposit_first",
|
|
39
|
+
srcChain,
|
|
40
|
+
dstChain,
|
|
41
|
+
srcTokenAddress: (0, utils_1.normalizeAddress)(srcToken.address),
|
|
42
|
+
dstTokenAddress: (0, utils_1.normalizeAddress)(dstToken.address),
|
|
43
|
+
srcAmount: "", // Not required for deposit_first
|
|
44
|
+
payload,
|
|
45
|
+
metadata: {
|
|
46
|
+
srcToken: {
|
|
47
|
+
chainId: srcToken.chainId,
|
|
48
|
+
address: srcToken.address,
|
|
49
|
+
symbol: srcToken.symbol,
|
|
50
|
+
name: srcToken.name,
|
|
51
|
+
decimals: srcToken.decimals,
|
|
52
|
+
metadata: srcToken.metadata || {},
|
|
53
|
+
},
|
|
54
|
+
dstToken: {
|
|
55
|
+
chainId: dstToken.chainId,
|
|
56
|
+
address: dstToken.address,
|
|
57
|
+
symbol: dstToken.symbol,
|
|
58
|
+
name: dstToken.name,
|
|
59
|
+
decimals: dstToken.decimals,
|
|
60
|
+
metadata: dstToken.metadata || {},
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
creatorAddress: creatorAddress ? (0, utils_1.normalizeAddress)(creatorAddress) : undefined,
|
|
64
|
+
partnerId,
|
|
65
|
+
visitorData,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
if (error?.data) {
|
|
70
|
+
throw error.data;
|
|
71
|
+
}
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
onSuccess: (data) => {
|
|
76
|
+
onSuccess?.(data);
|
|
77
|
+
},
|
|
78
|
+
onError: (error) => {
|
|
79
|
+
onError?.(error);
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
return (0, react_2.useMemo)(() => ({
|
|
83
|
+
createOrder,
|
|
84
|
+
isCreatingOrder: isPending,
|
|
85
|
+
}), [createOrder, isPending]);
|
|
86
|
+
}
|
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getErrorDisplay = exports.getStatusDisplay = void 0;
|
|
4
|
+
const number_1 = require("../../shared/utils/number");
|
|
4
5
|
const getStatusDisplay = (order) => {
|
|
6
|
+
const srcToken = order.metadata?.srcToken;
|
|
7
|
+
const dstToken = order.metadata?.dstToken;
|
|
8
|
+
const formattedSrcAmount = srcToken ? (0, number_1.formatTokenAmount)(BigInt(order.srcAmount), srcToken.decimals) : undefined;
|
|
9
|
+
const actualDstAmount = order.settlement?.actualDstAmount;
|
|
10
|
+
const formattedActualDstAmount = actualDstAmount && dstToken ? (0, number_1.formatTokenAmount)(BigInt(actualDstAmount), dstToken.decimals) : undefined;
|
|
5
11
|
switch (order.status) {
|
|
6
|
-
case "scanning_deposit_transaction":
|
|
12
|
+
case "scanning_deposit_transaction": {
|
|
13
|
+
const depositText = formattedSrcAmount && srcToken
|
|
14
|
+
? `Awaiting ${formattedSrcAmount} ${srcToken.symbol}`
|
|
15
|
+
: order.onrampMetadata
|
|
16
|
+
? "Awaiting Payment"
|
|
17
|
+
: "Awaiting Deposit";
|
|
7
18
|
return {
|
|
8
|
-
text:
|
|
19
|
+
text: depositText,
|
|
9
20
|
status: "processing",
|
|
10
21
|
};
|
|
22
|
+
}
|
|
11
23
|
case "waiting_stripe_payment":
|
|
12
24
|
return {
|
|
13
25
|
text: "Awaiting Payment",
|
|
@@ -30,15 +42,16 @@ const getStatusDisplay = (order) => {
|
|
|
30
42
|
description: "It will take approximately one minute to complete.",
|
|
31
43
|
};
|
|
32
44
|
case "executed": {
|
|
45
|
+
const receivedText = formattedActualDstAmount && dstToken ? `Received ${formattedActualDstAmount} ${dstToken.symbol}` : undefined;
|
|
33
46
|
const { text, description } = order.type === "swap"
|
|
34
|
-
? { text: "Swap Complete", description: "Your swap has been completed successfully." }
|
|
47
|
+
? { text: receivedText || "Swap Complete", description: "Your swap has been completed successfully." }
|
|
35
48
|
: order.type === "mint_nft"
|
|
36
49
|
? { text: "NFT Minted", description: "Your NFT has been minted" }
|
|
37
50
|
: order.type === "join_tournament"
|
|
38
51
|
? { text: "Tournament Joined", description: "You have joined the tournament" }
|
|
39
52
|
: order.type === "fund_tournament"
|
|
40
53
|
? { text: "Tournament Funded", description: "You have funded the tournament" }
|
|
41
|
-
: { text: "Order Complete", description: "Your order has been completed" };
|
|
54
|
+
: { text: receivedText || "Order Complete", description: "Your order has been completed" };
|
|
42
55
|
return { text, status: "success", description };
|
|
43
56
|
}
|
|
44
57
|
case "refunding":
|
|
@@ -51,8 +64,18 @@ const getStatusDisplay = (order) => {
|
|
|
51
64
|
status: "failure",
|
|
52
65
|
description: "This order has failed. Please try again or contact support.",
|
|
53
66
|
};
|
|
67
|
+
case "quoting_after_deposit": {
|
|
68
|
+
return {
|
|
69
|
+
text: "Quoting After Deposit",
|
|
70
|
+
status: "processing",
|
|
71
|
+
description: "Getting quote for the order",
|
|
72
|
+
};
|
|
73
|
+
}
|
|
54
74
|
default:
|
|
55
|
-
|
|
75
|
+
return {
|
|
76
|
+
text: order.status,
|
|
77
|
+
status: "processing",
|
|
78
|
+
};
|
|
56
79
|
}
|
|
57
80
|
};
|
|
58
81
|
exports.getStatusDisplay = getStatusDisplay;
|
|
@@ -144,6 +144,10 @@ export interface AnySpendModalProps extends BaseModalProps {
|
|
|
144
144
|
customUsdInputValues?: string[];
|
|
145
145
|
/** Client-provided reference ID for tracking orders */
|
|
146
146
|
clientReferenceId?: string;
|
|
147
|
+
/** Whether to hide the header */
|
|
148
|
+
hideHeader?: boolean;
|
|
149
|
+
/** When true, disables URL parameter management for swap configuration */
|
|
150
|
+
disableUrlParamManagement?: boolean;
|
|
147
151
|
}
|
|
148
152
|
/**
|
|
149
153
|
* Props for the AnySpend NFT modal
|
|
@@ -20,6 +20,7 @@ export declare enum PanelView {
|
|
|
20
20
|
export declare function AnySpend(props: {
|
|
21
21
|
mode?: "page" | "modal";
|
|
22
22
|
defaultActiveTab?: "crypto" | "fiat";
|
|
23
|
+
sourceChainId?: number;
|
|
23
24
|
destinationTokenAddress?: string;
|
|
24
25
|
destinationTokenChainId?: number;
|
|
25
26
|
recipientAddress?: string;
|
|
@@ -34,4 +35,8 @@ export declare function AnySpend(props: {
|
|
|
34
35
|
}) => void;
|
|
35
36
|
onSuccess?: (txHash?: string) => void;
|
|
36
37
|
customUsdInputValues?: string[];
|
|
38
|
+
hideHeader?: boolean;
|
|
39
|
+
hideBottomNavigation?: boolean;
|
|
40
|
+
/** When true, disables URL parameter management for swap configuration */
|
|
41
|
+
disableUrlParamManagement?: boolean;
|
|
37
42
|
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -50,7 +50,7 @@ export function AnySpend(props) {
|
|
|
50
50
|
const fingerprintConfig = getFingerprintConfig();
|
|
51
51
|
return (_jsx(AnySpendFingerprintWrapper, { fingerprint: fingerprintConfig, children: _jsx(AnySpendInner, { ...props }) }));
|
|
52
52
|
}
|
|
53
|
-
function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode = "modal", defaultActiveTab = "crypto", loadOrder, hideTransactionHistoryButton, recipientAddress: recipientAddressFromProps, onTokenSelect, onSuccess, customUsdInputValues, }) {
|
|
53
|
+
function AnySpendInner({ sourceChainId, destinationTokenAddress, destinationTokenChainId, mode = "modal", defaultActiveTab = "crypto", loadOrder, hideTransactionHistoryButton, recipientAddress: recipientAddressFromProps, onTokenSelect, onSuccess, customUsdInputValues, hideHeader, hideBottomNavigation = false, disableUrlParamManagement = false, }) {
|
|
54
54
|
const searchParams = useSearchParamsSSR();
|
|
55
55
|
const router = useRouter();
|
|
56
56
|
const { partnerId } = useB3();
|
|
@@ -90,7 +90,7 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
|
|
|
90
90
|
// const [newRecipientAddress, setNewRecipientAddress] = useState("");
|
|
91
91
|
// const recipientInputRef = useRef<HTMLInputElement>(null);
|
|
92
92
|
// Get initial chain IDs from URL or defaults
|
|
93
|
-
const initialSrcChainId = parseInt(searchParams.get("fromChainId") || "0") || mainnet.id;
|
|
93
|
+
const initialSrcChainId = sourceChainId || parseInt(searchParams.get("fromChainId") || "0") || mainnet.id;
|
|
94
94
|
const initialDstChainId = parseInt(searchParams.get("toChainId") || "0") || (isBuyMode ? destinationTokenChainId : base.id);
|
|
95
95
|
// State for source chain/token selection
|
|
96
96
|
const [selectedSrcChainId, setSelectedSrcChainId] = useState(initialSrcChainId);
|
|
@@ -183,8 +183,8 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
|
|
|
183
183
|
}, [selectedDstToken.address, selectedDstToken.chainId]);
|
|
184
184
|
// Load swap configuration from URL on initial render
|
|
185
185
|
useEffect(() => {
|
|
186
|
-
// Skip if we've already processed the URL
|
|
187
|
-
if (initialUrlProcessed.current || loadOrder)
|
|
186
|
+
// Skip if we've already processed the URL, if we have an order to load, or if URL param management is disabled
|
|
187
|
+
if (initialUrlProcessed.current || loadOrder || disableUrlParamManagement)
|
|
188
188
|
return;
|
|
189
189
|
try {
|
|
190
190
|
const tabParam = searchParams.get("tab");
|
|
@@ -217,7 +217,7 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
|
|
|
217
217
|
}
|
|
218
218
|
// Mark that we've processed the initial URL
|
|
219
219
|
initialUrlProcessed.current = true;
|
|
220
|
-
}, [searchParams, loadOrder]);
|
|
220
|
+
}, [searchParams, loadOrder, disableUrlParamManagement]);
|
|
221
221
|
// Update URL when swap configuration changes - but not on initial load
|
|
222
222
|
const updateSwapParamsInURL = useCallback(() => {
|
|
223
223
|
// Skip if:
|
|
@@ -228,7 +228,8 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
|
|
|
228
228
|
activePanel !== PanelView.MAIN ||
|
|
229
229
|
!initialUrlProcessed.current ||
|
|
230
230
|
searchParams.has("orderId") ||
|
|
231
|
-
mode === "modal"
|
|
231
|
+
mode === "modal" ||
|
|
232
|
+
disableUrlParamManagement)
|
|
232
233
|
return;
|
|
233
234
|
// Create a representation of the current state
|
|
234
235
|
const currentState = {
|
|
@@ -288,6 +289,7 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
|
|
|
288
289
|
dstAmount,
|
|
289
290
|
router,
|
|
290
291
|
srcAmountOnRamp,
|
|
292
|
+
disableUrlParamManagement,
|
|
291
293
|
]);
|
|
292
294
|
// Update URL when relevant state changes - but only after initial render
|
|
293
295
|
useEffect(() => {
|
|
@@ -473,20 +475,20 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
|
|
|
473
475
|
setOrderId(orderId);
|
|
474
476
|
// setNewRecipientAddress("");
|
|
475
477
|
navigateToPanel(PanelView.ORDER_DETAILS, "forward");
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
478
|
+
if (!disableUrlParamManagement) {
|
|
479
|
+
// Debug: Check payment method before setting URL
|
|
480
|
+
console.log("Creating order - selectedCryptoPaymentMethod:", selectedCryptoPaymentMethod);
|
|
481
|
+
// Add orderId and payment method to URL for persistence
|
|
482
|
+
const params = new URLSearchParams(searchParams.toString()); // Preserve existing params
|
|
483
|
+
params.set("orderId", orderId);
|
|
484
|
+
if (effectiveCryptoPaymentMethod !== CryptoPaymentMethodType.NONE) {
|
|
485
|
+
params.set("cryptoPaymentMethod", effectiveCryptoPaymentMethod);
|
|
486
|
+
}
|
|
487
|
+
else {
|
|
488
|
+
console.log("Payment method is NONE, not setting in URL");
|
|
489
|
+
}
|
|
490
|
+
router.push(`${window.location.pathname}?${params.toString()}`);
|
|
487
491
|
}
|
|
488
|
-
console.log("Final URL params:", params.toString());
|
|
489
|
-
router.push(`${window.location.pathname}?${params.toString()}`);
|
|
490
492
|
},
|
|
491
493
|
onError: error => {
|
|
492
494
|
console.error(error);
|
|
@@ -499,11 +501,13 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
|
|
|
499
501
|
const orderId = data.data.id;
|
|
500
502
|
setOrderId(orderId);
|
|
501
503
|
navigateToPanel(PanelView.ORDER_DETAILS, "forward");
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
504
|
+
if (!disableUrlParamManagement) {
|
|
505
|
+
// Add orderId and payment method to URL for persistence
|
|
506
|
+
const params = new URLSearchParams(searchParams.toString());
|
|
507
|
+
params.set("orderId", orderId);
|
|
508
|
+
params.set("paymentMethod", "fiat");
|
|
509
|
+
router.push(`${window.location.pathname}?${params.toString()}`);
|
|
510
|
+
}
|
|
507
511
|
},
|
|
508
512
|
onError: error => {
|
|
509
513
|
console.error(error);
|
|
@@ -631,11 +635,13 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
|
|
|
631
635
|
type: "anySpendOrderHistory",
|
|
632
636
|
showBackButton: false,
|
|
633
637
|
});
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
638
|
+
if (!disableUrlParamManagement) {
|
|
639
|
+
// Remove orderId and paymentMethod from URL when going back to history
|
|
640
|
+
const params = new URLSearchParams(searchParams.toString());
|
|
641
|
+
params.delete("orderId");
|
|
642
|
+
params.delete("paymentMethod");
|
|
643
|
+
router.push(`${window.location.pathname}?${params.toString()}`);
|
|
644
|
+
}
|
|
639
645
|
};
|
|
640
646
|
// Handle crypto swap creation
|
|
641
647
|
const handleCryptoSwap = async (method) => {
|
|
@@ -744,22 +750,24 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
|
|
|
744
750
|
// const setDynamicModalContentType = useModalStore(state => state.setB3ModalContentType);
|
|
745
751
|
// Update useEffect for URL parameter to not override loadOrder
|
|
746
752
|
useEffect(() => {
|
|
747
|
-
if (loadOrder)
|
|
748
|
-
return; // Skip if we have a loadOrder
|
|
753
|
+
if (loadOrder || disableUrlParamManagement)
|
|
754
|
+
return; // Skip if we have a loadOrder or URL param management is disabled
|
|
749
755
|
const orderIdParam = searchParams.get("orderId");
|
|
750
756
|
if (orderIdParam) {
|
|
751
757
|
setOrderId(orderIdParam);
|
|
752
758
|
setActivePanel(PanelView.ORDER_DETAILS);
|
|
753
759
|
}
|
|
754
|
-
}, [searchParams, loadOrder]);
|
|
760
|
+
}, [searchParams, loadOrder, disableUrlParamManagement]);
|
|
755
761
|
const onSelectOrder = (selectedOrderId) => {
|
|
756
762
|
setOrderId(selectedOrderId);
|
|
757
763
|
navigateToPanel(PanelView.ORDER_DETAILS, "forward");
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
764
|
+
if (!disableUrlParamManagement) {
|
|
765
|
+
// Update URL with the new orderId and preserve existing parameters
|
|
766
|
+
const params = new URLSearchParams(searchParams.toString());
|
|
767
|
+
params.set("orderId", selectedOrderId);
|
|
768
|
+
// Keep existing paymentMethod if present
|
|
769
|
+
router.push(`${window.location.pathname}?${params.toString()}`);
|
|
770
|
+
}
|
|
763
771
|
};
|
|
764
772
|
// Save custom recipients to local storage when they change
|
|
765
773
|
useEffect(() => {
|
|
@@ -811,7 +819,7 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
|
|
|
811
819
|
// Reset payment methods when going back
|
|
812
820
|
resetPaymentMethods();
|
|
813
821
|
} })) }) }));
|
|
814
|
-
const mainView = (_jsxs("div", { className: "mx-auto flex w-[460px] max-w-full flex-col items-center gap-2 pt-5", children: [_jsxs("div", { className: "flex w-full max-w-full flex-col items-center gap-2 px-5", children: [isBuyMode && (_jsxs("div", { className: "mb-4 flex flex-col items-center gap-3 text-center", children: [selectedDstToken.metadata?.logoURI && (_jsx("div", { className: "relative", children: _jsx("img", { src: selectedDstToken.metadata.logoURI, alt: selectedDstToken.symbol, className: "border-as-stroke h-12 w-12 rounded-full border-2 shadow-md" }) })), _jsx("div", { children: _jsxs("h1", { className: "text-as-primary text-xl font-bold", children: ["Buy ", selectedDstToken.symbol] }) })] })), _jsx(TabSection, { activeTab: activeTab, setActiveTab: tab => {
|
|
822
|
+
const mainView = (_jsxs("div", { className: "mx-auto flex w-[460px] max-w-full flex-col items-center gap-2 pt-5", children: [_jsxs("div", { className: "flex w-full max-w-full flex-col items-center gap-2 px-5", children: [isBuyMode && !hideHeader && (_jsxs("div", { className: "mb-4 flex flex-col items-center gap-3 text-center", children: [selectedDstToken.metadata?.logoURI && (_jsx("div", { className: "relative", children: _jsx("img", { src: selectedDstToken.metadata.logoURI, alt: selectedDstToken.symbol, className: "border-as-stroke h-12 w-12 rounded-full border-2 shadow-md" }) })), _jsx("div", { children: _jsxs("h1", { className: "text-as-primary text-xl font-bold", children: ["Buy ", selectedDstToken.symbol] }) })] })), _jsx(TabSection, { activeTab: activeTab, setActiveTab: tab => {
|
|
815
823
|
setActiveTab(tab);
|
|
816
824
|
// Reset payment methods when switching tabs
|
|
817
825
|
resetPaymentMethods();
|
|
@@ -866,21 +874,23 @@ function AnySpendInner({ destinationTokenAddress, destinationTokenChainId, mode
|
|
|
866
874
|
type: "anySpend",
|
|
867
875
|
});
|
|
868
876
|
}
|
|
869
|
-
}, children: mode !== "page" && _jsx(BottomNavigation, {}) }) })] }));
|
|
877
|
+
}, children: mode !== "page" && !hideBottomNavigation && _jsx(BottomNavigation, {}) }) })] }));
|
|
870
878
|
const onrampPaymentView = (_jsx(PanelOnrampPayment, { srcAmountOnRamp: srcAmountOnRamp, recipientName: recipientName || undefined, recipientAddress: effectiveRecipientAddress, isBuyMode: isBuyMode, destinationTokenChainId: destinationTokenChainId, destinationTokenAddress: destinationTokenAddress, selectedDstChainId: selectedDstChainId, selectedDstToken: selectedDstToken, orderType: "swap", anyspendQuote: anyspendQuote, globalAddress: globalAddress, onOrderCreated: orderId => {
|
|
871
879
|
setOrderId(orderId);
|
|
872
880
|
navigateToPanel(PanelView.ORDER_DETAILS, "forward");
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
881
|
+
if (!disableUrlParamManagement) {
|
|
882
|
+
// Add orderId and payment method to URL for persistence
|
|
883
|
+
const params = new URLSearchParams(searchParams.toString()); // Preserve existing params
|
|
884
|
+
params.set("orderId", orderId);
|
|
885
|
+
// For fiat payments, the payment method is always fiat (but we use the active tab context)
|
|
886
|
+
if (activeTab === "fiat") {
|
|
887
|
+
params.set("paymentMethod", "fiat");
|
|
888
|
+
}
|
|
889
|
+
else if (selectedCryptoPaymentMethod !== CryptoPaymentMethodType.NONE) {
|
|
890
|
+
params.set("paymentMethod", selectedCryptoPaymentMethod);
|
|
891
|
+
}
|
|
892
|
+
router.push(`${window.location.pathname}?${params.toString()}`);
|
|
882
893
|
}
|
|
883
|
-
router.push(`${window.location.pathname}?${params.toString()}`);
|
|
884
894
|
}, onBack: navigateBack, recipientEnsName: globalWallet?.ensName, recipientImageUrl: globalWalletImage }));
|
|
885
895
|
const recipientSelectionView = (_jsx(RecipientSelection, { initialValue: effectiveRecipientAddress || "", onBack: navigateBack, onConfirm: address => {
|
|
886
896
|
// User manually selected a recipient
|
|
@@ -26,7 +26,7 @@ export interface AnySpendCustomExactInProps {
|
|
|
26
26
|
customUsdInputValues?: string[];
|
|
27
27
|
preferEoa?: boolean;
|
|
28
28
|
customExactInConfig?: CustomExactInConfig;
|
|
29
|
-
orderType?: "hype_duel" | "custom_exact_in";
|
|
29
|
+
orderType?: "hype_duel" | "custom_exact_in" | "swap";
|
|
30
30
|
minDestinationAmount?: number;
|
|
31
31
|
header?: ({ anyspendPrice, isLoadingAnyspendPrice, }: {
|
|
32
32
|
anyspendPrice: GetQuoteResponse | undefined;
|
|
@@ -35,7 +35,6 @@ function AnySpendCustomExactInInner({ loadOrder, mode = "modal", recipientAddres
|
|
|
35
35
|
paymentType,
|
|
36
36
|
recipientAddress,
|
|
37
37
|
loadOrder,
|
|
38
|
-
isDepositMode: true,
|
|
39
38
|
onTransactionSuccess: onSuccess,
|
|
40
39
|
sourceTokenAddress,
|
|
41
40
|
sourceTokenChainId,
|
|
@@ -176,7 +175,7 @@ function AnySpendCustomExactInInner({ loadOrder, mode = "modal", recipientAddres
|
|
|
176
175
|
}
|
|
177
176
|
};
|
|
178
177
|
const headerContent = header ? (header({ anyspendPrice: anyspendQuote, isLoadingAnyspendPrice: isLoadingAnyspendQuote })) : (_jsx("div", { className: "mb-4 flex flex-col items-center gap-3 text-center", children: _jsxs("div", { children: [_jsx("h1", { className: "text-as-primary text-xl font-bold", children: actionLabel }), _jsx("p", { className: "text-as-secondary text-sm", children: "Pay from any token to execute a custom exact-in transaction." })] }) }));
|
|
179
|
-
const mainView = (_jsxs("div", { className: "mx-auto flex w-[460px] max-w-full flex-col items-center gap-2", children: [headerContent, _jsx("div", { className: "relative flex w-full max-w-[calc(100vw-32px)] flex-col gap-2", children: _jsxs("div", { className: "relative flex w-full max-w-[calc(100vw-32px)] flex-col gap-2", children: [paymentType === "crypto" ? (_jsx(CryptoPaySection, { selectedSrcChainId: selectedSrcChainId, setSelectedSrcChainId: setSelectedSrcChainId, selectedSrcToken: selectedSrcToken, setSelectedSrcToken: setSelectedSrcToken, srcAmount: srcAmount, setSrcAmount: setSrcAmount, isSrcInputDirty: isSrcInputDirty, setIsSrcInputDirty: setIsSrcInputDirty, selectedCryptoPaymentMethod: effectiveCryptoPaymentMethod, onSelectCryptoPaymentMethod: () => setActivePanel(PanelView.CRYPTO_PAYMENT_METHOD), anyspendQuote: anyspendQuote, onTokenSelect: onTokenSelect })) : (_jsx(motion.div, { initial: { opacity: 0, y: 20, filter: "blur(10px)" }, animate: { opacity: 1, y: 0, filter: "blur(0px)" }, transition: { duration: 0.3, delay: 0, ease: "easeInOut" }, children: _jsx(PanelOnramp, { srcAmountOnRamp: srcAmount, setSrcAmountOnRamp: setSrcAmount, selectedPaymentMethod: selectedFiatPaymentMethod, setActivePanel: setActivePanel, _recipientAddress: selectedRecipientOrDefault, destinationToken: selectedDstToken, destinationChainId: selectedDstChainId, dstTokenSymbol: DESTINATION_TOKEN_DETAILS.SYMBOL, hideDstToken: true, destinationAmount: dstAmount, onDestinationTokenChange: () => { }, onDestinationChainChange: () => { }, fiatPaymentMethodIndex: PanelView.FIAT_PAYMENT_METHOD, recipientSelectionPanelIndex: PanelView.RECIPIENT_SELECTION, anyspendQuote: anyspendQuote, onShowPointsDetail: () => setActivePanel(PanelView.POINTS_DETAIL), onShowFeeDetail: () => setActivePanel(PanelView.FEE_DETAIL), customUsdInputValues: customUsdInputValues }) })), _jsx("div", { className: cn("relative -my-1 flex h-0 items-center justify-center", paymentType === "fiat" && "hidden"), children: _jsx(Button, { variant: "ghost", className: cn("swap-direction-button border-as-stroke bg-as-surface-primary z-10 h-10 w-10 cursor-default rounded-xl border-2 sm:h-8 sm:w-8 sm:rounded-xl"), children: _jsx("div", { className: "relative flex items-center justify-center transition-opacity", children: _jsx(ArrowDown, { className: "text-as-primary/50 h-5 w-5" }) }) }) }), paymentType === "crypto" && (_jsx(CryptoReceiveSection, { isDepositMode: false, isBuyMode: true, effectiveRecipientAddress: selectedRecipientOrDefault, recipientName: recipientName || undefined, onSelectRecipient: () => setActivePanel(PanelView.RECIPIENT_SELECTION), dstAmount: dstAmount, dstToken: selectedDstToken, dstTokenSymbol: DESTINATION_TOKEN_DETAILS.SYMBOL, dstTokenLogoURI: DESTINATION_TOKEN_DETAILS.LOGO_URI, selectedDstChainId: selectedDstChainId, setSelectedDstChainId: () => { }, setSelectedDstToken: () => { }, isSrcInputDirty: isSrcInputDirty, onChangeDstAmount: value => {
|
|
178
|
+
const mainView = (_jsxs("div", { className: "anyspend-custom-exact-in-container mx-auto flex w-[460px] max-w-full flex-col items-center gap-2", children: [headerContent, _jsx("div", { className: "relative flex w-full max-w-[calc(100vw-32px)] flex-col gap-2", children: _jsxs("div", { className: "relative flex w-full max-w-[calc(100vw-32px)] flex-col gap-2", children: [paymentType === "crypto" ? (_jsx(CryptoPaySection, { selectedSrcChainId: selectedSrcChainId, setSelectedSrcChainId: setSelectedSrcChainId, selectedSrcToken: selectedSrcToken, setSelectedSrcToken: setSelectedSrcToken, srcAmount: srcAmount, setSrcAmount: setSrcAmount, isSrcInputDirty: isSrcInputDirty, setIsSrcInputDirty: setIsSrcInputDirty, selectedCryptoPaymentMethod: effectiveCryptoPaymentMethod, onSelectCryptoPaymentMethod: () => setActivePanel(PanelView.CRYPTO_PAYMENT_METHOD), anyspendQuote: anyspendQuote, onTokenSelect: onTokenSelect })) : (_jsx(motion.div, { initial: { opacity: 0, y: 20, filter: "blur(10px)" }, animate: { opacity: 1, y: 0, filter: "blur(0px)" }, transition: { duration: 0.3, delay: 0, ease: "easeInOut" }, children: _jsx(PanelOnramp, { srcAmountOnRamp: srcAmount, setSrcAmountOnRamp: setSrcAmount, selectedPaymentMethod: selectedFiatPaymentMethod, setActivePanel: setActivePanel, _recipientAddress: selectedRecipientOrDefault, destinationToken: selectedDstToken, destinationChainId: selectedDstChainId, dstTokenSymbol: DESTINATION_TOKEN_DETAILS.SYMBOL, hideDstToken: true, destinationAmount: dstAmount, onDestinationTokenChange: () => { }, onDestinationChainChange: () => { }, fiatPaymentMethodIndex: PanelView.FIAT_PAYMENT_METHOD, recipientSelectionPanelIndex: PanelView.RECIPIENT_SELECTION, anyspendQuote: anyspendQuote, onShowPointsDetail: () => setActivePanel(PanelView.POINTS_DETAIL), onShowFeeDetail: () => setActivePanel(PanelView.FEE_DETAIL), customUsdInputValues: customUsdInputValues }) })), _jsx("div", { className: cn("relative -my-1 flex h-0 items-center justify-center", paymentType === "fiat" && "hidden"), children: _jsx(Button, { variant: "ghost", className: cn("swap-direction-button border-as-stroke bg-as-surface-primary z-10 h-10 w-10 cursor-default rounded-xl border-2 sm:h-8 sm:w-8 sm:rounded-xl"), children: _jsx("div", { className: "relative flex items-center justify-center transition-opacity", children: _jsx(ArrowDown, { className: "text-as-primary/50 h-5 w-5" }) }) }) }), paymentType === "crypto" && (_jsx(CryptoReceiveSection, { isDepositMode: false, isBuyMode: true, effectiveRecipientAddress: selectedRecipientOrDefault, recipientName: recipientName || undefined, onSelectRecipient: () => setActivePanel(PanelView.RECIPIENT_SELECTION), dstAmount: dstAmount, dstToken: selectedDstToken, dstTokenSymbol: DESTINATION_TOKEN_DETAILS.SYMBOL, dstTokenLogoURI: DESTINATION_TOKEN_DETAILS.LOGO_URI, selectedDstChainId: selectedDstChainId, setSelectedDstChainId: () => { }, setSelectedDstToken: () => { }, isSrcInputDirty: isSrcInputDirty, onChangeDstAmount: value => {
|
|
180
179
|
setIsSrcInputDirty(false);
|
|
181
180
|
setSrcAmount(value);
|
|
182
181
|
}, anyspendQuote: anyspendQuote, onShowPointsDetail: () => setActivePanel(PanelView.POINTS_DETAIL), onShowFeeDetail: () => setActivePanel(PanelView.FEE_DETAIL) }))] }) }), _jsx(motion.div, { initial: { opacity: 0, y: 20, filter: "blur(10px)" }, animate: { opacity: 1, y: 0, filter: "blur(0px)" }, transition: { duration: 0.3, delay: 0.2, ease: "easeInOut" }, className: cn("mt-4 flex w-full max-w-[460px] flex-col gap-2"), children: _jsx(ShinyButton, { accentColor: "hsl(var(--as-brand))", disabled: btnInfo.disable, onClick: onMainButtonClick, className: cn("as-main-button relative w-full", btnInfo.error ? "!bg-as-red" : btnInfo.disable ? "!bg-as-on-surface-2" : "!bg-as-brand"), textClassName: cn(btnInfo.error ? "text-white" : btnInfo.disable ? "text-as-secondary" : "text-white"), children: _jsxs("div", { className: "flex items-center justify-center gap-2", children: [btnInfo.loading && _jsx(Loader2, { className: "h-4 w-4 animate-spin" }), btnInfo.text] }) }) }), mainFooter ? mainFooter : null] }));
|