import React, { Suspense } from 'react'; import { ChainId, IMTBLWidgetEvents, SwapDirection, SwapWidgetParams, WidgetConfiguration, WidgetProperties, WidgetTheme, WidgetType, } from '@imtbl/checkout-sdk'; import { Base } from '../BaseWidgetRoot'; import { ConnectLoader, ConnectLoaderParams } from '../../components/ConnectLoader/ConnectLoader'; import { isValidAddress, isValidAmount, isValidWalletProvider } from '../../lib/validations/widgetValidators'; import { ThemeProvider } from '../../components/ThemeProvider/ThemeProvider'; import { LoadingView } from '../../views/loading/LoadingView'; import { HandoverProvider } from '../../context/handover-context/HandoverProvider'; import { sendSwapWidgetCloseEvent } from './SwapWidgetEvents'; import i18n from '../../i18n'; const SwapWidget = React.lazy(() => import('./SwapWidget')); export class Swap extends Base { protected eventTopic: IMTBLWidgetEvents = IMTBLWidgetEvents.IMTBL_SWAP_WIDGET_EVENT; protected getValidatedProperties( { config }: WidgetProperties, ): WidgetProperties { let validatedConfig: WidgetConfiguration | undefined; if (config) { validatedConfig = config; if (config.theme === WidgetTheme.LIGHT) validatedConfig.theme = WidgetTheme.LIGHT; else validatedConfig.theme = WidgetTheme.DARK; } return { config: validatedConfig, }; } protected getValidatedParameters(params: SwapWidgetParams): SwapWidgetParams { const validatedParams = params; if (!isValidWalletProvider(params.walletProviderName)) { // eslint-disable-next-line no-console console.warn('[IMTBL]: invalid "walletProviderName" widget input'); validatedParams.walletProviderName = undefined; } if (!isValidAmount(params.amount)) { // eslint-disable-next-line no-console console.warn('[IMTBL]: invalid "amount" widget input'); validatedParams.amount = ''; } if (!isValidAddress(params.fromTokenAddress)) { // eslint-disable-next-line no-console console.warn('[IMTBL]: invalid "fromTokenAddress" widget input'); validatedParams.fromTokenAddress = ''; } if (!isValidAddress(params.toTokenAddress)) { // eslint-disable-next-line no-console console.warn('[IMTBL]: invalid "toTokenAddress" widget input'); validatedParams.toTokenAddress = ''; } if (params.autoProceed) { validatedParams.autoProceed = true; } return validatedParams; } protected render() { if (!this.reactRoot) return; const { t } = i18n; const connectLoaderParams: ConnectLoaderParams = { targetChainId: this.checkout.config.isProduction ? ChainId.IMTBL_ZKEVM_MAINNET : ChainId.IMTBL_ZKEVM_TESTNET, walletProviderName: this.parameters.walletProviderName, browserProvider: this.browserProvider, checkout: this.checkout, allowedChains: [this.checkout.config.l2ChainId], allowlistWalletRdns: undefined, }; this.reactRoot!.render( sendSwapWidgetCloseEvent(window)} > }> , ); } }