feat(sw-187): Refactor dropdown to keep more logic in main-menu.ts

This commit is contained in:
Pontus Dreij
2024-09-11 11:41:26 +02:00
parent 76c7cfa6f0
commit 2734af5f3f
9 changed files with 104 additions and 77 deletions

View File

@@ -1,16 +1,43 @@
import { create } from "zustand"
import {
type DropdownState,
import type {
DropdownState,
DropdownType,
} from "@/types/components/dropdown/dropdown"
const useDropdownStore = create<DropdownState>((set) => ({
openDropdown: null,
toggleDropdown: (dropdown: DropdownType) =>
set((state) => ({
openDropdown: state.openDropdown === dropdown ? null : dropdown,
})),
// TODO: When MyPagesMobileMenu is removed, also remove the
// isMyPagesMobileMenuOpen state
const useDropdownStore = create<
DropdownState & { toggleDropdown: (dropdown: DropdownType) => void }
>((set) => ({
isHamburgerMenuOpen: false,
isMyPagesMobileMenuOpen: false,
isMyPagesMenuOpen: false,
isHeaderLanguageSwitcherOpen: false,
isHeaderLanguageSwitcherMobileOpen: false,
isFooterLanguageSwitcherOpen: false,
toggleDropdown: (dropdown) =>
set((state) => {
const newState = {
isHamburgerMenuOpen: false,
isMyPagesMobileMenuOpen: false,
isMyPagesMenuOpen: false,
isHeaderLanguageSwitcherOpen: false,
isHeaderLanguageSwitcherMobileOpen: false,
isFooterLanguageSwitcherOpen: false,
}
const currentState =
state[
`is${dropdown.charAt(0).toUpperCase() + dropdown.slice(1)}Open` as keyof DropdownState
]
newState[
`is${dropdown.charAt(0).toUpperCase() + dropdown.slice(1)}Open` as keyof DropdownState
] = !currentState
return newState
}),
}))
export default useDropdownStore