(() => {
const { EventManager } = ShopbySkin;
const containerEl = document.querySelector(
'[shopby-helper-key="profile-shipping-address"]'
);
const addressListComponent = containerEl.querySelector(
"my-shipping-address-list"
);
const CLICK_EVENT_HANDLER_MAP = {
REGISTER_SHIPPING_ADDRESS: ({ totalCount }) => {
const afterRegisterForm = ({ reason }) => {
if (reason === "DID_SUBMIT") {
EventManager.fire("MODAL_ALERT_OPEN", {
noticeType: "SUCCESS",
message: "배송지가 등록되었습니다.",
data: {
totalCount,
},
onClose: () => {
addressListComponent.fetchList({
refresh: true,
});
},
});
}
};
EventManager.fire("OPEN_LAYER_MODAL", {
isFull: false,
modalAddClass: "address-form",
name: "shipping-address-form",
title: "배송지 등록",
onClose: afterRegisterForm,
data: {
totalCount,
},
});
},
DELETE_SHIPPING_ADDRESS: ({ addressNo, isDefault, addressName }) => {
if (!addressNo) {
return;
}
if (isDefault) {
EventManager.fire("MODAL_ALERT_OPEN", {
noticeType: "CAUTION",
message:
"기본 배송지는 삭제할 수 없습니다.
변경 후에 삭제해 주세요.",
});
return;
}
EventManager.fire("MODAL_CONFIRM_OPEN", {
noticeType: "WARNING",
message: `${addressName}${
addressName ? " " : ""
}배송지를 삭제하시겠습니까?`,
onConfirm: async () => {
await addressListComponent.deleteProfileShippingAddress(addressNo);
EventManager.fire("MODAL_ALERT_OPEN", {
noticeType: "SUCCESS",
message: "배송지가 삭제되었습니다.",
onClose: () => {
addressListComponent.fetchList({
refresh: true,
});
},
});
},
});
},
MODIFY_SHIPPING_ADDRESS: ({ addressNo, totalCount }) => {
EventManager.fire("OPEN_LAYER_MODAL", {
isFull: false,
modalAddClass: "address-form",
name: "shipping-address-form",
title: "배송지 수정",
data: {
addressNo,
totalCount,
},
onClose: ({ reason }) => {
if (reason === "DID_MODIFY") {
EventManager.fire("MODAL_ALERT_OPEN", {
noticeType: "SUCCESS",
message: "수정이 완료되었습니다.",
onClose: () => {
addressListComponent.fetchList({
refresh: true,
});
},
});
}
},
});
},
};
const clickEventListener = ({ target }) => {
const actionType = target.getAttribute("shopby-action");
const addressNo = Number(
target
.closest("[shopby-address-no]")
?.getAttribute?.("shopby-address-no") ?? 0
);
const addressName = target
.closest("[shopby-address-name]")
?.getAttribute?.("shopby-address-name");
const isDefault =
target
.closest("[shopby-default-yn]")
?.getAttribute?.("shopby-default-yn") === "Y";
const totalCount = Number(target.getAttribute("shopby-total-count") || 0);
CLICK_EVENT_HANDLER_MAP[actionType]?.({
addressNo,
isDefault,
totalCount,
addressName,
});
};
containerEl.addEventListener("click", clickEventListener);
EventManager.on("PAGE_LOAD_COMPLETED", () => {
addressListComponent.fetchList();
});
})();