Files
web/apps/scandic-web/stores/main-menu.ts
Bianca Widstam 45f80263ff Merged in fix/SW-3109-mobile-hide-side-menu-after-language-switch (pull request #2491)
fix(SW-3109): hide side menu after switching language

* fix(SW-3109): hide side menu after switching language


Approved-by: Linus Flood
2025-07-02 06:48:40 +00:00

119 lines
4.5 KiB
TypeScript

import { produce } from "immer"
import { create } from "zustand"
import {
type DropdownState,
DropdownTypeEnum,
} from "@/types/components/dropdown/dropdown"
const useDropdownStore = create<DropdownState>((set) => ({
isHamburgerMenuOpen: false,
isMyPagesMobileMenuOpen: false,
isMyPagesMenuOpen: false,
isHeaderLanguageSwitcherOpen: false,
isHeaderLanguageSwitcherMobileOpen: false,
isFooterLanguageSwitcherOpen: false,
openMegaMenu: false,
toggleMegaMenu: (menu: string | false) =>
set(
produce((state: DropdownState) => {
if (state.openMegaMenu === menu) {
state.openMegaMenu = false
} else {
state.openMegaMenu = menu
}
state.isMyPagesMobileMenuOpen = false
state.isMyPagesMenuOpen = false
state.isHeaderLanguageSwitcherOpen = false
state.isHeaderLanguageSwitcherMobileOpen = false
state.isFooterLanguageSwitcherOpen = false
})
),
toggleDropdown: (dropdown: DropdownTypeEnum) =>
set(
produce((state: DropdownState) => {
const hamburgerShouldStayExpanded =
state.isMyPagesMenuOpen ||
state.isHeaderLanguageSwitcherMobileOpen ||
state.isFooterLanguageSwitcherOpen ||
!!state.openMegaMenu
switch (dropdown) {
case DropdownTypeEnum.HamburgerMenu:
if (state.isHamburgerMenuOpen) {
if (hamburgerShouldStayExpanded) {
state.isMyPagesMobileMenuOpen = false
state.isHeaderLanguageSwitcherMobileOpen = false
state.isFooterLanguageSwitcherOpen = false
state.openMegaMenu = false
} else {
state.isHamburgerMenuOpen = false
}
} else if (state.isMyPagesMobileMenuOpen) {
state.isMyPagesMobileMenuOpen = false
} else {
state.isHamburgerMenuOpen = true
}
break
case DropdownTypeEnum.MyPagesMobileMenu:
state.isMyPagesMobileMenuOpen = !state.isMyPagesMobileMenuOpen
state.isHamburgerMenuOpen = false
state.isMyPagesMenuOpen = false
state.isHeaderLanguageSwitcherOpen = false
state.isHeaderLanguageSwitcherMobileOpen = false
state.isFooterLanguageSwitcherOpen = false
state.openMegaMenu = false
break
case DropdownTypeEnum.MyPagesMenu:
state.isMyPagesMenuOpen = !state.isMyPagesMenuOpen
state.isHamburgerMenuOpen = false
state.isMyPagesMobileMenuOpen = false
state.isHeaderLanguageSwitcherOpen = false
state.isHeaderLanguageSwitcherMobileOpen = false
state.isFooterLanguageSwitcherOpen = false
state.openMegaMenu = false
break
case DropdownTypeEnum.HeaderLanguageSwitcher:
state.isHeaderLanguageSwitcherOpen =
!state.isHeaderLanguageSwitcherOpen
state.isHamburgerMenuOpen = false
state.isMyPagesMobileMenuOpen = false
state.isMyPagesMenuOpen = false
state.isHeaderLanguageSwitcherMobileOpen = false
state.isFooterLanguageSwitcherOpen = false
state.openMegaMenu = false
break
case DropdownTypeEnum.HeaderLanguageSwitcherMobile:
if (state.isHeaderLanguageSwitcherMobileOpen) {
state.isHamburgerMenuOpen = false
}
state.isHeaderLanguageSwitcherMobileOpen =
!state.isHeaderLanguageSwitcherMobileOpen
state.isMyPagesMobileMenuOpen = false
state.isMyPagesMenuOpen = false
state.isHeaderLanguageSwitcherOpen = false
state.isFooterLanguageSwitcherOpen = false
state.openMegaMenu = false
break
case DropdownTypeEnum.FooterLanguageSwitcher:
state.isFooterLanguageSwitcherOpen =
!state.isFooterLanguageSwitcherOpen
state.isHamburgerMenuOpen = false
state.isMyPagesMobileMenuOpen = false
state.isMyPagesMenuOpen = false
state.isHeaderLanguageSwitcherOpen = false
state.isHeaderLanguageSwitcherMobileOpen = false
state.openMegaMenu = false
if (state.isFooterLanguageSwitcherOpen) {
document.body.classList.add("overflow-hidden")
} else {
document.body.classList.remove("overflow-hidden")
}
break
}
})
),
}))
export default useDropdownStore