95 lines
3.6 KiB
TypeScript
95 lines
3.6 KiB
TypeScript
import { produce } from "immer"
|
|
import { create } from "zustand"
|
|
|
|
import {
|
|
type DropdownState,
|
|
DropdownTypeEnum,
|
|
} from "@/types/components/dropdown/dropdown"
|
|
|
|
// TODO: When MyPagesMobileMenu is removed, also remove the
|
|
// isMyPagesMobileMenuOpen state
|
|
|
|
const useDropdownStore = create<DropdownState>((set, get) => ({
|
|
isHamburgerMenuOpen: false,
|
|
isMyPagesMobileMenuOpen: false,
|
|
isMyPagesMenuOpen: false,
|
|
isHeaderLanguageSwitcherOpen: false,
|
|
isHeaderLanguageSwitcherMobileOpen: false,
|
|
isFooterLanguageSwitcherOpen: false,
|
|
handleHamburgerClick: () => {
|
|
const state = get()
|
|
if (state.isMyPagesMobileMenuOpen) {
|
|
set({ isMyPagesMobileMenuOpen: false })
|
|
} else {
|
|
if (state.isHeaderLanguageSwitcherMobileOpen) {
|
|
set({ isHeaderLanguageSwitcherMobileOpen: false })
|
|
}
|
|
if (!state.isFooterLanguageSwitcherOpen) {
|
|
set({ isHamburgerMenuOpen: !state.isHamburgerMenuOpen })
|
|
} else {
|
|
set({ isFooterLanguageSwitcherOpen: false })
|
|
}
|
|
}
|
|
},
|
|
toggleDropdown: (dropdown: DropdownTypeEnum) =>
|
|
set(
|
|
produce((state: DropdownState) => {
|
|
switch (dropdown) {
|
|
case DropdownTypeEnum.HamburgerMenu:
|
|
state.isHamburgerMenuOpen = !state.isHamburgerMenuOpen
|
|
state.isMyPagesMobileMenuOpen = false
|
|
state.isMyPagesMenuOpen = false
|
|
state.isHeaderLanguageSwitcherOpen = false
|
|
state.isHeaderLanguageSwitcherMobileOpen = false
|
|
state.isFooterLanguageSwitcherOpen = false
|
|
break
|
|
case DropdownTypeEnum.MyPagesMobileMenu:
|
|
state.isMyPagesMobileMenuOpen = !state.isMyPagesMobileMenuOpen
|
|
state.isHamburgerMenuOpen = false
|
|
state.isMyPagesMenuOpen = false
|
|
state.isHeaderLanguageSwitcherOpen = false
|
|
state.isHeaderLanguageSwitcherMobileOpen = false
|
|
state.isFooterLanguageSwitcherOpen = false
|
|
break
|
|
case DropdownTypeEnum.MyPagesMenu:
|
|
state.isMyPagesMenuOpen = !state.isMyPagesMenuOpen
|
|
state.isHamburgerMenuOpen = false
|
|
state.isMyPagesMobileMenuOpen = false
|
|
state.isHeaderLanguageSwitcherOpen = false
|
|
state.isHeaderLanguageSwitcherMobileOpen = false
|
|
state.isFooterLanguageSwitcherOpen = false
|
|
break
|
|
case DropdownTypeEnum.HeaderLanguageSwitcher:
|
|
state.isHeaderLanguageSwitcherOpen =
|
|
!state.isHeaderLanguageSwitcherOpen
|
|
state.isHamburgerMenuOpen = false
|
|
state.isMyPagesMobileMenuOpen = false
|
|
state.isMyPagesMenuOpen = false
|
|
state.isHeaderLanguageSwitcherMobileOpen = false
|
|
state.isFooterLanguageSwitcherOpen = false
|
|
break
|
|
case DropdownTypeEnum.HeaderLanguageSwitcherMobile:
|
|
state.isHeaderLanguageSwitcherMobileOpen =
|
|
!state.isHeaderLanguageSwitcherMobileOpen
|
|
state.isHamburgerMenuOpen = false
|
|
state.isMyPagesMobileMenuOpen = false
|
|
state.isMyPagesMenuOpen = false
|
|
state.isHeaderLanguageSwitcherOpen = false
|
|
state.isFooterLanguageSwitcherOpen = false
|
|
break
|
|
case DropdownTypeEnum.FooterLanguageSwitcher:
|
|
state.isFooterLanguageSwitcherOpen =
|
|
!state.isFooterLanguageSwitcherOpen
|
|
state.isHamburgerMenuOpen = false
|
|
state.isMyPagesMobileMenuOpen = false
|
|
state.isMyPagesMenuOpen = false
|
|
state.isHeaderLanguageSwitcherOpen = false
|
|
state.isHeaderLanguageSwitcherMobileOpen = false
|
|
break
|
|
}
|
|
})
|
|
),
|
|
}))
|
|
|
|
export default useDropdownStore
|