'use client' import { Fragment, useCallback, useContext, useEffect, useState } from 'react' import Link from 'next/link' import { usePathname, useRouter } from 'next/navigation' import { useRecoilState, useRecoilValue, useResetRecoilState } from 'recoil' import { dimmedStore, sessionStore } from '@/store/commonAtom' import { useMessage } from '@/hooks/useMessage' import { checkSession, logout } from '@/lib/authActions' import QSelectBox from '@/components/common/select/QSelectBox' import UserInfoModal from '@/components/myInfo/UserInfoModal' import { useAxios } from '@/hooks/useAxios' import { globalLocaleStore } from '@/store/localeAtom' import { stuffSearchState } from '@/store/stuffAtom' import { QcastContext } from '@/app/QcastProvider' import { usePopup } from '@/hooks/usePopup' import { commonCodeState } from '@/store/commonCodeAtom' import { isObjectNotEmpty } from '@/util/common-utils' 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 [userInfoModal, setUserInfoModal] = useState(false) const router = useRouter() const [stuffSearch, setStuffSearch] = useRecoilState(stuffSearchState) const { closeAll } = usePopup() const { userSession } = props const [sessionState, setSessionState] = useRecoilState(sessionStore) const { getMessage } = useMessage() const pathName = usePathname() // if (pathName.includes('login') || pathName.includes('join')) { // return null // } const [selected, setSelected] = useState('') const { isGlobalLoading } = useContext(QcastContext) const dimmedState = useRecoilValue(dimmedStore) const isDimmed = dimmedState ? 'opacity-50 bg-black' : '' // Link 이동 자동 로그인 const [globalLocaleState, setGlbalLocaleState] = useRecoilState(globalLocaleStore) const { promisePost } = useAxios(globalLocaleState) const qOrderUrl = process.env.NEXT_PUBLIC_Q_ORDER_AUTO_LOGIN_URL const qMusubiUrl = process.env.NEXT_PUBLIC_Q_MUSUBI_AUTO_LOGIN_URL const [SelectOptions, setSelectOptions] = useState([]) const [commonCode, setCommonCode] = useRecoilState(commonCodeState) const { promiseGet } = useAxios() useEffect(() => { const getCommonCode = async () => { await promiseGet({ url: '/api/commcode/qc-comm-code' }).then((res) => { setCommonCode(Object.groupBy(res.data, ({ clHeadCd }) => clHeadCd)) }) } if (!isObjectNotEmpty(commonCode)) { getCommonCode() } }, []) const getAutoLoginParam = async () => { await promisePost({ url: '/api/login/v1.0/user/login/autoLoginEncryptData', data: { loginId: userSession.userId } }) .then((res) => { if (res) { setSelectOptions( userSession.storeId === 'T01' ? [ { id: 0, name: getMessage('site.header.link1'), target: '_blank' }, { id: 1, name: 'HANASYS ORDER', link: `${qOrderUrl}?autoLoginParam1=${encodeURIComponent(res.data)}`, target: '_blank' }, { id: 2, name: 'HANASYS Musubi', link: `${qMusubiUrl}?autoLoginParam1=${encodeURIComponent(res.data)}`, target: '_blank' }, { id: 3, name: getMessage('site.header.link2'), link: `https://q-warranty.q-cells.jp/seller_login`, target: '_blank' }, ] : userSession.groupId === '60000' ? [ { id: 0, name: getMessage('site.header.link1'), target: '_blank' }, { id: 1, name: 'HANASYS ORDER', link: `${qOrderUrl}?autoLoginParam1=${encodeURIComponent(res.data)}`, target: '_blank' }, { id: 2, name: getMessage('site.header.link2'), link: `https://q-warranty.q-cells.jp/seller_login`, target: '_blank' }, ] : [ { id: 0, name: getMessage('site.header.link1'), target: '_blank' }, { id: 1, name: 'HANASYS Musubi', link: `${qMusubiUrl}?autoLoginParam1=${encodeURIComponent(res.data)}`, target: '_blank' }, { id: 2, name: getMessage('site.header.link2'), link: `https://q-warranty.q-cells.jp/seller_login`, target: '_blank' }, ], ) onChangeSelect({ id: 0, name: getMessage('site.header.link1') }) } }) .catch((error) => { alert(error.response.data.message) }) } useEffect(() => { getAutoLoginParam() }, [userSession]) const menus = [ { id: 0, name: 'header.menus.home', url: '/', children: [] }, { id: 1, name: 'header.menus.management', url: '', children: [ // { id: 3, name: 'header.menus.management.newStuff', url: '/management/stuff/tempdetail', children: [] }, { id: 3, name: 'header.menus.management.newStuff', url: '/management/stuff/tempReg', children: [] }, { id: 4, name: 'header.menus.management.stuffList', url: '/management/stuff', 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 syncSession = useCallback(() => { setSessionState({ ...userSession }) }) useEffect(() => { syncSession() }, [userSession]) const onChangeSelect = (option) => { setSelected(option) } const navPage = () => { if (selected.link) { if (selected.target === '_blank') { window.open(selected.link) } else { location.href = selected.link } } } // 물건메뉴 이외 클릭시 물건 리코일 비우기 const removeStuffRecoil = (menu) => { //menu.id 0 HOME //menu.id 3 신규물건등록 //menu.id 4 물건리스트 //menu.id 5 공지사항 //menu.id 6 FAQ //menu.id 7 자료실 if (menu.id === 0 || menu.id === 5 || menu.id === 6 || menu.id === 7) { setStuffSearch({ ...stuffSearch, code: 'DELETE', }) } } const getMenuTemplate = (menus) => { return menus.map((menu) => { return (