From b85c05a8c3cfa919e37adbca0a1d45feec138e23 Mon Sep 17 00:00:00 2001 From: Ilya Y <75578537+ilya-bkv@users.noreply.github.com> Date: Wed, 25 Oct 2023 18:04:23 +0300 Subject: [PATCH] Feature/toggle mobile header (#281) - toggle language - toggle menu on current link --- src/components/Nav/Header/Header.tsx | 32 ++++++++++++++++++++++------ src/components/Nav/Header/Link.tsx | 6 +++++- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/components/Nav/Header/Header.tsx b/src/components/Nav/Header/Header.tsx index 65b27900..ec058081 100644 --- a/src/components/Nav/Header/Header.tsx +++ b/src/components/Nav/Header/Header.tsx @@ -12,7 +12,7 @@ import { Icon } from '../../_shared/Icon' import type { Topic } from '../../../graphql/types.gen' import { useModalStore } from '../../../stores/ui' -import { router, useRouter } from '../../../stores/router' +import { router, ROUTES, useRouter } from '../../../stores/router' import { getDescription } from '../../../utils/meta' @@ -38,11 +38,14 @@ type HeaderSearchParams = { source?: string } +const handleSwitchLanguage = (event) => { + location.href = `${location.href}${location.href.includes('?') ? '&' : '?'}lng=${event.target.value}` +} + export const Header = (props: Props) => { const { t, lang } = useLocalize() - const { modal } = useModalStore() - + const { page } = useRouter() const { actions: { requireAuthentication } } = useSession() @@ -59,7 +62,6 @@ export const Header = (props: Props) => { const [isTopicsVisible, setIsTopicsVisible] = createSignal(false) const [isZineVisible, setIsZineVisible] = createSignal(false) const [isFeedVisible, setIsFeedVisible] = createSignal(false) - const toggleFixed = () => setFixed((oldFixed) => !oldFixed) const tag = (topic: Topic) => @@ -148,6 +150,15 @@ export const Header = (props: Props) => { setRandomTopics(topics) }) + const handleToggleMenuByLink = (event: MouseEvent, route: keyof typeof ROUTES) => { + if (!fixed()) { + return + } + event.preventDefault() + if (page().route === route) { + toggleFixed() + } + } return (
{ routeName="home" active={isZineVisible()} body={t('journal')} + onClick={(event) => handleToggleMenuByLink(event, 'home')} /> toggleSubnavigation(true, setIsFeedVisible)} @@ -203,6 +215,7 @@ export const Header = (props: Props) => { routeName="feed" active={isFeedVisible()} body={t('feed')} + onClick={(event) => handleToggleMenuByLink(event, 'feed')} /> toggleSubnavigation(true, setIsTopicsVisible)} @@ -210,12 +223,14 @@ export const Header = (props: Props) => { routeName="topics" active={isTopicsVisible()} body={t('topics')} + onClick={(event) => handleToggleMenuByLink(event, 'topics')} /> hideSubnavigation(event, 0)} onMouseOut={(event) => hideSubnavigation(event, 0)} routeName="authors" body={t('authors')} + onClick={(event) => handleToggleMenuByLink(event, 'authors')} /> toggleSubnavigation(true, setIsKnowledgeBaseVisible)} @@ -223,6 +238,7 @@ export const Header = (props: Props) => { routeName="guide" body={t('Knowledge base')} active={isKnowledgeBaseVisible()} + onClick={(event) => handleToggleMenuByLink(event, 'guide')} /> @@ -283,8 +299,12 @@ export const Header = (props: Props) => {

{t('Newsletter')}

-

{t('Newsletter')}

- diff --git a/src/components/Nav/Header/Link.tsx b/src/components/Nav/Header/Link.tsx index 81648617..bbad79b9 100644 --- a/src/components/Nav/Header/Link.tsx +++ b/src/components/Nav/Header/Link.tsx @@ -10,13 +10,17 @@ type Props = { routeName?: keyof typeof ROUTES body: string active?: boolean + onClick?: (event: MouseEvent) => void } export const Link = (props: Props) => { const { page } = useRouter() const isSelected = page().route === props.routeName return ( -
  • +
  • {children}}