refactor: integrate side navigation state management into Header component for improved navigation control #21
@ -10,6 +10,7 @@ import { Swiper, SwiperSlide } from 'swiper/react'
|
|||||||
import type { HeaderProps } from '@/types/Header'
|
import type { HeaderProps } from '@/types/Header'
|
||||||
|
|
||||||
import 'swiper/css'
|
import 'swiper/css'
|
||||||
|
import { useSideNavState } from '@/store/sideNavState'
|
||||||
|
|
||||||
// type HeaderProps = {
|
// type HeaderProps = {
|
||||||
// name: string //header 이름
|
// name: string //header 이름
|
||||||
@ -19,7 +20,7 @@ import 'swiper/css'
|
|||||||
export default function Header({ name }: HeaderProps) {
|
export default function Header({ name }: HeaderProps) {
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const pathname = usePathname()
|
const pathname = usePathname()
|
||||||
const [headerAct, setHeaderAct] = useState<boolean>(false)
|
const { sideNavIsOpen, setSideNavIsOpen, reset } = useSideNavState()
|
||||||
const [isShowBackBtn, setIsShowBackBtn] = useState<boolean>(false)
|
const [isShowBackBtn, setIsShowBackBtn] = useState<boolean>(false)
|
||||||
|
|
||||||
if (pathname === '/login') {
|
if (pathname === '/login') {
|
||||||
@ -30,6 +31,8 @@ export default function Header({ name }: HeaderProps) {
|
|||||||
if (pathname !== '/') {
|
if (pathname !== '/') {
|
||||||
setIsShowBackBtn(true)
|
setIsShowBackBtn(true)
|
||||||
}
|
}
|
||||||
|
//사이드바 초기화
|
||||||
|
reset()
|
||||||
}, [pathname])
|
}, [pathname])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -43,13 +46,13 @@ export default function Header({ name }: HeaderProps) {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
<h2 className="logo">
|
<h2 className="logo">
|
||||||
<Link href={'#'}>{name}</Link>
|
<Link href={'/'}>{name}</Link>
|
||||||
</h2>
|
</h2>
|
||||||
<div className="side-button-wrap">
|
<div className="side-button-wrap">
|
||||||
<button className="side-button" onClick={() => setHeaderAct(true)}></button>
|
<button className="side-button" onClick={() => setSideNavIsOpen(true)}></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className={`side-nav ${headerAct ? 'active' : ''}`}>
|
<div className={`side-nav ${sideNavIsOpen ? 'active' : ''}`}>
|
||||||
<div className="side-nav-inner">
|
<div className="side-nav-inner">
|
||||||
<div className="side-nav-header">
|
<div className="side-nav-header">
|
||||||
<div className="side-header-profile">
|
<div className="side-header-profile">
|
||||||
@ -62,7 +65,7 @@ export default function Header({ name }: HeaderProps) {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="side-close-wrap">
|
<div className="side-close-wrap">
|
||||||
<button className="side-close-btn" onClick={() => setHeaderAct(false)}></button>
|
<button className="side-close-btn" onClick={() => setSideNavIsOpen(false)}></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="side-swiper-wrap">
|
<div className="side-swiper-wrap">
|
||||||
|
|||||||
21
src/store/sideNavState.ts
Normal file
21
src/store/sideNavState.ts
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import { create } from 'zustand'
|
||||||
|
|
||||||
|
type SideNavState = {
|
||||||
|
sideNavIsOpen: boolean
|
||||||
|
setSideNavIsOpen: (value: boolean) => void
|
||||||
|
reset: () => void
|
||||||
|
}
|
||||||
|
|
||||||
|
type InitialState = {
|
||||||
|
sideNavIsOpen: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
const initialState: InitialState = {
|
||||||
|
sideNavIsOpen: false,
|
||||||
|
}
|
||||||
|
|
||||||
|
export const useSideNavState = create<SideNavState>((set) => ({
|
||||||
|
...initialState,
|
||||||
|
setSideNavIsOpen: (value: boolean) => set((state) => ({ ...state, sideNavIsOpen: value })),
|
||||||
|
reset: () => set(initialState),
|
||||||
|
}))
|
||||||
Loading…
x
Reference in New Issue
Block a user