import { useEffect } from "react"; import { WidgetProps } from "../types"; import { useDispatch, useSelector } from "react-redux"; // context import { useContext } from "react"; import { CustomizeContext } from "../providers/CustomizeProvider"; import { Web3Context } from "../providers/Web3Provider"; // components import { Header } from "./common/Header"; import { Input } from "./Input"; import { Output } from "./Output"; import { RouteDetails } from "./RouteDetails"; import { Settings } from "./Settings"; import { TxModal } from "./TxModal"; import { PendingTransactions } from "./PendingTransactions"; import { ErrorModal } from "./common/ErrorModal"; import { Refuel } from "./Refuel"; import { SettingsModal } from "./Settings/SettingsModal"; import { OpRewards, OpRewardsModal } from "./OpRewards"; // hooks import { useChains } from "../hooks/apis"; import { useCustomSettings } from "../hooks/useCustomSettings"; import { CreditCard, Edit } from "react-feather"; import { useTransition } from "@react-spring/web"; import { setActiveRoute, setError, setIsSettingsModalOpen, setIsTxModalOpen, } from "../state/modals"; import { setSourceAmount } from "../state/amountSlice"; // Main Widget -> Base file. export const Widget = (props: WidgetProps) => { const { customize, title = props?.enableSameChainSwaps ? "Bridge & Swap" : "Bridge", } = props; const customSettings = useContext(CustomizeContext); const web3Context = useContext(Web3Context); const dispatch = useDispatch(); // Hook to get all supported chains. useChains(); // Hook to set default settings in place, default from chain and to chain etc etc. useCustomSettings(props); // run when the props are changed useEffect(() => { // If border radius passed is greater than 1.2, set it to 1.2. Default value is 1 const _borderRadius = customize?.borderRadius !== undefined ? customize?.borderRadius > 1.2 ? 1.2 : customize?.borderRadius : 1; customSettings.setCustomization({ ...customSettings.customization, ...customize, borderRadius: _borderRadius, }); // settings web3Provider data async function fetchData() { try { const signer = await props.provider.getSigner(); const address = await signer.getAddress(); const network = await props.provider.getNetwork(); web3Context.setweb3Provider({ userAddress: address, networkId: Number(network?.chainId), signer, provider: props.provider, }); } catch (e) { console.log("Error", e); } } props?.provider && fetchData(); }, [props]); // Customisation Settings for the widget. const { responsiveWidth, width, borderRadius } = customSettings.customization; const widgetWidth = responsiveWidth ? "100%" : width > 360 ? width : 360; const isTxModalOpen = useSelector((state: any) => state.modals.isTxModalOpen); const transitions = useTransition(isTxModalOpen, { from: { y: "100%" }, enter: { y: "0" }, leave: { y: "100%" }, delay: 300, config: { duration: 300 }, }); // resetting states on unmount useEffect(() => { return () => { dispatch(setIsTxModalOpen(false)); dispatch(setActiveRoute(null)); dispatch(setSourceAmount(null)); dispatch(setError(null)); }; }, []); return (
{!props?.provider ? ( {" "} Please connect your wallet ) : ( <> )}
{props.enableRefuel && ( )}
{transitions( (style, item) => item && ( ) )}
); }; const SingleTxMessage = () => { const singleTxOnly = useSelector((state: any) => state.quotes.singleTxOnly); // this state changes on user input const singleTxOnlyFromDev = useSelector( (state: any) => state.customSettings.singleTxOnly ); // this is set by the developer in the plugin config const sourceChainId = useSelector( (state: any) => state.networks.sourceChainId ); const destChainId = useSelector((state: any) => state.networks.destChainId); const dispatch = useDispatch(); function openSettingsModal() { dispatch(setIsSettingsModalOpen(true)); } if (singleTxOnlyFromDev) return null; if (!singleTxOnly || sourceChainId === destChainId) return

; // to prevent the layout shift return (

Showing single transaction routes only

); };