(async () => {
const { EventManager, pageHelper } = ShopbySkin;
const myCouponListHelper = pageHelper.myCouponListHelper();
const $couponCount = $('coupon-count'); // 쿠폰 개수
const $couponTypeTabs = $('coupon-type-tabs'); // 쿠폰 탭
const $couponListItem = $('coupon-list-item'); // 쿠폰 리스트
const searchParams = new URLSearchParams(location.search);
const params = Object.fromEntries(searchParams.entries());
myCouponListHelper.initialize({
...params,
tab: params.usable === 'false' ? 'UNISSUABLE' : 'ISSUABLE',
});
const couponParams = {
queryString: {
pageNumber: 1,
pageSize: 100,
usable: true
},
accessTokenType: 'member',
};
// [Aaron] 상품, 주문 쿠폰 개수 추출 후 렌더
const { result: couponData } = await callShopApi(
'/coupons?',
'GET',
couponParams,
);
// 상품 쿠폰
const productCoupon = couponData.items.filter(
(coupon) => coupon.couponType === 'PRODUCT',
);
// 주문 쿠폰
const cartCoupon = couponData.items.filter(
(coupon) => coupon.couponType === 'CART',
);
const couponCountData = {
productCouponCnt: productCoupon.length,
cartCouponCnt: cartCoupon.length,
};
const couponCountHtml = renderHtml($couponCount, couponCountData);
$couponCount.append(couponCountHtml);
// END
// [Aaron] 쿠폰 탭 렌더
const couponTypeTabsHtml = renderHtml($couponTypeTabs, couponCountData);
$couponTypeTabs.append(couponTypeTabsHtml);
// [Aaron] 쿠폰 리스트 렌더
const couponListItem = renderHtml($couponListItem, productCoupon);
$couponListItem.append(couponListItem);
const moduleActionHandler = {
REGISTER: () => {
EventManager.fire('OPEN_LAYER_MODAL', {
name: 'coupon-register-form',
title: '쿠폰 등록',
modalAddClass: 'coupon-registration-modal',
isFull: false,
onClose: ({ reason }) => {
if (reason === 'DID_SUBMIT') {
EventManager.fire('MODAL_ALERT_OPEN', {
noticeType: 'SUCCESS',
message: '쿠폰이 등록이 완료되었습니다.',
onClose: () => {
location.reload();
},
});
}
},
});
},
COUPON_TYPE: (target) => {
const couponType = target.getAttribute('coupon-type');
const couponTypeTabsEl = document.querySelector('coupon-type-tabs');
$(target).parent().children().removeClass('active');
target.classList.add('active');
let couponData;
if (couponType === 'product') couponData = productCoupon;
if (couponType === 'cart') couponData = cartCoupon;
// [Aaron] 쿠폰 리스트 렌더
$('.coupon-list').remove();
const couponListItem = renderHtml($couponListItem, couponData);
$couponListItem.append(couponListItem);
},
USE_COUPON: async (target) => {
const couponListModule = document.querySelector('coupon-list');
const couponIssueNo = target.getAttribute('shopby-coupon-issue-no');
let noticeType, message;
try {
await couponListModule.useGiftCoupon(couponIssueNo);
noticeType = 'SUCCESS';
message = '혜택 지급이 완료되었습니다.';
} catch (error) {
noticeType = 'CAUTION';
message = `${error.error.serverError.message}`;
}
EventManager.fire('MODAL_ALERT_OPEN', {
noticeType,
message,
onClose: () => {
location.reload();
},
});
},
};
document
.querySelector('coupon-total-count')
?.addEventListener('click', ({ target }) => {
const action = target.getAttribute('shopby-action');
moduleActionHandler[action]?.();
});
document
.querySelector('coupon-type-tabs')
?.addEventListener('click', ({ target }) => {
const actionTarget = target.getAttribute('shopby-action');
if (!actionTarget) {
return;
}
moduleActionHandler[actionTarget](target);
});
})();