From 35f6206aa16c90d9bdaf1619d6229403f3ceb045 Mon Sep 17 00:00:00 2001 From: ink-victor <171172553+ink-victor@users.noreply.github.com> Date: Thu, 26 Dec 2024 06:18:49 -0500 Subject: [PATCH] feat: ink-701 add ink network buttons --- global-env.d.ts | 3 + src/components/AddNetworkButton.tsx | 125 ++++++++++++++++----------- src/components/Button.tsx | 9 +- src/icons/Check.tsx | 19 ++++ src/icons/ConnectedPulse.tsx | 12 +++ src/pages/general/connect-wallet.mdx | 25 +++--- src/utils/add-network.ts | 55 ------------ src/utils/networks.ts | 122 ++++++++++++++++++++++++++ 8 files changed, 247 insertions(+), 123 deletions(-) create mode 100644 global-env.d.ts create mode 100644 src/icons/Check.tsx create mode 100644 src/icons/ConnectedPulse.tsx delete mode 100644 src/utils/add-network.ts create mode 100644 src/utils/networks.ts diff --git a/global-env.d.ts b/global-env.d.ts new file mode 100644 index 00000000..d1994071 --- /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 68ca89d3..dd8cac80 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 173a482e..4d4d7b01 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 (