Fix mobile nav hiding behavior when navigating

This commit is contained in:
Sakura Knoll
2022-01-09 20:11:02 +09:00 Unverified
parent 5ab3d1e6f2
commit 2cd449a02f
+38 -14
View File
@@ -8,10 +8,11 @@ import {
Text, Text,
Box, Box,
IconButton, IconButton,
Link,
} from '@theme-ui/components' } from '@theme-ui/components'
import NextLink from 'next/link' import NextLink from 'next/link'
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
import { useEffect, useState } from 'react' import { useCallback, useState } from 'react'
import { useTranslation } from '../../lib/i18n' import { useTranslation } from '../../lib/i18n'
import PageLink from '../atoms/PageLink' import PageLink from '../atoms/PageLink'
import SquareImageBox from '../atoms/SquareImageBox' import SquareImageBox from '../atoms/SquareImageBox'
@@ -23,9 +24,9 @@ const Honkai3rdNavigator = () => {
const [hiddenMobileNav, setHiddenMobileNav] = useState(true) const [hiddenMobileNav, setHiddenMobileNav] = useState(true)
useEffect(() => { const close = useCallback(() => {
setHiddenMobileNav(true) setHiddenMobileNav(true)
}, [router.pathname]) }, [])
return ( return (
<Flex <Flex
@@ -91,17 +92,18 @@ const Honkai3rdNavigator = () => {
</Flex> </Flex>
<Box> <Box>
<NavMobileItem href='/' label='Abyss Lab Home' /> <NavMobileItem href='/' label='Abyss Lab Home' close={close} />
<NavMobileItem <NavMobileItem
href='/honkai3rd' href='/honkai3rd'
label={`${t('nav.honkai-3rd')} Home`} label={`${t('nav.honkai-3rd')} Home`}
close={close}
/> />
<Honkai3rdNavMobileItem target='versions' /> <Honkai3rdNavMobileItem target='versions' close={close} />
<Honkai3rdNavMobileItem target='battlesuits' /> <Honkai3rdNavMobileItem target='battlesuits' close={close} />
<Honkai3rdNavMobileItem target='weapons' /> <Honkai3rdNavMobileItem target='weapons' close={close} />
<Honkai3rdNavMobileItem target='stigmata' /> <Honkai3rdNavMobileItem target='stigmata' close={close} />
<Honkai3rdNavMobileItem target='elfs' /> <Honkai3rdNavMobileItem target='elfs' close={close} />
</Box> </Box>
</Box> </Box>
<Flex <Flex
@@ -192,11 +194,21 @@ const NavItem = ({ target }: NavItemProps) => {
) )
} }
const Honkai3rdNavMobileItem = ({ target }: NavItemProps) => { interface Honkai3rdNavMobileItemProps {
target: 'versions' | 'battlesuits' | 'stigmata' | 'weapons' | 'elfs'
close: () => void
}
const Honkai3rdNavMobileItem = ({
target,
close,
}: Honkai3rdNavMobileItemProps) => {
const { push } = useRouter()
const { t } = useTranslation() const { t } = useTranslation()
const href = `/honkai3rd/${target}`
return ( return (
<PageLink <PageLink
href={`/honkai3rd/${target}`} href={href}
sx={{ sx={{
fontFamily: 'monospace', fontFamily: 'monospace',
display: 'flex', display: 'flex',
@@ -204,6 +216,11 @@ const Honkai3rdNavMobileItem = ({ target }: NavItemProps) => {
overflow: 'hidden', overflow: 'hidden',
mb: 2, mb: 2,
}} }}
onClick={(event) => {
event.preventDefault()
close()
push(href)
}}
> >
<SquareImageBox <SquareImageBox
size={40} size={40}
@@ -227,11 +244,13 @@ const Honkai3rdNavMobileItem = ({ target }: NavItemProps) => {
interface NavMobileItemProps { interface NavMobileItemProps {
href: string href: string
label: string label: string
close: () => void
} }
const NavMobileItem = ({ href, label }: NavMobileItemProps) => { const NavMobileItem = ({ href, label, close }: NavMobileItemProps) => {
const { push } = useRouter()
return ( return (
<PageLink <Link
href={href} href={href}
sx={{ sx={{
display: 'flex', display: 'flex',
@@ -241,6 +260,11 @@ const NavMobileItem = ({ href, label }: NavMobileItemProps) => {
fontSize: 3, fontSize: 3,
mb: 2, mb: 2,
}} }}
onClick={(event) => {
event.preventDefault()
close()
push(href)
}}
> >
<Flex <Flex
sx={{ sx={{
@@ -254,6 +278,6 @@ const NavMobileItem = ({ href, label }: NavMobileItemProps) => {
<Icon path={mdiMenuRight} size={'30px'} /> <Icon path={mdiMenuRight} size={'30px'} />
</Flex> </Flex>
<Text>{label}</Text> <Text>{label}</Text>
</PageLink> </Link>
) )
} }