go-ethereum/src/components/layouts/MobileMenu.tsx
Paul Wackerow bd80434b83
Mobile menu (#39)
* add MobileMenu component

* implement MobileMenu via Header

* close menu with links

* move all menu logic to MobileMenu component

* refactor MobileMenu to use Modals

* remove unneeded motion params

* remove animation on fixed modal

* abstract out a HeaderButtons component

* abstract out Search component

* move BORDER_WIDTH to constants

* hover fixes

* change requests

* fix: Link should wrap header buttons

Co-authored-by: Corwin Smith <cssmittys@gmail.com>
Co-authored-by: Nicolás Quiroz <nh.quiroz@gmail.com>
2022-11-23 16:57:49 -03:00

71 lines
1.9 KiB
TypeScript

import { Box, Flex, Modal, ModalContent, ModalOverlay, useDisclosure } from '@chakra-ui/react';
import { CloseIcon } from '@chakra-ui/icons';
import { HamburgerIcon } from '../UI/icons';
import { Search } from '../UI/search';
import { HeaderButtons } from '../UI';
import { BORDER_WIDTH } from '../../constants';
export const MobileMenu: React.FC = () => {
const { isOpen, onOpen, onClose } = useDisclosure();
return (
<>
{/* HAMBURGER MENU ICON */}
<Box
as='button'
p={4}
display={{ base: 'block', md: 'none' }}
color='primary'
_hover={{ bg: 'primary', color: 'bg' }}
onClick={onOpen}
>
<HamburgerIcon />
</Box>
{/* MODAL */}
<Modal isOpen={isOpen} onClose={onClose} motionPreset='none'>
<ModalOverlay />
<ModalContent>
{/* MOBILE MENU */}
<Flex
position='fixed'
maxW='min(calc(var(--chakra-sizes-container-sm) - 2rem), 100vw - 2rem)'
marginInline='auto'
inset='0'
top={4}
mb={4}
color='bg'
bg='secondary'
border={BORDER_WIDTH}
overflow='hidden'
direction='column'
>
<Flex borderBottom={BORDER_WIDTH} justify='flex-end'>
{/* CLOSE ICON */}
<Box
as='button'
p={4}
borderInlineStartWidth={BORDER_WIDTH}
borderColor='bg'
color='bg'
_hover={{ bg: 'primary' }}
onClick={onClose}
ms='auto'
>
<CloseIcon boxSize={5} />
</Box>
</Flex>
{/* HEADER BUTTONS */}
<HeaderButtons close={onClose} />
{/* SEARCH */}
<Search />
</Flex>
</ModalContent>
</Modal>
</>
);
};