2024-09-13 13:27:19 +09:00

144 lines
4.5 KiB
JavaScript

'use client'
import { Fragment, useState } from 'react'
import Link from 'next/link'
import { usePathname, useRouter } from 'next/navigation'
import { useMessage } from '@/hooks/useMessage'
import { logout } from '@/lib/authActions'
import QSelectBox from '@/components/common/select/QSelectBox'
export const ToggleonMouse = (e, act, target) => {
const listWrap = e.target.closest(target)
const ListItem = Array.from(listWrap.childNodes)
ListItem.forEach((el) => {
if (act === 'add') {
el.classList.add('mouse')
} else {
el.classList.remove('mouse')
}
})
if (act === 'add') {
e.target.parentElement.classList.remove('mouse')
}
}
export default function Header(props) {
const { loginedUserNm } = props
const { getMessage } = useMessage()
const pathName = usePathname()
// if (pathName.includes('login') || pathName.includes('join')) {
// return null
// }
const [selected, setSelected] = useState('')
const SelectOptions = [
{ id: 0, name: 'オンライン保証シ', link: '' },
{ id: 1, name: 'ステム', link: '' },
{ id: 2, name: 'TEST1', link: 'https://www.weather.go.kr/w/index.do' },
{ id: 3, name: 'TEST2', link: 'https://www.google.com' },
]
const menus = [
{ id: 0, name: 'header.menus.home', url: '/', children: [] },
{
id: 1,
name: 'header.menus.management',
url: '',
children: [
{ id: 3, name: 'header.menus.management.stuff', url: '/management/stuff', children: [] },
{ id: 4, name: 'header.menus.management.plan', url: '/floor-plan', children: [] },
],
},
{
id: 2,
name: 'header.menus.community',
url: '',
children: [
{ id: 5, name: 'header.menus.community.notice', url: '/community/notice', children: [] },
{ id: 6, name: 'header.menus.community.faq', url: '/community/faq', children: [] },
{ id: 7, name: 'header.menus.community.archive', url: '/community/archive', children: [] },
],
},
]
const onChangeSelect = (option) => {
setSelected(option)
}
const navPage = () => {
if (selected.link) {
location.href = selected.link
}
}
const getMenuTemplate = (menus) => {
return menus.map((menu) => {
return (
<li
key={`${menu.id}`}
className={'nav-item'}
onMouseEnter={(e) => ToggleonMouse(e, 'add', 'nav > ul')}
onMouseLeave={(e) => ToggleonMouse(e, 'remove', 'nav > ul')}
>
{menu.children.length === 0 ? (
<Link key={`${menu.id}`} href={menu.url}>
{getMessage(menu.name)}
</Link>
) : (
<Fragment key={`${menu.id}`}>
<button>{getMessage(menu.name)}</button>
<ul className="nav-depth2">
{menu.children.map((m) => {
return (
<li
key={`${m.id}`}
className={'nav-depth2-item'}
onMouseEnter={(e) => ToggleonMouse(e, 'add', 'li > ul')}
onMouseLeave={(e) => ToggleonMouse(e, 'remove', 'li > ul')}
>
<Link href={m.url}>{getMessage(m.name)}</Link>
</li>
)
})}
</ul>
</Fragment>
)}
</li>
)
})
}
return (
!(pathName.includes('login') || pathName.includes('join')) && (
<header>
<div className="header-inner">
<div className="header-right">
<h1 className="logo">
<Link href={'/'}></Link>
</h1>
<nav>
<ul className="nav-list ">{getMenuTemplate(menus)}</ul>
</nav>
</div>
<div className="header-left">
<div className="profile-box">
<button className="profile">{loginedUserNm}</button>
</div>
<div className="sign-out-box">
<button className="sign-out" onClick={() => logout()}>
{getMessage('header.logout')}
</button>
</div>
<div className="select-box">
<QSelectBox title={'Q.ORDER'} options={SelectOptions} onChange={onChangeSelect} />
</div>
<div className="btn-wrap">
<button className="btn-frame small dark" onClick={() => navPage()}>
{getMessage('header.go')}
</button>
</div>
</div>
</div>
</header>
)
)
}