Commit f795a619 authored by tom goriunov's avatar tom goriunov Committed by GitHub

Side menu stays open after selecting a menu item on mobile (#1195)

Fixes #1182
parent a3ce2759
...@@ -55,7 +55,10 @@ const Burger = () => { ...@@ -55,7 +55,10 @@ const Burger = () => {
/> />
) : <Box boxSize={ 9 }/> } ) : <Box boxSize={ 9 }/> }
</Flex> </Flex>
{ networkMenu.isOpen ? <NetworkMenuContentMobile tabs={ networkMenu.availableTabs } items={ networkMenu.data }/> : <NavigationMobile/> } { networkMenu.isOpen ?
<NetworkMenuContentMobile tabs={ networkMenu.availableTabs } items={ networkMenu.data }/> :
<NavigationMobile onNavLinkClick={ onClose }/>
}
</DrawerBody> </DrawerBody>
</DrawerContent> </DrawerContent>
</Drawer> </Drawer>
......
...@@ -18,9 +18,10 @@ type Props = { ...@@ -18,9 +18,10 @@ type Props = {
isCollapsed?: boolean; isCollapsed?: boolean;
px?: string | number; px?: string | number;
className?: string; className?: string;
onClick?: () => void;
} }
const NavLink = ({ item, isCollapsed, px, className }: Props) => { const NavLink = ({ item, isCollapsed, px, className, onClick }: Props) => {
const isMobile = useIsMobile(); const isMobile = useIsMobile();
const colors = useColors(); const colors = useColors();
...@@ -41,6 +42,7 @@ const NavLink = ({ item, isCollapsed, px, className }: Props) => { ...@@ -41,6 +42,7 @@ const NavLink = ({ item, isCollapsed, px, className }: Props) => {
px={ px || { base: 3, lg: isExpanded ? 3 : '15px', xl: isCollapsed ? '15px' : 3 } } px={ px || { base: 3, lg: isExpanded ? 3 : '15px', xl: isCollapsed ? '15px' : 3 } }
aria-label={ `${ item.text } link` } aria-label={ `${ item.text } link` }
whiteSpace="nowrap" whiteSpace="nowrap"
onClick={ onClick }
> >
<Tooltip <Tooltip
label={ item.text } label={ item.text }
......
...@@ -9,7 +9,11 @@ import NavLink from 'ui/snippets/navigation/NavLink'; ...@@ -9,7 +9,11 @@ import NavLink from 'ui/snippets/navigation/NavLink';
import NavLinkGroupMobile from './NavLinkGroupMobile'; import NavLinkGroupMobile from './NavLinkGroupMobile';
const NavigationMobile = () => { interface Props {
onNavLinkClick?: () => void;
}
const NavigationMobile = ({ onNavLinkClick }: Props) => {
const { mainNavItems, accountNavItems } = useNavItems(); const { mainNavItems, accountNavItems } = useNavItems();
const [ openedGroupIndex, setOpenedGroupIndex ] = React.useState(-1); const [ openedGroupIndex, setOpenedGroupIndex ] = React.useState(-1);
...@@ -59,7 +63,7 @@ const NavigationMobile = () => { ...@@ -59,7 +63,7 @@ const NavigationMobile = () => {
if (isGroupItem(item)) { if (isGroupItem(item)) {
return <NavLinkGroupMobile key={ item.text } item={ item } onClick={ onGroupItemOpen(index) }/>; return <NavLinkGroupMobile key={ item.text } item={ item } onClick={ onGroupItemOpen(index) }/>;
} else { } else {
return <NavLink key={ item.text } item={ item }/>; return <NavLink key={ item.text } item={ item } onClick={ onNavLinkClick }/>;
} }
}) } }) }
</VStack> </VStack>
...@@ -73,7 +77,7 @@ const NavigationMobile = () => { ...@@ -73,7 +77,7 @@ const NavigationMobile = () => {
borderColor="divider" borderColor="divider"
> >
<VStack as="ul" spacing="1" alignItems="flex-start"> <VStack as="ul" spacing="1" alignItems="flex-start">
{ accountNavItems.map((item) => <NavLink key={ item.text } item={ item }/>) } { accountNavItems.map((item) => <NavLink key={ item.text } item={ item } onClick={ onNavLinkClick }/>) }
</VStack> </VStack>
</Box> </Box>
) } ) }
...@@ -109,10 +113,10 @@ const NavigationMobile = () => { ...@@ -109,10 +113,10 @@ const NavigationMobile = () => {
borderColor: 'divider', borderColor: 'divider',
}} }}
> >
{ item.map(subItem => <NavLink key={ subItem.text } item={ subItem }/>) } { item.map(subItem => <NavLink key={ subItem.text } item={ subItem } onClick={ onNavLinkClick }/>) }
</Box> </Box>
) : ) :
<NavLink key={ item.text } item={ item } mb={ 1 }/>, <NavLink key={ item.text } item={ item } mb={ 1 } onClick={ onNavLinkClick }/>,
) } ) }
</Box> </Box>
</Box> </Box>
......
...@@ -13,9 +13,10 @@ const feature = config.features.account; ...@@ -13,9 +13,10 @@ const feature = config.features.account;
type Props = { type Props = {
data?: UserInfo; data?: UserInfo;
onNavLinkClick?: () => void;
}; };
const ProfileMenuContent = ({ data }: Props) => { const ProfileMenuContent = ({ data, onNavLinkClick }: Props) => {
const { accountNavItems, profileItem } = useNavItems(); const { accountNavItems, profileItem } = useNavItems();
const primaryTextColor = useColorModeValue('blackAlpha.800', 'whiteAlpha.800'); const primaryTextColor = useColorModeValue('blackAlpha.800', 'whiteAlpha.800');
...@@ -54,10 +55,19 @@ const ProfileMenuContent = ({ data }: Props) => { ...@@ -54,10 +55,19 @@ const ProfileMenuContent = ({ data }: Props) => {
{ data.email } { data.email }
</Text> </Text>
) } ) }
<NavLink item={ profileItem } isActive={ undefined } px="0px" isCollapsed={ false }/> <NavLink item={ profileItem } isActive={ undefined } px="0px" isCollapsed={ false } onClick={ onNavLinkClick }/>
<Box as="nav" mt={ 2 } pt={ 2 } borderTopColor="divider" borderTopWidth="1px" { ...getDefaultTransitionProps() }> <Box as="nav" mt={ 2 } pt={ 2 } borderTopColor="divider" borderTopWidth="1px" { ...getDefaultTransitionProps() }>
<VStack as="ul" spacing="0" alignItems="flex-start" overflow="hidden"> <VStack as="ul" spacing="0" alignItems="flex-start" overflow="hidden">
{ accountNavItems.map((item) => <NavLink key={ item.text } item={ item } isActive={ undefined } isCollapsed={ false } px="0px"/>) } { accountNavItems.map((item) => (
<NavLink
key={ item.text }
item={ item }
isActive={ undefined }
isCollapsed={ false }
px="0px"
onClick={ onNavLinkClick }
/>
)) }
</VStack> </VStack>
</Box> </Box>
<Box mt={ 2 } pt={ 3 } borderTopColor="divider" borderTopWidth="1px" { ...getDefaultTransitionProps() }> <Box mt={ 2 } pt={ 3 } borderTopColor="divider" borderTopWidth="1px" { ...getDefaultTransitionProps() }>
......
...@@ -62,7 +62,7 @@ const ProfileMenuMobile = () => { ...@@ -62,7 +62,7 @@ const ProfileMenuMobile = () => {
<DrawerOverlay/> <DrawerOverlay/>
<DrawerContent maxWidth="260px"> <DrawerContent maxWidth="260px">
<DrawerBody p={ 6 }> <DrawerBody p={ 6 }>
<ProfileMenuContent data={ data }/> <ProfileMenuContent data={ data } onNavLinkClick={ onClose }/>
</DrawerBody> </DrawerBody>
</DrawerContent> </DrawerContent>
</Drawer> </Drawer>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment