(() => { const { EventManager, pageHelper, utils, constants } = ShopbySkin; const { initialize } = pageHelper.displayDetailHelper(); const param = utils.getQueryParams(); initialize({ sectionsId: param.sectionId, by: param.sortType, }); const displayDetailItemsEl = document.querySelector('display-detail-items'); const displayDetailActionMap = { // NOTE: 좋아요버튼 클릭 PRODUCT_LIKE_BTN: ({ event, btn }) => { event?.preventDefault?.(); const productNo = Number(btn.getAttribute('shopby-product-no') ?? 0); utils.isSignIn() ? EventManager.fire('MUTATE_LIKE_PRODUCT', { productNo, onSuccess: (like) => { like ? btn.classList.add('is-active') : btn.classList.remove('is-active'); }, }) : EventManager.fire('MODAL_CONFIRM_OPEN', { message: `로그인하셔야 본 서비스를 이용하실 수 있습니다.`, noticeType: constants.NOTICE_MODAL_TYPE.WARNING, onConfirm: () => { const nextUrl = `${location.origin}${constants.PAGE.SIGN_IN}`; utils.moveTo({ url: `${nextUrl}?from=${encodeURIComponent(location.href)}`, }); }, }); }, // NOTE: 더보기 SEARCH_MORE_PRODUCT: () => { EventManager.fire('SEARCH_MORE_PRODUCT', {}); // 외부스크립트 등록 기능. 삭제금지 ShopbyExternalScript?.setPageScriptType('DISPLAY_SECTION', true); }, // NOTE: 상품터치시 상품상세로 이동전 성인상품인지 확인을 위한 이벤트 MOVE_PRODUCT_DETAIL: ({ event }) => { if (!utils.isAdultVerified(event)) { EventManager.fire('MODAL_CONFIRM_OPEN', { message: '성인인증이 필요한 상품입니다.', noticeType: 'CAUTION', onConfirm: () => { const productNo = event.target.closest('[shopby-product-no]')?.getAttribute('shopby-product-no'); const nextUrl = encodeURIComponent( `${location.origin}${constants.PAGE.PRODUCT_DETAIL}?productNo=${productNo}` ); utils.moveTo({ url: `${location.origin}${constants.PAGE.ADULT_CERTIFICATION}?go-back=true&from=${nextUrl}`, }); }, }); } }, }; const clickEventListener = (event) => { const btn = event.target.closest('[shopby-action]') || event.target.parentElement.closest('[shopby-action]'); const action = btn?.getAttribute('shopby-action'); displayDetailActionMap[action]?.({ btn, event, }); }; const setHeading = (data) => { EventManager.fire('CHANGE_SUB_TITLE', { subTitle: data.label, }); }; let shopbyCommonData = {}; EventManager.on('PAGE_LOAD_COMPLETED', (commonData) => { shopbyCommonData = commonData; }); EventManager.on('QUERY_DISPLAY_SECTIONS_IDS_SECTIONID', (data) => { setHeading(data); // 외부스크립트 등록 기능. 삭제금지 ShopbyExternalScript?.setGlobalObjectSb({ displaySection: { ...data } }); if ( !ShopbySkin.utils.isSignIn() || '93747' == shopbyCommonData?.profile?.memberGradeNo ) { if ( data?.products?.[0] ) { data?.products?.forEach((v)=>{ let hasTheIcon = false; for ( const icon of ( v.stickerInfos || [] ) ) { if ( icon?.label?.includes('점주전용') ) { hasTheIcon = true; break; } } if ( hasTheIcon ) { const itemDom = document.querySelector(`display-detail-items .thumb-item[shopby-product-no="${v.productNo}"]`); itemDom.querySelector('.product-thumb-price-info').innerHTML = `
매장 사업자 전용 상품
`; itemDom.href = `javascript:alertTheProduct();`; itemDom.querySelectorAll('a').forEach((v)=>{ v.href = `javascript:alertTheProduct();`; }); itemDom.querySelector('[shopby-action="OPEN_PRODUCT_OPTION_MODAL"]')?.remove(); } }); } } setTimeout(() => { const realSelect = document.querySelector('.real-select'); const dropdown = document.querySelector('.sort-dropdown'); const textEl = dropdown.querySelector('.sort-dropdown__text'); const selectedText = realSelect.options[realSelect.selectedIndex].text; function syncSortDropdown() { if (!realSelect || !dropdown) return; // 버튼 텍스트 맞추기 textEl.innerHTML = selectedText; // active 클래스 맞추기 dropdown .querySelectorAll('.sort-dropdown__list li') .forEach(li => { li.classList.toggle( 'is-active', li.dataset.value === realSelect.value ); }); } syncSortDropdown(); if ( !textEl.innerHTML ) { textEl.innerHTML = '신싱품순'; } }, 100); }); EventManager.on('PAGE_LOAD_COMPLETED', () => { // 외부스크립트 등록 기능. 삭제금지 ShopbyExternalScript?.setPageScriptType('DISPLAY_SECTION'); setTimeout(() => { //상품 정렬 셀렉트 박스 커스텀 document.addEventListener('click', function (e) { const btn = e.target.closest('.sort-dropdown__btn'); if (btn) { const dropdown = btn.closest('.sort-dropdown'); dropdown.classList.toggle('is-open'); return; } // 옵션 클릭 const option = e.target.closest('.sort-dropdown__list li'); if (option) { const dropdown = option.closest('.sort-dropdown'); const textEl = dropdown.querySelector('.sort-dropdown__text'); const realSelect = document.querySelector('.real-select'); const value = option.dataset.value; const text = option.innerText; // select 값 변경 realSelect.value = value; textEl.innerHTML = text; // Shopby change 발생 realSelect.dispatchEvent(new Event('change', { bubbles: true })); return; } // 바깥 클릭 시 닫기 document.querySelectorAll('.sort-dropdown').forEach(drop => { if (!drop.contains(e.target)) { drop.classList.remove('is-open'); } }); }); }, 100); }); EventManager.on('PRODUCTS_SORT_TYPE', () => { // 정렬 시 페이지 스크립트 재로드 // 외부스크립트 등록 기능. 삭제금지 ShopbyExternalScript?.setPageScriptType('DISPLAY_SECTION', true); }); displayDetailItemsEl.addEventListener('click', clickEventListener); })();