(() => {
const { EventManager, pageHelper, actions } = ShopbySkin;
const myLikeProductListHelper = pageHelper.myLikeProductListHelper();
const searchParams = new URLSearchParams(location.search);
const pageNumber = searchParams.get('pageNumber');
const pageSize = searchParams.get('pageSize');
const hasTotalCount = searchParams.get('hasTotalCount');
myLikeProductListHelper.initialize({
pageNumber,
pageSize,
hasTotalCount,
});
let shopbyCommonData = {};
EventManager.on('PAGE_LOAD_COMPLETED', (commonData) => {
shopbyCommonData = commonData;
});
const moduleActionHandler = {
INQUIRE_PRODUCT: (_, target) => {
const productNo = target
.closest('[shopby-product-no]')
?.getAttribute('shopby-product-no');
const productName = target
.closest('[shopby-product-name]')
?.getAttribute('shopby-product-name');
const imageUrl = target
.closest('[shopby-image-url]')
?.getAttribute('shopby-image-url');
EventManager.fire('OPEN_LAYER_MODAL', {
name: 'product-inquiry-form',
title: '상품문의',
modalAddClass: 'product-inquiry-form-modal',
isFull: false,
data: {
productNo,
productName,
imageUrl,
isModify: false,
commonData: myLikeProductListHelper.commonData,
},
onClose: ({ reason }) => {
if (reason === 'DID_SUBMIT') {
EventManager.fire('MODAL_ALERT_OPEN', {
noticeType: 'SUCCESS',
message: '상품문의가 등록됐습니다.',
onClose: () => {
location.reload();
},
});
}
},
});
},
DELETE_LIKE_PRODUCT: (_, target) => {
const productNo = target
.closest('[shopby-product-no]')
?.getAttribute('shopby-product-no');
EventManager.fire('MODAL_CONFIRM_OPEN', {
noticeType: 'WARNING',
message: `선택하신 상품을 삭제하시겠습니까?`,
onConfirm: async () => {
await actions.postProfileLikeByProductNos({
productNos: [productNo],
});
EventManager.fire('MODAL_ALERT_OPEN', {
noticeType: 'SUCCESS',
message: '삭제되었습니다.',
onClose: () => {
location.reload();
},
});
},
});
},
DELETE_SELECTED_LIKE_PRODUCTS: (_, target) => {
const selectedCount = target.getAttribute('shopby-selected-count');
const checkedProductNosAsString = target.getAttribute(
'shopby-checked-product-nos-as-string',
);
if (!Number(selectedCount)) {
EventManager.fire('MODAL_ALERT_OPEN', {
noticeType: 'CAUTION',
message: '선택하신 상품이 없습니다.',
});
return;
}
const productNos = checkedProductNosAsString.split(',');
EventManager.fire('MODAL_CONFIRM_OPEN', {
noticeType: 'WARNING',
message: `선택하신 ${productNos.length}개의 상품을 삭제하시겠습니까?`,
onConfirm: async () => {
await actions.postProfileLikeByProductNos({ productNos });
EventManager.fire('MODAL_ALERT_OPEN', {
noticeType: 'SUCCESS',
message: '삭제되었습니다.',
onClose: () => {
location.reload();
},
});
},
});
},
GRADE_BENEFIT: () => {
EventManager.fire('OPEN_LAYER_MODAL', {
name: 'grade-benefit-guide',
title: '등급혜택 안내',
isFull: false,
data: {
commonData: shopbyCommonData,
},
});
},
};
document
.querySelector('like-product-total-count')
?.addEventListener('click', ({ target }) => {
const action = target.getAttribute('shopby-action');
moduleActionHandler[action]?.(myLikeProductListHelper, target);
});
document
.querySelector('like-product-list')
?.addEventListener('click', ({ target }) => {
const action = target.getAttribute('shopby-action');
moduleActionHandler[action]?.(myLikeProductListHelper, target);
});
document
.querySelector('profile-summary')
?.addEventListener('click', ({ target }) => {
const actionTarget = target.getAttribute('shopby-action');
if (!actionTarget) {
return;
}
moduleActionHandler[actionTarget]({ target });
});
})();