From 9a8cacf5bae7f5712f9de794cd30a5fb6ca8c5db Mon Sep 17 00:00:00 2001 From: abbylow Date: Wed, 16 Aug 2023 20:07:07 +0800 Subject: [PATCH 1/8] feat(bridge): reset token amount after submission (#151) --- apps/bridge/src/components/bridge/dialogue/index.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/bridge/src/components/bridge/dialogue/index.tsx b/apps/bridge/src/components/bridge/dialogue/index.tsx index 9eaaebbc..e6cc1dff 100644 --- a/apps/bridge/src/components/bridge/dialogue/index.tsx +++ b/apps/bridge/src/components/bridge/dialogue/index.tsx @@ -44,6 +44,7 @@ export default function Dialogue({ setTx2Hash, setSafeChains, isCTAPageOpenRef: isOpenRef, + setSelectedTokenAmount, } = useContext(StateContext); const reset = () => { @@ -56,6 +57,10 @@ export default function Dialogue({ setCTAPage(CTAPages.Default); // restore safeChains to selected chain setSafeChains([chainId]); + // reset selected token amount + if (ctaPage !== CTAPages.Default) { + setSelectedTokenAmount(""); + } }; const closeModalAndReset = () => { From 16c20be32e4d9b9c2797085bd3fcd383b7cf51b8 Mon Sep 17 00:00:00 2001 From: abbylow Date: Fri, 18 Aug 2023 15:30:46 +0800 Subject: [PATCH 2/8] feat(migrator): halted msg updated (#154) --- .../src/components/converter/ErrorMsg.tsx | 15 ++++++++++++++- apps/converter/src/config/constants.ts | 5 ++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/apps/converter/src/components/converter/ErrorMsg.tsx b/apps/converter/src/components/converter/ErrorMsg.tsx index ddd66cee..0346f7d9 100644 --- a/apps/converter/src/components/converter/ErrorMsg.tsx +++ b/apps/converter/src/components/converter/ErrorMsg.tsx @@ -2,7 +2,7 @@ import { useContext, useEffect } from "react"; import { Typography } from "@mantle/ui"; import StateContext from "@providers/stateContext"; -import { ErrorMessages } from "@config/constants"; +import { ErrorMessages, migrationPolicyUrl } from "@config/constants"; export default function ErrorMsg({ halted }: { halted: boolean }) { const { errorMsg, setErrorMsg } = useContext(StateContext); @@ -21,6 +21,19 @@ export default function ErrorMsg({ halted }: { halted: boolean }) { return ( {errorMsg} + {errorMsg === ErrorMessages.HALTED && ( + <> + + here + + . + + )} ); } diff --git a/apps/converter/src/config/constants.ts b/apps/converter/src/config/constants.ts index 9211bbcd..0b1ca728 100644 --- a/apps/converter/src/config/constants.ts +++ b/apps/converter/src/config/constants.ts @@ -328,8 +328,11 @@ export const DELEGATION_URL: string = "https://delegatevote.mantle.xyz/"; export enum ErrorMessages { INSUFFICIENT_GAS = "You do not have enough gas to cover the transaction cost.", - HALTED = "Migration halted. Please check again later.", + HALTED = "Migration halted. See forum post ", } export const isComingSoon = process.env.NEXT_PUBLIC_IS_COMING_SOON === "true" || false; + +export const migrationPolicyUrl = + "https://forum.mantle.xyz/t/clarification-of-bit-to-mnt-migration-policy-and-service/7877"; From c2ce361ffa76380e6663f94e9880fb41749809a7 Mon Sep 17 00:00:00 2001 From: abbylow Date: Fri, 18 Aug 2023 16:07:58 +0800 Subject: [PATCH 3/8] feat(bridge): move max button (#153) * feat(bridge): move max button * fix(bridge): direction label css --- .../src/components/bridge/TokenSelect.tsx | 70 +++++++++++-------- .../bridge/utils/DirectionLabel.tsx | 6 +- 2 files changed, 43 insertions(+), 33 deletions(-) diff --git a/apps/bridge/src/components/bridge/TokenSelect.tsx b/apps/bridge/src/components/bridge/TokenSelect.tsx index 847fa6cd..c12476b7 100644 --- a/apps/bridge/src/components/bridge/TokenSelect.tsx +++ b/apps/bridge/src/components/bridge/TokenSelect.tsx @@ -18,6 +18,7 @@ import { } from "@config/constants"; import { formatUnits, parseUnits } from "ethers/lib/utils.js"; import { formatBigNumberString, localeZero } from "@mantle/utils"; +import { Button } from "@mantle/ui"; import DirectionLabel from "@components/bridge/utils/DirectionLabel"; import { MantleLogo } from "@components/bridge/utils/MantleLogo"; import KindReminder from "@components/bridge/utils/KindReminder"; @@ -42,6 +43,7 @@ export default function TokenSelect({ setSelectedToken, setSelectedTokenAmount, setDestinationTokenAmount, + client, } = useContext(StateContext); const hasBalance = useMemo(() => { @@ -191,6 +193,28 @@ export default function TokenSelect({ placeholder="0" className="grow border-0 focus:outline-none rounded-tl-lg rounded-bl-lg bg-black py-1.5 px-3 focus:ring-0 focus:ring-white/70 appearance-none" /> +
+ +
{selected?.logoURI && ( @@ -297,41 +321,29 @@ export default function TokenSelect({ Insufficient balance. - ) : ( } + logo={null} chain={ - (selected?.address && - `${ - Number.isNaN( - parseFloat(balances?.[selected?.address || ""] || "") - ) - ? localeZero - : formatBigNumberString( - balances?.[selected?.address || ""] || "", - 3, - true, - false - ) || localeZero - }${" "}${selected?.symbol}`) || - "" + !client?.isConnected + ? "Unknown. Connect Wallet." + : (selected?.address && + `${ + Number.isNaN( + parseFloat(balances?.[selected?.address || ""] || "") + ) + ? localeZero + : formatBigNumberString( + balances?.[selected?.address || ""] || "", + 3, + true, + false + ) || localeZero + }${" "}${selected?.symbol}`) || + "" } /> )} diff --git a/apps/bridge/src/components/bridge/utils/DirectionLabel.tsx b/apps/bridge/src/components/bridge/utils/DirectionLabel.tsx index 1c2f7b90..47f5dae6 100644 --- a/apps/bridge/src/components/bridge/utils/DirectionLabel.tsx +++ b/apps/bridge/src/components/bridge/utils/DirectionLabel.tsx @@ -14,15 +14,13 @@ export default function DirectionLabel({ }) { return (
{direction} {direction && ":"} -
+
{logo} {chain}
From 1a7b6540277f7149a02151952863b9229559f884 Mon Sep 17 00:00:00 2001 From: Anthony Riera Date: Fri, 18 Aug 2023 15:05:54 +0200 Subject: [PATCH 4/8] feat: updated navigation (#149) * fix: global navigation * feat: update nav items * fix: account migrator link * feat: trigger build --- apps/bridge/src/components/ConnectWallet.tsx | 3 +- apps/bridge/src/components/Nav.tsx | 66 +++++++++++++++++- .../src/components/ConnectWallet.tsx | 3 +- apps/converter/src/components/Nav.tsx | 67 ++++++++++++++++++- apps/faucet/src/components/ConnectWallet.tsx | 3 +- apps/faucet/src/components/Nav.tsx | 30 ++++++++- packages/ui/src/navigation/Header.tsx | 8 +-- packages/ui/src/navigation/NavigationLite.tsx | 54 ++------------- 8 files changed, 170 insertions(+), 64 deletions(-) diff --git a/apps/bridge/src/components/ConnectWallet.tsx b/apps/bridge/src/components/ConnectWallet.tsx index f2ff7423..a62ffd8c 100644 --- a/apps/bridge/src/components/ConnectWallet.tsx +++ b/apps/bridge/src/components/ConnectWallet.tsx @@ -10,7 +10,7 @@ import { useAccount, useConnect, useDisconnect, useNetwork } from "wagmi"; import { CHAINS, L1_CHAIN_ID, L2_CHAIN_ID } from "@config/constants"; import Avatar from "@mantle/ui/src/presentational/Avatar"; -import { ArrowDownIcon, Button } from "@mantle/ui"; +import { Button } from "@mantle/ui"; import { truncateAddress } from "@mantle/utils"; import { BiError } from "react-icons/bi"; @@ -191,7 +191,6 @@ function ConnectWallet() {
{truncateAddress(getAddress(client.address))} -
) : ( diff --git a/apps/bridge/src/components/Nav.tsx b/apps/bridge/src/components/Nav.tsx index 53a87ba2..2f073ba7 100644 --- a/apps/bridge/src/components/Nav.tsx +++ b/apps/bridge/src/components/Nav.tsx @@ -5,24 +5,86 @@ import { Header } from "@mantle/ui/src/navigation/Header"; import ConnectWallet from "@components/ConnectWallet"; import { L1_CHAIN_ID, L2_CHAIN_ID } from "@config/constants"; import StateContext from "@providers/stateContext"; +import { usePathname } from "next/navigation"; +import { NavItem } from "@mantle/ui/src/navigation/NavigationLite"; type NavProps = { // eslint-disable-next-line react/require-default-props className?: string | undefined; }; +const NAV_ITEMS: NavItem[] = [ + { + name: "Docs", + href: "https://docs.mantle.xyz", + internal: true, + key: "docs", + }, + { + name: "Migrate", + href: "https://migratebit.mantle.xyz", + internal: true, + key: "migrate", + }, + { + name: "Bridge", + href: "https://bridge.mantle.xyz", + internal: true, + key: "bridge", + }, + { + name: "Account", + href: "/account/withdraw", + internal: true, + key: "account", + }, +]; + +const NAV_ITEMS_TESTNET: NavItem[] = [ + { + name: "Docs", + href: "https://docs.mantle.xyz", + internal: true, + key: "docs", + }, + { + name: "Faucet", + href: "https://faucet.testnet.mantle.xyz", + internal: true, + key: "faucet", + }, + { + name: "Bridge", + href: "https://bridge.testnet.mantle.xyz", + internal: true, + key: "bridge", + }, + { + name: "Account", + href: "/account/withdraw", + internal: true, + key: "account", + }, +]; + function Nav({ className = "" }: NavProps) { const { mobileMenuOpen, setMobileMenuOpen } = useContext(StateContext); + const pathName = usePathname(); + + const activeKey = pathName.includes("account") ? "account" : "bridge"; + + const isTestnet = L1_CHAIN_ID === 5 || L2_CHAIN_ID === 5001; + const navItems = isTestnet ? NAV_ITEMS_TESTNET : NAV_ITEMS; return (
} className={className} - activeKey="bridge" - isTestnet={L1_CHAIN_ID === 5 || L2_CHAIN_ID === 5001} + activeKey={activeKey} mobileMenuOpen={mobileMenuOpen} setMobileMenuOpen={setMobileMenuOpen} + navItems={navItems} /> ); } diff --git a/apps/converter/src/components/ConnectWallet.tsx b/apps/converter/src/components/ConnectWallet.tsx index 32b278df..ef41d10e 100644 --- a/apps/converter/src/components/ConnectWallet.tsx +++ b/apps/converter/src/components/ConnectWallet.tsx @@ -13,7 +13,7 @@ import { InjectedConnector } from "wagmi/connectors/injected"; import { CHAINS, L1_CHAIN_ID } from "@config/constants"; import Avatar from "@mantle/ui/src/presentational/Avatar"; -import { ArrowDownIcon, Button } from "@mantle/ui"; +import { Button } from "@mantle/ui"; import { truncateAddress } from "@mantle/utils"; import { BiError } from "react-icons/bi"; @@ -183,7 +183,6 @@ function ConnectWallet() {
{truncateAddress(getAddress(client.address) as `0x${string}`)} -
diff --git a/apps/converter/src/components/Nav.tsx b/apps/converter/src/components/Nav.tsx index af5fb62b..72348ca3 100644 --- a/apps/converter/src/components/Nav.tsx +++ b/apps/converter/src/components/Nav.tsx @@ -5,6 +5,9 @@ import { Header } from "@mantle/ui/src/navigation/Header"; import ConnectWallet from "@components/ConnectWallet"; import { L1_CHAIN_ID, L2_CHAIN_ID } from "@config/constants"; import StateContext from "@providers/stateContext"; +import { NavItem } from "@mantle/ui/src/navigation/NavigationLite"; + +import { usePathname } from "next/navigation"; type NavProps = { hideConnectBtn: boolean; @@ -12,18 +15,78 @@ type NavProps = { className?: string | undefined; }; +const NAV_ITEMS: NavItem[] = [ + { + name: "Docs", + href: "https://docs.mantle.xyz", + internal: true, + key: "docs", + }, + { + name: "Migrate", + href: "https://migratebit.mantle.xyz", + internal: true, + key: "migrate", + }, + { + name: "Bridge", + href: "https://bridge.mantle.xyz", + internal: true, + key: "bridge", + }, + { + name: "Account", + href: "/account/migrate", + internal: true, + key: "account", + }, +]; + +const NAV_ITEMS_TESTNET: NavItem[] = [ + { + name: "Docs", + href: "https://docs.mantle.xyz", + internal: true, + key: "docs", + }, + { + name: "Faucet", + href: "https://faucet.testnet.mantle.xyz", + internal: true, + key: "faucet", + }, + { + name: "Bridge", + href: "https://bridge.testnet.mantle.xyz", + internal: true, + key: "bridge", + }, + { + name: "Account", + href: "/account/migrate", + internal: true, + key: "account", + }, +]; + function Nav({ hideConnectBtn, className = "" }: NavProps) { const { mobileMenuOpen, setMobileMenuOpen } = useContext(StateContext); + const pathName = usePathname(); + + const activeKey = pathName.includes("account") ? "account" : "migrate"; + + const isTestnet = L1_CHAIN_ID === 5 || L2_CHAIN_ID === 5001; + const navItems = isTestnet ? NAV_ITEMS_TESTNET : NAV_ITEMS; return (
} className={className} - activeKey="migrate" - isTestnet={L1_CHAIN_ID === 5 || L2_CHAIN_ID === 5001} + activeKey={activeKey} mobileMenuOpen={mobileMenuOpen} setMobileMenuOpen={setMobileMenuOpen} + navItems={navItems} /> ); } diff --git a/apps/faucet/src/components/ConnectWallet.tsx b/apps/faucet/src/components/ConnectWallet.tsx index d6b8d74a..e0f11232 100644 --- a/apps/faucet/src/components/ConnectWallet.tsx +++ b/apps/faucet/src/components/ConnectWallet.tsx @@ -7,7 +7,7 @@ import { useAccount, useConnect, useDisconnect, useNetwork } from "wagmi"; import { CHAINS, L1_CHAIN_ID } from "@config/constants"; import Avatar from "@mantle/ui/src/presentational/Avatar"; -import { ArrowDownIcon, Button } from "@mantle/ui"; +import { Button } from "@mantle/ui"; import { truncateAddress } from "@mantle/utils"; import { BiError } from "react-icons/bi"; @@ -164,7 +164,6 @@ function ConnectWallet() {
{truncateAddress(getAddress(client.address))} -
diff --git a/apps/faucet/src/components/Nav.tsx b/apps/faucet/src/components/Nav.tsx index b224dc56..6b4bd2bb 100644 --- a/apps/faucet/src/components/Nav.tsx +++ b/apps/faucet/src/components/Nav.tsx @@ -4,12 +4,40 @@ import { useContext } from "react"; import { Header } from "@mantle/ui/src/navigation/Header"; import ConnectWallet from "@components/ConnectWallet"; import StateContext from "@providers/stateContext"; +import { NavItem } from "@mantle/ui/src/navigation/NavigationLite"; type NavProps = { // eslint-disable-next-line react/require-default-props className?: string | undefined; }; +const navItems: NavItem[] = [ + { + name: "Docs", + href: "https://docs.mantle.xyz", + internal: true, + key: "docs", + }, + { + name: "Faucet", + href: "https://faucet.testnet.mantle.xyz", + internal: true, + key: "faucet", + }, + { + name: "Bridge", + href: "https://bridge.testnet.mantle.xyz", + internal: true, + key: "bridge", + }, + { + name: "Account", + href: "https://bridge.testnet.mantle.xyz/account/deposit", + internal: true, + key: "account", + }, +]; + function Nav({ className = "" }: NavProps) { const { mobileMenuOpen, setMobileMenuOpen } = useContext(StateContext); @@ -20,7 +48,7 @@ function Nav({ className = "" }: NavProps) { className={className} activeKey="faucet" // Faucet should only be on testnet - isTestnet + navItems={navItems} mobileMenuOpen={mobileMenuOpen} setMobileMenuOpen={setMobileMenuOpen} /> diff --git a/packages/ui/src/navigation/Header.tsx b/packages/ui/src/navigation/Header.tsx index 6d3b0446..e345212b 100644 --- a/packages/ui/src/navigation/Header.tsx +++ b/packages/ui/src/navigation/Header.tsx @@ -1,7 +1,7 @@ /* eslint-disable react/require-default-props */ import * as React from 'react' import { cn } from '../utils' -import { NavigationLite } from './NavigationLite' +import { NavItem, NavigationLite } from './NavigationLite' import { NavigationFull } from './NavigationFull' /** @@ -15,18 +15,18 @@ export const Header = ({ sticky, navLite = false, activeKey, - isTestnet, mobileMenuOpen, setMobileMenuOpen, + navItems, }: { walletConnect: React.ReactNode className?: string sticky?: boolean navLite?: boolean activeKey: string - isTestnet: boolean mobileMenuOpen: boolean setMobileMenuOpen: React.Dispatch> + navItems: NavItem[] }) => (
) : ( > + navItems: NavItem[] }) => { - const navItems = isTestnet ? NAV_ITEMS_TESTNET : NAV_ITEMS - return (
-
+
{navItems.map((item, index) => { const isActive = activeKey === item.key return ( @@ -105,7 +61,7 @@ export const NavigationLite = ({ rel="noreferrer noopener" className={ isActive - ? 'text-type-primary relative select-none pointer-events-none ' + ? 'text-type-primary relative select-none pointer-events-none' : `` } > From 2323c63c128575482478c013abe51b97c9e1ca70 Mon Sep 17 00:00:00 2001 From: Rieranthony Date: Mon, 21 Aug 2023 09:47:33 +0200 Subject: [PATCH 5/8] feat: change copy --- apps/bridge/src/hooks/web3/write/useSwitchToNetwork.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/bridge/src/hooks/web3/write/useSwitchToNetwork.ts b/apps/bridge/src/hooks/web3/write/useSwitchToNetwork.ts index 28a75365..c1b9de04 100644 --- a/apps/bridge/src/hooks/web3/write/useSwitchToNetwork.ts +++ b/apps/bridge/src/hooks/web3/write/useSwitchToNetwork.ts @@ -49,7 +49,8 @@ export function useSwitchToNetwork() { } else if (switchError.code !== -32000) { updateToast({ id: "switch-error", - content: "Error: Unable to switch chains", + content: + "Error: Disconnect to switch chains. Please ensure the network is supported by your wallet.", type: "error", borderLeft: "red-600", }); @@ -69,7 +70,8 @@ export function useSwitchToNetwork() { if (displayError) { updateToast({ id: "switch-error", - content: "Error: Unable to switch chains", + content: + "Error: Disconnect to switch chains. Please ensure the network is supported by your wallet.", type: "error", borderLeft: "red-600", buttonText: "Close", From 2da0f53f477e07ef302bef9821dbb13ece4e9158 Mon Sep 17 00:00:00 2001 From: Rieranthony Date: Mon, 21 Aug 2023 12:37:56 +0200 Subject: [PATCH 6/8] feat: update title toast --- apps/bridge/src/components/Toast.tsx | 6 +++++- apps/bridge/src/hooks/useToast.ts | 1 + apps/bridge/src/hooks/web3/write/useSwitchToNetwork.ts | 4 ++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/bridge/src/components/Toast.tsx b/apps/bridge/src/components/Toast.tsx index b3ea5078..35648799 100644 --- a/apps/bridge/src/components/Toast.tsx +++ b/apps/bridge/src/components/Toast.tsx @@ -83,6 +83,7 @@ export function Toast({ type, onClose, id, + title, }: ToastProps) { const handleClose = (e: React.MouseEvent) => { e.stopPropagation(); @@ -99,7 +100,10 @@ export function Toast({ borderLeft={borderLeft} onClick={(e) => handleClose(e)} > - {content} +
+ {title && {title}} + {content} +
{typeof ButtonText === "function" ? ( ) : ( diff --git a/apps/bridge/src/hooks/useToast.ts b/apps/bridge/src/hooks/useToast.ts index 09d9a014..24ace65d 100644 --- a/apps/bridge/src/hooks/useToast.ts +++ b/apps/bridge/src/hooks/useToast.ts @@ -7,6 +7,7 @@ type Toast = Omit; export type ToastProps = { id: string; + title?: string; content: ReactNode; onClose: (id: string) => void; type?: "success" | "error" | "onGoing"; diff --git a/apps/bridge/src/hooks/web3/write/useSwitchToNetwork.ts b/apps/bridge/src/hooks/web3/write/useSwitchToNetwork.ts index c1b9de04..a1b0eccb 100644 --- a/apps/bridge/src/hooks/web3/write/useSwitchToNetwork.ts +++ b/apps/bridge/src/hooks/web3/write/useSwitchToNetwork.ts @@ -49,8 +49,8 @@ export function useSwitchToNetwork() { } else if (switchError.code !== -32000) { updateToast({ id: "switch-error", - content: - "Error: Disconnect to switch chains. Please ensure the network is supported by your wallet.", + title: "Error: Disconnect to switch chains.", + content: "Please ensure the network is supported by your wallet.", type: "error", borderLeft: "red-600", }); From daae46b68d5868ca760145672d94f16ca7b0d002 Mon Sep 17 00:00:00 2001 From: Rieranthony Date: Mon, 21 Aug 2023 14:01:54 +0200 Subject: [PATCH 7/8] feat: fix styling --- apps/bridge/src/components/Toast.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bridge/src/components/Toast.tsx b/apps/bridge/src/components/Toast.tsx index 35648799..92569f8a 100644 --- a/apps/bridge/src/components/Toast.tsx +++ b/apps/bridge/src/components/Toast.tsx @@ -100,7 +100,7 @@ export function Toast({ borderLeft={borderLeft} onClick={(e) => handleClose(e)} > -
+
{title && {title}} {content}
From 961b2ea63f5e773bca42a297ba5274c85cd91cee Mon Sep 17 00:00:00 2001 From: Rieranthony Date: Tue, 22 Aug 2023 12:07:06 +0200 Subject: [PATCH 8/8] feat: fix notification --- apps/bridge/src/hooks/web3/write/useSwitchToNetwork.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/bridge/src/hooks/web3/write/useSwitchToNetwork.ts b/apps/bridge/src/hooks/web3/write/useSwitchToNetwork.ts index a1b0eccb..75e55073 100644 --- a/apps/bridge/src/hooks/web3/write/useSwitchToNetwork.ts +++ b/apps/bridge/src/hooks/web3/write/useSwitchToNetwork.ts @@ -70,8 +70,8 @@ export function useSwitchToNetwork() { if (displayError) { updateToast({ id: "switch-error", - content: - "Error: Disconnect to switch chains. Please ensure the network is supported by your wallet.", + title: "Error: Disconnect to switch chains.", + content: "Please ensure the network is supported by your wallet.", type: "error", borderLeft: "red-600", buttonText: "Close",