feat(SW-187): simplify dropdown menu

This commit is contained in:
Pontus Dreij
2024-09-09 14:58:22 +02:00
parent ef33d082d8
commit 07eb0401bb
9 changed files with 93 additions and 158 deletions

View File

@@ -14,6 +14,7 @@ import NavigationMenu from "../NavigationMenu"
import styles from "./mobileMenu.module.css"
import { DropdownType } from "@/types/components/dropdown/dropdown"
import type { MobileMenuProps } from "@/types/components/header/mobileMenu"
export default function MobileMenu({
@@ -22,30 +23,28 @@ export default function MobileMenu({
topLink,
}: MobileMenuProps) {
const intl = useIntl()
const {
isHamburgerMenuOpen,
isMyPagesMobileMenuOpen,
isHeaderLanguageSwitcherOpen,
toggleHamburgerMenu,
toggleMyPagesMobileMenu,
toggleLanguageSwitcher,
} = useDropdownStore()
const { toggleDropdown, openDropdown } = useDropdownStore()
const isHamburgerMenuOpen = openDropdown === DropdownType.HamburgerMenu
const isMyPagesMobileMenuOpen =
openDropdown === DropdownType.MyPagesMobileMenu
const isHeaderLanguageSwitcherOpen =
openDropdown === DropdownType.HeaderLanguage
useHandleKeyUp((event: KeyboardEvent) => {
if (event.key === "Escape" && isHamburgerMenuOpen) {
toggleHamburgerMenu()
toggleDropdown(DropdownType.HamburgerMenu)
}
})
function handleHamburgerClick() {
if (isMyPagesMobileMenuOpen) {
toggleMyPagesMobileMenu()
toggleDropdown(DropdownType.MyPagesMobileMenu)
} else {
if (isHeaderLanguageSwitcherOpen) {
toggleLanguageSwitcher("header")
toggleDropdown(DropdownType.HeaderLanguage)
}
toggleHamburgerMenu()
toggleDropdown(DropdownType.HamburgerMenu)
}
}
@@ -61,7 +60,10 @@ export default function MobileMenu({
>
<span className={styles.bar}></span>
</button>
<Modal className={styles.modal} isOpen={isHamburgerMenuOpen}>
<Modal
className={styles.modal}
isOpen={isHamburgerMenuOpen || isHeaderLanguageSwitcherOpen}
>
<Dialog
className={styles.dialog}
aria-label={intl.formatMessage({ id: "Menu" })}

View File

@@ -7,7 +7,6 @@ import useDropdownStore from "@/stores/main-menu"
import { ChevronDownIcon } from "@/components/Icons"
import Subtitle from "@/components/TempDesignSystem/Text/Subtitle"
import { useHandleKeyUp } from "@/hooks/useHandleKeyUp"
import useLang from "@/hooks/useLang"
import { getInitials } from "@/utils/user"
import Avatar from "../Avatar"
@@ -16,6 +15,7 @@ import MyPagesMenuContent from "../MyPagesMenuContent"
import styles from "./myPagesMenu.module.css"
import { DropdownType } from "@/types/components/dropdown/dropdown"
import type { MyPagesMenuProps } from "@/types/components/header/myPagesMenu"
export default function MyPagesMenu({
@@ -24,18 +24,22 @@ export default function MyPagesMenu({
user,
}: MyPagesMenuProps) {
const intl = useIntl()
const lang = useLang()
const { toggleMyPagesMenu, isMyPagesMenuOpen } = useDropdownStore()
const { toggleDropdown, openDropdown } = useDropdownStore()
const isMyPagesMenuOpen = openDropdown === DropdownType.MyPagesMenu
useHandleKeyUp((event: KeyboardEvent) => {
if (event.key === "Escape" && isMyPagesMenuOpen) {
toggleMyPagesMenu()
toggleDropdown(DropdownType.MyPagesMenu)
}
})
return (
<div className={styles.myPagesMenu}>
<MainMenuButton className={styles.button} onClick={toggleMyPagesMenu}>
<MainMenuButton
className={styles.button}
onClick={() => toggleDropdown(DropdownType.MyPagesMenu)}
>
<Avatar initials={getInitials(user.firstName, user.lastName)} />
<Subtitle type="two" className={styles.userName}>
{intl.formatMessage({ id: "Hi" })} {user.firstName}!
@@ -51,7 +55,7 @@ export default function MyPagesMenu({
navigation={navigation}
user={user}
membership={membership}
toggleOpenStateFn={toggleMyPagesMenu}
toggleOpenStateFn={() => toggleDropdown(DropdownType.MyPagesMenu)}
/>
</div>
) : null}

View File

@@ -14,6 +14,7 @@ import MyPagesMenuContent from "../MyPagesMenuContent"
import styles from "./myPagesMobileMenu.module.css"
import { DropdownType } from "@/types/components/dropdown/dropdown"
import type { MyPagesMenuProps } from "@/types/components/header/myPagesMenu"
export default function MyPagesMobileMenu({
@@ -22,12 +23,13 @@ export default function MyPagesMobileMenu({
user,
}: MyPagesMenuProps) {
const intl = useIntl()
const { toggleMyPagesMobileMenu, isMyPagesMobileMenuOpen } =
useDropdownStore()
const { openDropdown, toggleDropdown } = useDropdownStore()
const isMyPagesMobileMenuOpen =
openDropdown === DropdownType.MyPagesMobileMenu
useHandleKeyUp((event: KeyboardEvent) => {
if (event.key === "Escape" && isMyPagesMobileMenuOpen) {
toggleMyPagesMobileMenu()
toggleDropdown(DropdownType.MyPagesMobileMenu)
}
})
@@ -35,7 +37,7 @@ export default function MyPagesMobileMenu({
<div className={styles.myPagesMobileMenu}>
<MainMenuButton
className={styles.button}
onClick={toggleMyPagesMobileMenu}
onClick={() => toggleDropdown(DropdownType.MyPagesMobileMenu)}
aria-label={intl.formatMessage({ id: "Open my pages menu" })}
>
<Avatar initials={getInitials(user.firstName, user.lastName)} />
@@ -49,7 +51,9 @@ export default function MyPagesMobileMenu({
membership={membership}
navigation={navigation}
user={user}
toggleOpenStateFn={toggleMyPagesMobileMenu}
toggleOpenStateFn={() =>
toggleDropdown(DropdownType.MyPagesMobileMenu)
}
/>
</Dialog>
</Modal>