import React, { FC, Fragment, PropsWithChildren, useEffect, useState } from "react";
import { useConfig } from "@usedapp/core";
import { useSwitchNetwork } from "@gooddollar/web3sdk-v2";
import { Text } from "native-base";
import BasicStyledModal from "./BasicStyledModal";
import { LearnButton } from "../../buttons";
const SwitchChainBody = ({ networkName }: { networkName: string | undefined }) => (
To complete this action, switch to {networkName} in your wallet.
);
/**
* A modal to wrap your component or page with and show a modal re-active to switchChain requests
* it assumes you have already wrapped your app with the Web3Provider out of the @gooddollar/sdk-v2 package
* @param {boolean} switching indicating if there is a pending switch request triggered
* @param children
* @returns JSX.Element
*/
export const SwitchChainModal: FC = ({ children, ...props }) => {
const config = useConfig();
const [requestedChain, setRequestedChain] = useState(0);
const { setOnSwitchNetwork } = useSwitchNetwork();
const [show, setShow] = useState(false);
useEffect(() => {
if (setOnSwitchNetwork) {
setOnSwitchNetwork(() => async (chainId: number, afterSwitch: any) => {
if (afterSwitch) {
setShow(false);
} else {
setRequestedChain(chainId);
setShow(true);
}
});
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [setOnSwitchNetwork, setShow]);
const { chainName: networkName } = config.networks?.find(({ chainId }) => chainId === requestedChain) ?? {};
return (
}
show={show}
onClose={() => setShow(false)}
type="learn"
footer={}
withCloseButton
/>
{children}
);
};