import React, { useEffect, useState } from 'react' import { useRouter } from 'next/router' import { useTranslation } from 'next-i18next' import { setCookie } from 'cookies-next' import classNames from 'classnames' import { retrieveCookies, retrieveLocaleCookies } from '~utils/retrieveCookies' import Link from 'next/link' import * as Switch from '@radix-ui/react-switch' import AboutModal from '~components/AboutModal' import AccountModal from '~components/AccountModal' import ChangelogModal from '~components/ChangelogModal' import RoadmapModal from '~components/RoadmapModal' import LoginModal from '~components/LoginModal' import SignupModal from '~components/SignupModal' import './index.scss' interface Props { authenticated: boolean open: boolean username?: string onClickOutside: () => void logout?: () => void } const HeaderMenu = (props: Props) => { // Setup const router = useRouter() const data: GranblueCookie | undefined = retrieveCookies() const localeData = retrieveLocaleCookies() const { t } = useTranslation('common') // Refs const ref: React.RefObject = React.createRef() useEffect(() => { const handleClickOutside = (event: Event) => { const target = event.target instanceof Element ? event.target : null const isButton = target && target.closest('.Button.Active') if ( ref.current && target && !ref.current.contains(target) && !isButton && props.open ) { props.onClickOutside() } } document.addEventListener('click', handleClickOutside, true) return () => { document.removeEventListener('click', handleClickOutside, true) } }, [props.onClickOutside]) const [checked, setChecked] = useState(false) useEffect(() => { setChecked(localeData === 'ja' ? true : false) }, [localeData]) function handleCheckedChange(value: boolean) { const language = value ? 'ja' : 'en' setCookie('NEXT_LOCALE', language, { path: '/' }) router.push(router.asPath, undefined, { locale: language }) } const menuClasses = classNames({ Menu: true, auth: props.authenticated, open: props.open, }) function authItems() { return ( ) } function unauthItems() { return ( ) } return ( ) } export default HeaderMenu