import classNames from 'classnames'; import { useRouter } from 'next/router'; import Link from 'next/link'; import { NetworkSwitcher, useEnvironment } from '@vegaprotocol/environment'; import { t } from '@vegaprotocol/react-helpers'; import { useGlobalStore } from '../../stores/global'; import { VegaWalletConnectButton } from '../vega-wallet-connect-button'; import { ThemeSwitcher } from '@vegaprotocol/ui-toolkit'; import { Vega } from '../icons/vega'; import type { HTMLAttributeAnchorTarget } from 'react'; import { useEffect, useState } from 'react'; import testnetBg from '../../assets/green-cloud.png'; type NavbarTheme = 'inherit' | 'dark' | 'yellow'; interface NavbarProps { theme: 'light' | 'dark'; toggleTheme: () => void; navbarTheme?: NavbarTheme; } export const Navbar = ({ theme, toggleTheme, navbarTheme = 'inherit', }: NavbarProps) => { const { VEGA_TOKEN_URL } = useEnvironment(); const { marketId } = useGlobalStore((store) => ({ marketId: store.marketId, })); const [tradingPath, setTradingPath] = useState('/markets'); useEffect(() => { if (marketId) { setTradingPath(`/markets/${marketId}`); } }, [marketId]); const themeWrapperClasses = classNames({ dark: navbarTheme === 'dark', }); const isYellow = navbarTheme === 'yellow'; const navbarClasses = classNames( 'flex items-stretch border-b px-4 border-default', { 'dark:bg-black dark:text-white': !isYellow, 'bg-vega-yellow text-black bg-right-top bg-no-repeat bg-contain': isYellow, } ); return (
); }; interface NavLinkProps { name: string; path: string; navbarTheme: NavbarTheme; testId?: string; alignRight?: boolean; target?: HTMLAttributeAnchorTarget; } const NavLink = ({ name, path, navbarTheme, alignRight, target, testId = name, }: NavLinkProps) => { const router = useRouter(); const isActive = router.asPath?.includes(path); const linkClasses = classNames('mx-2 py-3 self-end relative', { 'cursor-default': isActive, 'text-black dark:text-white': isActive && navbarTheme !== 'yellow', 'text-neutral-500 dark:text-neutral-400 hover:text-black dark:hover:text-neutral-300': !isActive && navbarTheme !== 'yellow', 'ml-auto': alignRight, 'text-black': isActive && navbarTheme === 'yellow', 'text-black/60 hover:text-black': !isActive && navbarTheme === 'yellow', }); const borderClasses = classNames('absolute h-1 w-full bottom-[-1px] left-0', { 'bg-black dark:bg-vega-yellow': navbarTheme !== 'yellow', 'bg-black': navbarTheme === 'yellow', }); return ( {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */} {name} {isActive && } ); };