"use client" import { useEffect } from "react" import { Dialog, Modal } from "react-aria-components" import { useIntl } from "react-intl" import { useMediaQuery } from "usehooks-ts" import { findMyBooking, findMyBookingCurrentWebPath, } from "@scandic-hotels/common/constants/routes/findMyBooking" import { getCurrentWebUrl } from "@scandic-hotels/common/utils/url" import { customerService } from "@/constants/webHrefs" import { env } from "@/env/client" import useDropdownStore from "@/stores/main-menu" import { IconName } from "@/components/Icons/iconName" import LanguageSwitcher from "@/components/LanguageSwitcher" import { useHandleKeyUp } from "@/hooks/useHandleKeyUp" import { useIsLangLive } from "@/hooks/useIsLangLive" import useLang from "@/hooks/useLang" import HeaderLink from "../../HeaderLink" import TopLink from "../../TopLink" import styles from "./mobileMenu.module.css" import { DropdownTypeEnum } from "@/types/components/dropdown/dropdown" import type { MobileMenuProps } from "@/types/components/header/mobileMenu" export default function MobileMenu({ children, topLink, isLoggedIn, }: React.PropsWithChildren) { const isLangLive = useIsLangLive() const lang = useLang() const intl = useIntl() const { toggleDropdown, isHamburgerMenuOpen, isMyPagesMobileMenuOpen, isHeaderLanguageSwitcherMobileOpen, isFooterLanguageSwitcherOpen, } = useDropdownStore() const isHamburgerExtended = isHamburgerMenuOpen || isMyPagesMobileMenuOpen || isHeaderLanguageSwitcherMobileOpen || isFooterLanguageSwitcherOpen const isAboveMobile = useMediaQuery("(min-width: 768px)") useEffect(() => { if (isAboveMobile && isHamburgerMenuOpen) { toggleDropdown(DropdownTypeEnum.HamburgerMenu) } }, [isAboveMobile, isHamburgerMenuOpen, toggleDropdown]) useHandleKeyUp((event: KeyboardEvent) => { if (event.key === "Escape" && isHamburgerMenuOpen) { toggleDropdown(DropdownTypeEnum.HamburgerMenu) } }) // Making sure the menu is always opened at the top of the page, just below the header. useEffect(() => { if (isHamburgerMenuOpen) { window.scrollTo({ top: 0, behavior: "instant" }) } }, [isHamburgerMenuOpen]) const closeMsg = intl.formatMessage({ defaultMessage: "Close menu", }) const openMsg = intl.formatMessage({ defaultMessage: "Open menu", }) const baseUrl = env.NEXT_PUBLIC_PUBLIC_URL || "https://www.scandichotels.com" const findMyBookingUrl = !isLangLive ? getCurrentWebUrl({ path: findMyBookingCurrentWebPath[lang], lang, baseUrl, }) : findMyBooking[lang] return ( <> {children}
toggleDropdown(DropdownTypeEnum.HamburgerMenu)} > {intl.formatMessage({ defaultMessage: "Find booking", })} {intl.formatMessage({ defaultMessage: "Customer service", })}
) } export function MobileMenuSkeleton() { const intl = useIntl() return ( ) }