/*! 2024. 5. 2. 오후 4:59:11 */ (async () => { // webpackBootstrap var __webpack_exports__ = {}; const { pageHelper, utils, EventManager, constants, } = ShopbySkin; const { initialize } = pageHelper.productListHelper(); const param = utils.getQueryParams(); const productListActionMap = { // NOTE: 좋아요버튼 클릭 PRODUCT_LIKE_BTN: ({ event }) => { event?.preventDefault?.(); const btn = event.target.closest('[shopby-product-no]'); 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: () => { // TODO: 로그인페이지에서 다시 되돌아올 왔을때 좋아요가 반영되어야함.. const nextUrl = `${location.origin}/pages/sign-in/sign-in.html`; location.href = `${nextUrl}?from=${encodeURIComponent(location.href)}`; }, }); }, MOVE_PRODUCT_DETAIL: ({ event }) => { if (!utils.isAdultVerified(event)) { EventManager.fire('MODAL_CONFIRM_OPEN', { message: '성인인증이 필요한 상품입니다.', noticeType: 'CAUTION', onConfirm: () => { location.href = '/pages/intro/adult-certification.html'; }, }); } }, PRODUCTS_SORT_TYPE2: ({ event }) => { const sortType = event.target.value; const queryParams = utils.getQueryParams(); const nextQueryStr = new URLSearchParams({ ...queryParams, sortType, }).toString() ; location.href = location.pathname + '?' + nextQueryStr; } }; (() => { initialize({ ...param, }); const clickEventListener = (e) => { if (!e?.target) { return; } const btn = e.target.closest('[shopby-action]') || e.target.parentElement.closest('[shopby-action]'); const action = btn?.getAttribute('shopby-action'); productListActionMap[action]?.({ event: e, }); }; document.addEventListener('click', clickEventListener); EventManager.on('QUERY_SEARCH_PRODUCTS_BY', (data) => { console.log(data); }); EventManager.on('PAGE_LOAD_COMPLETED', () => { $(document).ready(() => { setTimeout(() => { const params = new URLSearchParams(location.search); const brandNo = params.get('brandNo'); const excludeCategoryNo = params.get('excludeCategoryNo'); const pagingAnchorEls = document.querySelectorAll('.pagination a'); for ( const pagingAnchorEl of pagingAnchorEls ) { const hrefUrl = new URL(pagingAnchorEl.href); const hrefParams = new URLSearchParams(hrefUrl.search); hrefParams.set('brandNo', brandNo); hrefParams.set('excludeCategoryNo', excludeCategoryNo); pagingAnchorEl.href = `${hrefUrl.pathname}?${decodeURIComponent( hrefParams.toString() )}`; } }, 1000); }); }); })(); })(); //2024.07.17 snpu98 (() => { const language = 'ko'; const platform = 'pc'; const { EventManager, utils, actions } = ShopbySkin; const getExcludeCategoryNos = async () => { const dataSummery = await fetchProductSummery(); const excludeCategoryNosArr = []; for ( const category1 of dataSummery.depth1Categories ) { const categoryNo1 = category1.categoryNo; const label1 = category1.label; if ( 'en' == label1 ) { excludeCategoryNosArr.push(categoryNo1); } } const excludeCategoryNos = excludeCategoryNosArr.join(','); return excludeCategoryNos; }; const fetchProductSummery = async (brandNo = '', excludeCategoryNos = '') => { const queryStr = brandNo ? new URLSearchParams({ brandNos: brandNo, excludeCategoryNos, "filter.saleStatus": "ALL_CONDITIONS", "filter.soldout": true, }).toString() : ''; return await fetch(`https://shop-api.e-ncp.com/products/search/summary?${queryStr}`, { method: 'GET', headers: { 'Content-Type': 'application/json', Version: '1.0', clientId: '99ZDpWfrizZV8irrjPvB8w==', platform: 'PC', language: 'ko', }, }).then((res) => res.json()); }; const fetchBrand = async (brandNo) => { return await fetch(`https://shop-api.e-ncp.com/display/brands/${brandNo}`, { method: 'GET', headers: { 'Content-Type': 'application/json', Version: '1.0', clientId: '99ZDpWfrizZV8irrjPvB8w==', platform: 'PC', language: 'ko', }, }).then((res) => res.json()); }; const renderCategoryList = async () => { const queryParams = utils.getQueryParams(); const brandNo = queryParams.brandNo ? queryParams.brandNo : ''; const excludeCategoryNos = await getExcludeCategoryNos(); const dataSummery = await fetchProductSummery(brandNo, excludeCategoryNos); const categoryListEl = document.querySelector('.category_list'); const pathname = location.pathname; const activeAll = queryParams.categoryNo === undefined ? 'active' : ''; categoryListEl.innerHTML = ` `; for ( const category of dataSummery.depth1Categories ) { const categoryNo = category.categoryNo; const label = category.label; const active = queryParams.categoryNo == categoryNo ? 'active' : ''; const params = new URLSearchParams(location.search); params.set('brandNo', brandNo); params.set('categoryNo', categoryNo); params.set('excludeCategoryNo', excludeCategoryNos); if ( 'en' != label && 'celleanser' != label ) { categoryListEl.innerHTML += ` `; } }; }; const renderSkinBanner = async (brandNo) => { const brand = await fetchBrand(brandNo); const banner = await actions.getBannerById?.({ bannerId: `${language}_${platform}_brand_${brand.name}` }); if ( Array.isArray(banner?.data?.banners) ) { const bannerData = banner.data.banners[0]; const imageUrl = bannerData.bannerImages?.[0].imageUrl; const width = banner.data.imageSize.width; const height = banner.data.imageSize.height; if (!bannerData.visible) { return; } const bannerWrapperEl = document.querySelector('.skin-banner'); const bannerEl = document.querySelector('.skin-banner__contents'); bannerEl.innerHTML = ` ${brand.name} `; bannerWrapperEl.style.display = 'block'; } }; EventManager.on('PAGE_LOAD_COMPLETED', async (commonData) => { const queryParams = utils.getQueryParams(); const brandNo = queryParams.brandNo ? queryParams.brandNo : ''; if (brandNo) { await renderCategoryList(); await renderSkinBanner(brandNo); } //브랜드 페이지내 브랜드 메뉴 마우스오버 제거 const handleMouseEnter = function () { document.querySelector('.brand_penel').classList.add('brand_list'); }; document.getElementById('cateBrand').addEventListener('mouseenter', handleMouseEnter); //브랜드 롤링 const brandrolling = new Swiper('.brand-container', { slidesPerView: 6, // 화면에 보여줄 슬라이드 수 spaceBetween: 0, loop: true, // 무한 루프 navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev', }, pagination:false, autoplay: { delay: 2500, disableOnInteraction: false, }, }); }); })();