(() => { const { EventManager, utils, constants, actions } = ShopbySkin; // actions 추가 const slideMenuEL = document.querySelector('slide-menu'); const slideMenuClickActionMap = { CLOSE_SLIDE_MENU: () => { // 1. 기본 이벤트 발생 EventManager.fire('TOGGLE_HEADER_SLIDE_MENU', { type: 'close' }); // 2. [추가] 물리적으로 메뉴 닫기 (강제성 부여) // 샵바이 내부 로직이 씹히는 경우를 대비해 직접 스타일을 제어합니다. const sideMenuLayer = document.querySelector('shopby-side-menu') || document.querySelector('.side-menu') || slideMenuEL?.closest('.side-menu-content'); if (sideMenuLayer) { sideMenuLayer.style.display = 'none'; const dimmed = document.querySelector('.side-menu-dimmed') || document.querySelector('.ly_dimmed'); if (dimmed) dimmed.style.display = 'none'; document.body.style.overflow = ''; } }, TOGGLE_SLIDE_MENU_CHILD_CATEGORY: (e) => { const categoryWrapEl = e?.target?.closest('[shopby-category-no]'); EventManager.fire('TOGGLE_SLIDE_MENU_CHILD_CATEGORY', { wrapEl: categoryWrapEl, }); }, SIGN_OUT: async () => { // async 추가 (await 사용을 위해 필수) slideMenuClickActionMap.CLOSE_SLIDE_MENU(); // 로그아웃 처리 await actions.postSignOut(); utils.moveTo({ url: constants.PAGE.MAIN, }); }, GO_MY_MENU: (e) => { if (!utils.isSignedIn()) { e.preventDefault(); slideMenuClickActionMap.CLOSE_SLIDE_MENU(); const from = e.target.href; const nextUrl = `${location.origin}${constants.PAGE.SIGN_IN}`; utils.moveTo({ url: `${nextUrl}?from=${encodeURIComponent(from)}` }); } else { if (!e.target.href) { return; } slideMenuClickActionMap.CLOSE_SLIDE_MENU(); utils.moveTo({ url: e.target.href }); } }, GO_NEXT: (event) => { event.preventDefault(); const { target } = event; const href = target?.href ?? target.closest('[shopby-action="GO_NEXT"]')?.href; if (!href) { return; } slideMenuClickActionMap.CLOSE_SLIDE_MENU(); utils.moveTo({ url: href }); }, }; const clickEventListener = (e) => { const action = e?.target?.closest('[shopby-action]')?.getAttribute('shopby-action'); slideMenuClickActionMap[action]?.(e); }; slideMenuEL?.addEventListener('click', clickEventListener); EventManager.fire('MYAPP:PROXY_REGISTER', { proxyFnKey: 'slideMenuProxy', applyProxy: (proxyFn) => { slideMenuEL?.removeEventListener('click', clickEventListener); slideMenuEL?.addEventListener('click', proxyFn(clickEventListener)); }, }); })();