Skip to content

Commit 9d9e583

Browse files
committed
fix(checkout): Allow targetChainId to use overrides
1 parent d917f07 commit 9d9e583

3 files changed

Lines changed: 51 additions & 31 deletions

File tree

packages/checkout/widgets-lib/src/widgets/connect/ConnectWidget.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,7 @@ export default function ConnectWidget({
114114

115115
const { identify, page, user } = useAnalytics();
116116

117-
let targetChain = targetChainId;
118-
if (!targetChain) {
119-
targetChain = checkout.config.isProduction
120-
? ChainId.IMTBL_ZKEVM_MAINNET
121-
: ChainId.IMTBL_ZKEVM_TESTNET;
122-
}
117+
const targetChain = targetChainId ?? checkout.config.l2ChainId;
123118

124119
useEffect(() => {
125120
if (!browserProvider) return;

packages/checkout/widgets-lib/src/widgets/connect/ConnectWidgetRoot.tsx

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
import React, { Suspense } from 'react';
22
import {
3-
ChainId,
43
ConnectWidgetParams, IMTBLWidgetEvents, WidgetProperties, WidgetType,
54
} from '@imtbl/checkout-sdk';
6-
import { Environment } from '@imtbl/config';
75
import { ThemeProvider } from '../../components/ThemeProvider/ThemeProvider';
86
import { CustomAnalyticsProvider } from '../../context/analytics-provider/CustomAnalyticsProvider';
97
import { LoadingView } from '../../views/loading/LoadingView';
@@ -28,29 +26,15 @@ export class Connect extends Base<WidgetType.CONNECT> {
2826
protected getValidatedParameters(params: ConnectWidgetParams): ConnectWidgetParams {
2927
const validatedParams = params;
3028

31-
// validating targetChainId per environment
32-
if (!params.targetChainId
33-
&& this.checkout.config.isProduction) {
34-
validatedParams.targetChainId = ChainId.IMTBL_ZKEVM_MAINNET;
35-
} else if (params.targetChainId
36-
&& this.checkout.config.isProduction
37-
&& (params.targetChainId !== ChainId.ETHEREUM && params.targetChainId !== ChainId.IMTBL_ZKEVM_MAINNET)
38-
) {
39-
// eslint-disable-next-line max-len, no-console
40-
console.warn(`Cannot set targetChainId to ${params.targetChainId} in ${Environment.PRODUCTION} environment, defaulting to ${getChainNameById(ChainId.IMTBL_ZKEVM_MAINNET)}, chainId ${ChainId.IMTBL_ZKEVM_MAINNET}`);
41-
validatedParams.targetChainId = ChainId.IMTBL_ZKEVM_MAINNET;
42-
}
29+
const { l1ChainId, l2ChainId, environment } = this.checkout.config;
4330

44-
if (!params.targetChainId
45-
&& this.checkout.config.environment === Environment.SANDBOX) {
46-
validatedParams.targetChainId = ChainId.IMTBL_ZKEVM_TESTNET;
47-
} else if (params.targetChainId
48-
&& this.checkout.config.environment === Environment.SANDBOX
49-
&& (params.targetChainId !== ChainId.SEPOLIA && params.targetChainId !== ChainId.IMTBL_ZKEVM_TESTNET)
50-
) {
31+
// validating targetChainId per environment
32+
if (!params.targetChainId) {
33+
validatedParams.targetChainId = l2ChainId;
34+
} else if (![l1ChainId, l2ChainId].includes(params.targetChainId)) {
5135
// eslint-disable-next-line max-len, no-console
52-
console.warn(`Cannot set targetChainId to ${params.targetChainId} in ${Environment.SANDBOX} environment, defaulting to ${getChainNameById(ChainId.IMTBL_ZKEVM_TESTNET)}, chainId ${ChainId.IMTBL_ZKEVM_TESTNET}`);
53-
validatedParams.targetChainId = ChainId.IMTBL_ZKEVM_TESTNET;
36+
console.warn(`Cannot set targetChainId to ${params.targetChainId} in ${environment} environment, defaulting to ${getChainNameById(l2ChainId)}, chainId ${l2ChainId}`);
37+
validatedParams.targetChainId = l2ChainId;
5438
}
5539

5640
return params;

packages/checkout/widgets-sample-app/src/components/ui/connect/connect.tsx

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,53 @@
11
import { useCallback, useEffect, useMemo, useState } from 'react';
22

3-
import { Checkout, ConnectEventType, WalletProviderRdns, WidgetTheme, WidgetType } from '@imtbl/checkout-sdk';
3+
import { ChainId, ChainName, ChainSlug, Checkout, CheckoutModuleConfiguration, ConnectEventType, WalletProviderRdns, WidgetTheme, WidgetType } from '@imtbl/checkout-sdk';
44
import { Environment } from '@imtbl/config';
55
import { WidgetsFactory } from '@imtbl/checkout-widgets';
66

7+
const ZKEVM_NATIVE_TOKEN = {
8+
name: "IMX",
9+
symbol: "IMX",
10+
decimals: 18,
11+
address: "native",
12+
};
13+
14+
const DEV_CHAIN_ID_NETWORK_MAP = new Map([
15+
[
16+
ChainId.SEPOLIA,
17+
{
18+
chainIdHex: `0x${ChainId.SEPOLIA.toString(16)}`,
19+
chainName: ChainName.SEPOLIA,
20+
rpcUrls: ["https://checkout-api.dev.immutable.com/v1/rpc/eth-sepolia"],
21+
nativeCurrency: {
22+
name: "Sep Eth",
23+
symbol: "ETH",
24+
decimals: 18,
25+
},
26+
blockExplorerUrls: ["https://sepolia.etherscan.io/"],
27+
},
28+
],
29+
[
30+
ChainId.IMTBL_ZKEVM_DEVNET,
31+
{
32+
chainIdHex: `0x${ChainId.IMTBL_ZKEVM_DEVNET.toString(16)}`,
33+
chainName: ChainName.IMTBL_ZKEVM_DEVNET,
34+
rpcUrls: ["https://rpc.dev.immutable.com"],
35+
nativeCurrency: ZKEVM_NATIVE_TOKEN,
36+
},
37+
],
38+
]);
39+
40+
const overrides: CheckoutModuleConfiguration["overrides"] = {
41+
baseUrl: "https://api.dev.immutable.com",
42+
chainSlug: ChainSlug.IMTBL_ZKEVM_DEVNET,
43+
l2ChainId: ChainId.IMTBL_ZKEVM_DEVNET,
44+
networkMap: DEV_CHAIN_ID_NETWORK_MAP,
45+
remoteConfigEndpoint: "https://checkout-api.dev.immutable.com",
46+
};
47+
748
const CONNECT_TARGET_ID = "connect-widget-target";
849
function ConnectUI() {
9-
const checkout = useMemo(() => new Checkout({ baseConfig: { environment: Environment.SANDBOX } }), []);
50+
const checkout = useMemo(() => new Checkout({ baseConfig: { environment: Environment.SANDBOX }, overrides }), []);
1051
const [factory, setFactory] = useState<ImmutableCheckoutWidgets.WidgetsFactory>();
1152
const connect = useMemo(() => {
1253
if(!factory) return;

0 commit comments

Comments
 (0)