- useMenuState에 menuMounted 추가, 모바일은 항상 닫힘 상태로 시작 - 좌측 사이드바 모바일 오버레이·백드롭을 마운트 이후에만 열리도록 게이팅 - 데스크톱 기본 열림·저장 설정은 그대로 유지 - v1.10.30 Co-authored-by: Cursor <cursoragent@cursor.com>
59 lines
1.4 KiB
JavaScript
59 lines
1.4 KiB
JavaScript
const menuStorageKey = 'MENU_STATE'
|
|
|
|
/**
|
|
* 좌측 메뉴 열림 상태 관리
|
|
* @returns {{menuOpen: import('vue').Ref<boolean>, toggleMenu: Function, closeMenu: Function}} 메뉴 상태와 토글·닫기
|
|
*/
|
|
export const useMenuState = () => {
|
|
const menuOpen = useState('site-menu-open', () => true)
|
|
const menuMounted = useState('site-menu-mounted', () => false)
|
|
|
|
onMounted(() => {
|
|
if (menuMounted.value) {
|
|
return
|
|
}
|
|
|
|
const isNarrow = window.matchMedia('(max-width: 1023px)').matches
|
|
|
|
if (isNarrow) {
|
|
// 모바일은 항상 닫힌 상태로 시작한다(데스크톱 저장 설정은 보존).
|
|
menuOpen.value = false
|
|
} else {
|
|
const savedState = localStorage.getItem(menuStorageKey)
|
|
if (savedState) {
|
|
menuOpen.value = savedState === 'open'
|
|
}
|
|
}
|
|
|
|
menuMounted.value = true
|
|
})
|
|
|
|
/**
|
|
* 좌측 메뉴 열림 상태 토글
|
|
* @returns {void}
|
|
*/
|
|
const toggleMenu = () => {
|
|
menuOpen.value = !menuOpen.value
|
|
localStorage.setItem(menuStorageKey, menuOpen.value ? 'open' : 'closed')
|
|
}
|
|
|
|
/**
|
|
* 좌측 메뉴를 닫는다(모바일 오버레이·백드롭에서 사용).
|
|
* @returns {void}
|
|
*/
|
|
const closeMenu = () => {
|
|
if (!menuOpen.value) {
|
|
return
|
|
}
|
|
menuOpen.value = false
|
|
localStorage.setItem(menuStorageKey, 'closed')
|
|
}
|
|
|
|
return {
|
|
menuOpen,
|
|
menuMounted,
|
|
toggleMenu,
|
|
closeMenu
|
|
}
|
|
}
|