Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/adjust header to mobile #185

Merged
merged 13 commits into from
Oct 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions public/images/logos/arbitrum-token.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 16 additions & 0 deletions public/images/logos/base-token.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions public/images/logos/eth-token.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 10 additions & 3 deletions src/app/components/account/account.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useDispatch } from 'react-redux';

import { Button, HStack } from '@chakra-ui/react';
import { Button, HStack, useBreakpointValue } from '@chakra-ui/react';
import { AccountMenu } from '@components/account/components/account-menu';
import { mintUnmintActions } from '@store/slices/mintunmint/mintunmint.actions';
import { modalActions } from '@store/slices/modal/modal.actions';
Expand All @@ -11,6 +11,7 @@ export function Account(): React.JSX.Element {

const { address, connector, isConnected } = useAccount();
const { disconnect } = useDisconnect();
const isMobile = useBreakpointValue({ base: true, md: false });

function onConnectWalletClick(): void {
dispatch(modalActions.toggleSelectWalletModalVisibility());
Expand All @@ -22,15 +23,21 @@ export function Account(): React.JSX.Element {
}

return (
<HStack w={'275px'}>
<HStack h={isMobile ? '40px' : '50px'}>
{isConnected ? (
<AccountMenu
address={address}
wagmiConnector={connector}
handleDisconnectWallet={() => onDisconnectWalletClick()}
/>
) : (
<Button variant={'account'} onClick={() => onConnectWalletClick()}>
<Button
variant={'account'}
onClick={() => onConnectWalletClick()}
h={isMobile ? '40px' : '50px'}
w={isMobile ? '150px' : '275px'}
fontSize={isMobile ? 'md' : 'lg'}
>
Connect Wallet
</Button>
)}
Expand Down
45 changes: 31 additions & 14 deletions src/app/components/account/components/account-menu.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
import { ChevronDownIcon } from '@chakra-ui/icons';
import { HStack, Image, Menu, MenuButton, MenuItem, MenuList, Text } from '@chakra-ui/react';
import {
HStack,
Image,
Menu,
MenuButton,
MenuItem,
MenuList,
Text,
useBreakpointValue,
} from '@chakra-ui/react';
import { truncateAddress } from 'dlc-btc-lib/utilities';
import { Connector } from 'wagmi';

Expand All @@ -14,23 +23,31 @@ export function AccountMenu({
wagmiConnector,
handleDisconnectWallet,
}: AccountMenuProps): React.JSX.Element | false {
const isMobile = useBreakpointValue({ base: true, md: false });

if (!address || !wagmiConnector) return false;
return (
<Menu variant={'account'}>
<MenuButton>
<MenuButton h={isMobile ? '40px' : '50px'} w={isMobile ? '120px' : '275px'}>
<HStack justifyContent={'space-evenly'}>
<Image
p={'2.5px'}
src={
wagmiConnector.name === 'WalletConnect'
? './images/logos/walletconnect.svg'
: wagmiConnector.icon
}
alt={wagmiConnector.name}
boxSize={'35px'}
/>
<Text>{truncateAddress(address)}</Text>
<ChevronDownIcon boxSize={'35px'} color={'white'} />
{!isMobile ? (
<>
<Image
p={'2.5px'}
src={
wagmiConnector.name === 'WalletConnect'
? './images/logos/walletconnect.svg'
: wagmiConnector.icon
}
alt={wagmiConnector.name}
boxSize={'35px'}
/>
<Text>{truncateAddress(address)}</Text>
<ChevronDownIcon boxSize={'35px'} color={'white'} />
</>
) : (
<Text>{truncateAddress(address)}</Text>
)}
</HStack>
</MenuButton>
<MenuList>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
import { useNavigate } from 'react-router-dom';

import { Button, Image } from '@chakra-ui/react';
import { Button, Image, useBreakpointValue } from '@chakra-ui/react';

export function CompanyWebsiteButton(): React.JSX.Element {
const navigate = useNavigate();

const logoPath = './images/logos/dlc-link-logo.svg';
const altText = 'DLC.Link Logo';
const logoPath = './images/logos/dlc-btc-logo.svg';
const altText = 'dlcBTC Logo';
const isMobile = useBreakpointValue({ base: true, md: false });

return (
<Button onClick={() => navigate('/')} variant={'company'} boxSize={'65px'}>
<Image src={logoPath} alt={altText} boxSize={'65px'} />
<Button onClick={() => navigate('/')} variant={'company'} boxSize={isMobile ? '54px' : '65px'}>
<Image src={logoPath} alt={altText} width={isMobile ? '54px' : '65px'} />
</Button>
);
}
38 changes: 38 additions & 0 deletions src/app/components/header/components/desktop-header.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import React from 'react';

import { HStack } from '@chakra-ui/react';
import { Account } from '@components/account/account';
import { CompanyWebsiteButton } from '@components/company-website-button/company-website-button';
import { NetworkBox } from '@components/network/network';

import { HeaderLayout } from './header.layout';
import { NavigationTabs } from './tabs';

interface DesktopHeaderProps {
isNetworkMenuOpen: boolean;
setIsNetworkMenuOpen: (isOpen: boolean) => void;
handleTabClick: (route: string) => void;
}

const DesktopHeader: React.FC<DesktopHeaderProps> = ({
isNetworkMenuOpen,
setIsNetworkMenuOpen,
handleTabClick,
}) => {
return (
<HeaderLayout>
<HStack justifyContent={'flex-start'} w={'100%'} gap={'50px'}>
<CompanyWebsiteButton />
<NavigationTabs activeTab={location.pathname} handleTabClick={handleTabClick} />
</HStack>
<HStack>
<>
<NetworkBox isMenuOpen={isNetworkMenuOpen} setIsMenuOpen={setIsNetworkMenuOpen} />
<Account />
</>
</HStack>
</HeaderLayout>
);
};

export default DesktopHeader;
83 changes: 83 additions & 0 deletions src/app/components/header/components/mobile-header.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import React from 'react';
import { useNavigate } from 'react-router-dom';

import { HamburgerIcon } from '@chakra-ui/icons';
import { HStack, IconButton, Menu, MenuButton, MenuItem, MenuList } from '@chakra-ui/react';
import { Account } from '@components/account/account';
import { CompanyWebsiteButton } from '@components/company-website-button/company-website-button';
import { NetworkBox } from '@components/network/network';

import { HeaderLayout } from './header.layout';

interface MobileHeaderProps {
isNetworkMenuOpen: boolean;
setIsNetworkMenuOpen: (isOpen: boolean) => void;
}

const MobileHeader: React.FC<MobileHeaderProps> = ({ isNetworkMenuOpen, setIsNetworkMenuOpen }) => {
const navigate = useNavigate();
return (
<HeaderLayout>
<HStack justifyContent={'space-between'} w={'100%'} gap={'0px'}>
<CompanyWebsiteButton />
<HStack>
<NetworkBox isMenuOpen={isNetworkMenuOpen} setIsMenuOpen={setIsNetworkMenuOpen} />
<Account />
<Menu>
<MenuButton
as={IconButton}
aria-label={'Options'}
icon={<HamburgerIcon />}
justifyContent={'center'}
p={'3px'}
h={'40px'}
w={'40px'}
bg={'background.content.01'}
border={'1.5px solid'}
borderColor={'border.white.01'}
borderRadius={'md'}
color={'white'}
fontSize={'sm'}
fontWeight={600}
/>
<MenuList
p={'5px'}
w={'200px'}
bgColor={'background.container.01'}
border={'1.5px solid'}
borderColor={'border.white.01'}
borderRadius={'md'}
>
<MenuItem
justifyContent={'center'}
bgColor={'inherit'}
borderRadius={'md'}
color={'white'}
fontSize={'xs'}
fontWeight={400}
transition={'all 0.05s ease-in-out'}
onClick={() => navigate('/')}
>
Points
</MenuItem>
<MenuItem
justifyContent={'center'}
bgColor={'inherit'}
borderRadius={'md'}
color={'white'}
fontSize={'xs'}
fontWeight={400}
transition={'all 0.05s ease-in-out'}
onClick={() => navigate('/proof-of-reserve')}
>
Proof of Reserve
</MenuItem>
</MenuList>
</Menu>
</HStack>
</HStack>
</HeaderLayout>
);
};

export default MobileHeader;
53 changes: 16 additions & 37 deletions src/app/components/header/header.tsx
Original file line number Diff line number Diff line change
@@ -1,20 +1,15 @@
import React, { useEffect, useState } from 'react';
import { useLocation, useNavigate } from 'react-router-dom';
import { useNavigate } from 'react-router-dom';

import { HamburgerIcon } from '@chakra-ui/icons';
import { HStack, IconButton, VStack, useBreakpointValue } from '@chakra-ui/react';
import { Account } from '@components/account/account';
import { CompanyWebsiteButton } from '@components/company-website-button/company-website-button';
import { HeaderLayout } from '@components/header/components/header.layout';
import { NetworkBox } from '@components/network/network';
import { VStack, useBreakpointValue } from '@chakra-ui/react';
import { useAccount } from 'wagmi';

import { Banner } from './components/banner';
import { NavigationTabs } from './components/tabs';
import DesktopHeader from './components/desktop-header';
import MobileHeader from './components/mobile-header';

export function Header(): React.JSX.Element {
const navigate = useNavigate();
const location = useLocation();
const { chain, isConnected } = useAccount();

const [showBanner, setShowBanner] = useState<boolean>(false);
Expand Down Expand Up @@ -45,34 +40,18 @@ export function Header(): React.JSX.Element {
}}
/>
)}
<HeaderLayout>
<HStack
justifyContent={isMobile ? 'space-between' : 'flex-start'}
w={'100%'}
gap={isMobile ? '0px' : '50px'}
>
<CompanyWebsiteButton />
{isMobile ? (
<IconButton
aria-label="menu"
icon={<HamburgerIcon />}
onClick={() => {
console.log('clicked');
}}
/>
) : (
<NavigationTabs activeTab={location.pathname} handleTabClick={handleTabClick} />
)}
</HStack>
<HStack>
{!isMobile && (
<>
<NetworkBox isMenuOpen={isNetworkMenuOpen} setIsMenuOpen={setIsNetworkMenuOpen} />
<Account />
</>
)}
</HStack>
</HeaderLayout>
{isMobile ? (
<MobileHeader
isNetworkMenuOpen={isNetworkMenuOpen}
setIsNetworkMenuOpen={setIsNetworkMenuOpen}
/>
) : (
<DesktopHeader
isNetworkMenuOpen={isNetworkMenuOpen}
setIsNetworkMenuOpen={setIsNetworkMenuOpen}
handleTabClick={handleTabClick}
/>
)}
</VStack>
);
}
Loading
Loading