(() => {
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();
});
})();