(() => {
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,
});
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();
},
});
},
});
},
ALERT_ERROR: (_) => {
EventManager.fire("MODAL_ALERT_OPEN", {
noticeType: "WARNING",
message: "구매제한 상품입니다",
});
},
};
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);
});
})();