diff --git a/global-env.d.ts b/global-env.d.ts new file mode 100644 index 0000000..d199407 --- /dev/null +++ b/global-env.d.ts @@ -0,0 +1,3 @@ +interface Window { + ethereum: any; +} diff --git a/src/components/AddNetworkButton.tsx b/src/components/AddNetworkButton.tsx index 68ca89d..dd8cac8 100644 --- a/src/components/AddNetworkButton.tsx +++ b/src/components/AddNetworkButton.tsx @@ -1,65 +1,88 @@ -import { useEffect, useState } from "react"; - -import { addNetwork, isNetworkAdded, NetworkType } from "@/utils/add-network"; +import { CheckIcon } from "@/icons/Check"; +import { ConnectedPulse } from "@/icons/ConnectedPulse"; +import { + networkParams, + NetworkType, + useNetwork, + UseNetworkResponse, +} from "@/utils/networks"; import { Button } from "./Button"; interface AddNetworkButtonProps { network: NetworkType; + heading: string; } -export const AddNetworkButton = ({ network }: AddNetworkButtonProps) => { - const [isAdded, setIsAdded] = useState(false); - - useEffect(() => { - const checkNetwork = async () => { - if ((window as any).ethereum) { - const added = await isNetworkAdded(network); - setIsAdded(added); - } - }; +export const AddNetworkButton = ({ + network, + heading, +}: AddNetworkButtonProps) => { + const { isWalletInstalled, isAdded, isSelected, addNetwork, selectNetwork } = + useNetwork(network); - checkNetwork(); - - if ((window as any).ethereum) { - (window as any).ethereum.on("chainChanged", checkNetwork); - } + return ( +
+
+

+ {heading} + {isSelected && } + +

+ +
+
+ ); +}; +const AddNetworkButtonContent = ({ + isWalletInstalled, + isAdded, + isSelected, + addNetwork, + selectNetwork, + network, +}: UseNetworkResponse & { network: NetworkType }) => { + if (!isWalletInstalled) { + return

No wallet connected

; + } - return () => { - if ((window as any).ethereum) { - (window as any).ethereum.removeListener("chainChanged", checkNetwork); - } - }; - }, [network]); + if (isAdded && isSelected) { + return ( + + Network added & selected. + + ); + } - const networkName = network === "mainnet" ? "Ink Mainnet" : "Ink Sepolia"; + if (isAdded) { + return ( + +

Network added.

+

+ Click here to select it. +

+
+ ); + } return ( -
- {isAdded ? ( -
- - - - {networkName} Network Added -
- ) : ( -
- -
- )} -
+ ); }; diff --git a/src/components/Button.tsx b/src/components/Button.tsx index 173a482..4d4d7b0 100644 --- a/src/components/Button.tsx +++ b/src/components/Button.tsx @@ -4,23 +4,26 @@ import clsx from "clsx"; interface ButtonProps { variant: "primary" | "secondary"; onClick?: () => void; + className?: string; } export const Button: React.FC> = ({ children, variant, onClick, + className, }) => { return (