(() => { const { EventManager, pageHelper } = ShopbySkin; const { initialize } = pageHelper.myOrdersHelper(); const { withdrawClaimByOrderOptionNo } = pageHelper.orderDetailHelper(); const datePickerHelper = pageHelper.datePickerHelper(); datePickerHelper.initialize(); const searchParams = new URLSearchParams(location.search); const queryParams = Object.fromEntries(searchParams.entries()); initialize(queryParams); let shopbyCommonData = {}; EventManager.on('PAGE_LOAD_COMPLETED', (commonData) => { shopbyCommonData = commonData; }); ShopbySkin.Handlebars.registerHelper({ // [Jay] 총 렌탈 가격 계산을 위한 곱하기 헬퍼 추가 multiply(x, y) { return x * y; }, }); EventManager.on('QUERY_ORDERS', async (data) => { const myOrdersModule = document.querySelector('my-orders'); // [Jay] 렌탈 주문건 렌탈 데이터 추가 for (const order of data) { if (order.payType === 'RENTAL') { const orderNo = order.orderNo; const { result: orderInfo } = await callShopApi( `/profile/orders/${orderNo}`, 'GET', { accessTokenType: 'member', }, ); order.orderOptions[0].rentalInfo = orderInfo.payInfo.rentalInfo; } } myOrdersModule.store.setState((prev) => ({ ...prev, myOrders: data, })); // END }); const openWithdrawClaimModal = (orderOptionNo, claimStatusLabel) => { EventManager.fire('MODAL_CONFIRM_OPEN', { noticeType: 'WARNING', message: `${claimStatusLabel} 신청을 철회하시겠습니까?`, onConfirm: async () => { const { isSuccess } = await withdrawClaimByOrderOptionNo(orderOptionNo); if (isSuccess) { EventManager.fire('MODAL_ALERT_OPEN', { noticeType: 'SUCCESS', message: `${claimStatusLabel}신청 철회가 완료되었습니다.`, onClose: () => location.reload(), }); } }, }); }; const validateWithdrawClaim = ({ claimNo, claimNos, claimStatusLabel, orderOptionNo, }) => { const hasAfterClaim = claimNos .split(',') .some((no) => Number(no) > Number(claimNo)); if (!hasAfterClaim) { return true; } EventManager.fire('MODAL_CONFIRM_OPEN', { noticeType: 'WARNING', message: '철회 시 후순위 클레임의 결제/환불 금액이 변동됩니다.
클레임을 철회하시겠습니까?
', onConfirm: () => openWithdrawClaimModal(orderOptionNo, claimStatusLabel), }); return false; }; const MODULE_ACTION_HANDLER = { SEARCH_ORDERS: () => { const params = new URLSearchParams(location.search); location.href = `${location.origin}${location.pathname}?${params.toString()}`; }, WITHDRAW_CANCEL: ({ orderOptionNo, claimNo, claimNos }) => { const claimStatusLabel = '취소'; if ( !validateWithdrawClaim({ claimNo, claimNos, claimStatusLabel, orderOptionNo, }) ) { return; } openWithdrawClaimModal(orderOptionNo, claimStatusLabel); }, WITHDRAW_EXCHANGE: ({ orderOptionNo, claimNo, claimNos }) => { const claimStatusLabel = '교환'; if ( !validateWithdrawClaim({ claimNo, claimNos, claimStatusLabel, orderOptionNo, }) ) { return; } openWithdrawClaimModal(orderOptionNo, claimStatusLabel); }, WITHDRAW_RETURN: ({ orderOptionNo, claimNo, claimNos }) => { const claimStatusLabel = '반품'; if ( !validateWithdrawClaim({ claimNo, claimNos, claimStatusLabel, orderOptionNo, }) ) { return; } openWithdrawClaimModal(orderOptionNo, claimStatusLabel); }, VIEW_CLAIM_DETAIL: ({ claimNo, modalTitlePrefix }) => { EventManager.fire('OPEN_LAYER_MODAL', { name: 'claim-detail', title: `${modalTitlePrefix ?? '클레임'} 내역 상세`, isFull: false, data: { claimNo, }, }); }, GRADE_BENEFIT: () => { EventManager.fire('OPEN_LAYER_MODAL', { name: 'grade-benefit-guide', title: '등급혜택 안내', isFull: false, data: { commonData: shopbyCommonData, }, }); }, }; const dateTypeSelectorModule = document.querySelector('date-search'); const dateTypeSelectorClickEventHandler = ({ target }) => { const actionTarget = target.getAttribute('shopby-action'); if (!actionTarget) { return; } MODULE_ACTION_HANDLER[actionTarget](); }; const orderProductOptionsModule = document.querySelector('my-orders'); const orderProductOptionsClickEventListener = ({ target }) => { const actionTarget = target.getAttribute('shopby-action'); if (!actionTarget) { return; } const orderOptionNo = target .closest('[shopby-order-option-no]') ?.getAttribute('shopby-order-option-no'); const claimNo = target.getAttribute('shopby-claim-no'); const modalTitlePrefix = target.getAttribute('shopby-modal-title-prefix'); const claimNos = target .closest('[shopby-claim-nos]') ?.getAttribute('shopby-claim-nos'); MODULE_ACTION_HANDLER[actionTarget]({ orderOptionNo, claimNo, modalTitlePrefix, claimNos, }); }; const profileSummaryModule = document.querySelector('profile-summary'); const profileSummaryClickEventListener = ({ target }) => { const actionTarget = target.getAttribute('shopby-action'); if (!actionTarget) { return; } MODULE_ACTION_HANDLER[actionTarget](); }; profileSummaryModule?.addEventListener( 'click', profileSummaryClickEventListener, ); dateTypeSelectorModule.addEventListener( 'click', dateTypeSelectorClickEventHandler, ); orderProductOptionsModule.addEventListener( 'click', orderProductOptionsClickEventListener, ); })();