/*! 2024. 7. 2. 오전 10:10:06 */ /******/ (() => { // webpackBootstrap var __webpack_exports__ = {}; (() => { const { pageHelper, EventManager, utils: { changeProfileFormVerifyMap, handleFocusEvent }, } = ShopbySkin; const modifyMemberFormHelper = pageHelper.modifyMemberFormHelper(); const containerEl = document.querySelector( `[shopby-helper-key="modify-member-form"]`, ); modifyMemberFormHelper.initialize({ helperKey: 'modify-member-form', }); const flattenRequest = (helper) => { const { profileBasicInformation, profileNicknameInformation, profileEmailInformation, profileSmsInformation, profileCertification, profileOptionalInformation, termsInformation, profileExtraInformation, } = helper.getState(); const selectedCustomTerms = termsInformation?.customTerms.filter(({ checked }) => !!checked).map((term) => term.id); return { memberName: profileBasicInformation?.memberName, password: profileBasicInformation?.password, profileConfirm: profileBasicInformation?.passwordConfirm, isPasswordEditMode: profileBasicInformation?.isPasswordEditMode, ...profileEmailInformation, ...profileSmsInformation, ...profileCertification, ...profileOptionalInformation, extraInfo: profileExtraInformation?.extraInfoContents, nickname: profileNicknameInformation?.nickname, joinTermsAgreements: termsInformation?.terms, customTermsNos: selectedCustomTerms, }; }; const checkInvalidProfileForm = (request) => { // eslint-disable-next-line complexity const errors = Object.keys(changeProfileFormVerifyMap)?.map((key) => { if (!request[key]) { return { isValid: true, field: key }; } const value = request?.[key]?.value ?? ''; switch (key) { case 'passwordConfirm': return { ...changeProfileFormVerifyMap?.[key]({ value, comparisonValue: request?.password?.value, }), field: key, }; case 'nickname': return { ...changeProfileFormVerifyMap?.[key]({ value, isDuplicated: request?.nickname?.isDuplicate, isRequired: request?.nickname?.isRequired, }), field: key, }; case 'email': return { ...changeProfileFormVerifyMap?.[key]({ value, isDuplicated: request?.email?.isDuplicate, isRequired: request?.email?.isRequired, }), field: key, }; case 'mobileNo': case 'telephoneNo': return { ...changeProfileFormVerifyMap?.[key]({ value, isRequired: request?.[key]?.isRequired, }), field: key, }; case 'detailAddress': return { ...changeProfileFormVerifyMap?.[key]({ value, zipCode: request?.zipCd, isRequired: request?.detailAddress?.isRequired, }), field: key, }; case 'birthday': case 'sex': return { ...changeProfileFormVerifyMap?.[key]({ value, isRequired: request?.[key]?.isRequired, }), field: key, }; case 'extraInfo': return { ...changeProfileFormVerifyMap?.[key](request.extraInfo), field: key }; case 'joinTermsAgreements': return { ...changeProfileFormVerifyMap?.[key]({ value, isRequired: request?.[key]?.isRequired }), field: key, }; default: return { ...changeProfileFormVerifyMap?.[key]({ value }), field: key, }; } }); const omittedErrors = errors.filter((error) => { if ( ['password', 'passwordConfirm'].includes(error.field) && !request?.isPasswordEditMode ) { return false; } return !error.isValid; }); return omittedErrors; }; // eslint-disable-next-line complexity const checkCertificatedValidation = (request) => { const invalidEmail = request?.emailCertificationStatus === 'INITIAL'; const invalidSmsInternalCertification = request?.smsCertificationStatus === 'INITIAL'; const invalidSmsExternalAuthentication = request?.smsCertificationStatus === 'SMS_AUTHENTICATION' && !request?.ci; if ( invalidEmail || invalidSmsInternalCertification || invalidSmsExternalAuthentication ) { EventManager.fire('MODAL_ALERT_OPEN', { noticeType: 'CAUTION', message: `${invalidEmail ? '이메일 인증을 진행해 주세요.' : '휴대폰 인증을 진행해 주세요.'}`, onClose: () => { handleFocusEvent({ containerEl, fields: invalidEmail ? 'email' : 'mobileNo', }); }, }); return false; } const message = request.certificatedNumber?.length ? '인증을 진행해주세요.' : '인증번호를 입력해주세요.'; if ( request.certificated && (!request.certificated.value || !request.certificated.isValid) ) { EventManager.fire('MODAL_ALERT_OPEN', { noticeType: 'CAUTION', message: `${request.certificated.message ?? message}`, onClose: () => { handleFocusEvent({ containerEl, fields: 'certificatedNumber' }); }, }); return false; } return true; }; const checkPasswordAuthentication = (helper) => { const { helperState, profileInformation: { openIdProvider }, } = helper.getState(); const { isAuthenticated } = helperState ?? {}; const isInValidOpenIdAuthentication = openIdProvider && !isAuthenticated; if (isInValidOpenIdAuthentication) { EventManager.fire('MODAL_ALERT_OPEN', { message: '계정 재인증 후 회원정보 수정이 가능합니다.', noticeType: 'CAUTION', }); return false; } return true; }; const CLICK_EVENT_HANDLER_MAP = { // eslint-disable-next-line complexity EMAIL_CERTIFICATION: async (helper) => { const { profileEmailInformation } = helper.getState(); const isInvalidEmail = profileEmailInformation?.email.value === '@' || !profileEmailInformation?.email.isValid; if (isInvalidEmail) { EventManager.fire('MODAL_ALERT_OPEN', { noticeType: 'CAUTION', message: `${profileEmailInformation?.email.message ?? '이메일을 입력해주세요.'}`, }); return; } if (profileEmailInformation?.emailCertificationStatus === 'INITIAL') { await helper.sendCertificationCode( profileEmailInformation.email.value, 'EMAIL', ); EventManager.fire('MODAL_ALERT_OPEN', { noticeType: 'SUCCESS', message: '인증번호가 발송되었습니다.', }); } else { EventManager.fire('MODAL_CONFIRM_OPEN', { noticeType: 'WARNING', message: '인증번호를 재발송하시겠습니까?', onConfirm: async () => { await helper.sendCertificationCode( profileEmailInformation.email.value, 'EMAIL', ); EventManager.fire('MODAL_ALERT_OPEN', { noticeType: 'SUCCESS', message: '인증번호가 발송되었습니다.', }); }, }); } }, SMS_CERTIFICATION: async (helper) => { const { profileSmsInformation } = helper.getState(); const isInvalidMobileNo = !profileSmsInformation?.mobileNo.value || !profileSmsInformation?.mobileNo.isValid; if (isInvalidMobileNo) { EventManager.fire('MODAL_ALERT_OPEN', { noticeType: 'CAUTION', message: `${profileSmsInformation?.mobileNo.message ?? '휴대폰 번호를 입력해주세요.'}`, }); return; } if (profileSmsInformation?.smsCertificationStatus === 'INITIAL') { await helper.sendCertificationCode( profileSmsInformation.mobileNo.value, 'SMS', ); EventManager.fire('MODAL_ALERT_OPEN', { noticeType: 'SUCCESS', message: '인증번호가 발송되었습니다.', }); } else { EventManager.fire('MODAL_CONFIRM_OPEN', { noticeType: 'WARNING', message: '인증번호를 재발송하시겠습니까?', onConfirm: async () => { await helper.sendCertificationCode( profileSmsInformation.mobileNo.value, 'SMS', ); EventManager.fire('MODAL_ALERT_OPEN', { noticeType: 'SUCCESS', message: '인증번호가 발송되었습니다.', }); }, }); } }, AUTHENTICATION_BY_PHONE: () => { EventManager.fire('OPEN_LAYER_MODAL', { name: 'kcp-sms-authentication', data: { type: 'JOIN_TIME' }, onClose: ({ reason, state }) => { if (reason === 'DID_SUBMIT') { ShopbySkin.EventManager.fire('SUCCESS_AUTHENTICATION_SMS', state); } }, }); }, SEARCH_ZIP_CODE: () => { EventManager.fire('OPEN_LAYER_MODAL', { modalAddClass: 'search-zip-code full-modal', name: 'page-zip-code', onClose: ({ reason, state }) => { if (reason === 'DID_SUBMIT') { ShopbySkin.EventManager.fire('SELECT_ZIP_CODE', { moduleKey: 'profile-optional-information', state, }); } }, }); }, SHOW_TERM_DETAIL: ({ elTarget, helper }) => { const { termsInformation } = helper.getState(); if (!termsInformation) { return; } const mergedTerms = [ ...termsInformation.terms, ...termsInformation.customTerms, ]; const selectedTerm = mergedTerms.find( (term) => elTarget.getAttribute('shopby-term-id') === term.id.toString(), ); EventManager.fire('OPEN_LAYER_MODAL', { name: 'term-detail', data: selectedTerm, }); }, CUSTOM_CHECK_TERMS: (target) => { if (target.value === 'pi_third_party_provision') { $('input:checkbox[name="directMailAgreed"]').trigger('click'); $('input:checkbox[name="smsAgreed"]').trigger('click'); const terms = document.getElementsByClassName('terms__check'); const checkedFl = []; for (let el of terms) { checkedFl.push(el.checked); } const uncheckedFl = checkedFl.some((fl) => fl === false); const allCheckedEl = $('input:checkbox[name="isAllChecked"]'); if (!uncheckedFl) { if (allCheckedEl.is(':checked') && !$(target).is(':checked')) { allCheckedEl.prop('checked', false); } else { allCheckedEl.prop('checked', true); } } } }, MODIFY: async (helper) => { const flattedRequest = flattenRequest(helper); const invalidRequest = flattedRequest.openIdProvider ? checkInvalidProfileForm(flattedRequest).filter( (error) => !['memberId', 'password', 'passwordConfirm'].includes( error.field, ), ) : checkInvalidProfileForm(flattedRequest); if (invalidRequest?.length) { const [error] = invalidRequest; EventManager.fire('MODAL_ALERT_OPEN', { noticeType: 'CAUTION', message: `${error.message}`, onClose: () => { handleFocusEvent({ containerEl, fields: error.field }); EventManager.fire('INVALID_PROFILE_FORM', { data: invalidRequest, }); }, }); return; } if (!checkCertificatedValidation(flattedRequest)) { return; } if (!checkPasswordAuthentication(helper)) { return; } try { const result = await getVipId(); flattedRequest.extraInfo[0].extraInfoOptionTextContent = result; } catch (error) { console.error("VIP ID 조회 실패:", error); return; } await helper.modify({ ...flattedRequest }); EventManager.fire('MODAL_ALERT_OPEN', { noticeType: 'SUCCESS', message: '회원정보가 수정되었습니다.', onClose: () => location.replace(`${location.origin}/pages/my/my-page.html`), }); }, CANCEL_MODIFY: () => { location.replace('/pages/my/my-page.html'); }, }; const clickEventListener = ({ target }) => { const action = target.getAttribute('shopby-action'); if (action === 'SHOW_TERM_DETAIL') { CLICK_EVENT_HANDLER_MAP[action]?.({ helper: modifyMemberFormHelper, elTarget: target, }); } else if (action === 'CUSTOM_CHECK_TERMS') { CLICK_EVENT_HANDLER_MAP[action]?.(target); } else { CLICK_EVENT_HANDLER_MAP[action]?.(modifyMemberFormHelper); } }; containerEl.addEventListener('click', clickEventListener); // [Aaron] 이메일 및 SNS 수신동의를 하나로 묶음으로써 동의 체크 이벤트 추가 $(document).on( 'click', 'input:checkbox[name="isAllChecked"]', ({ target }) => { const termsCheckEl = $('.terms__check'); let checkedFl; for (let el of termsCheckEl) { if (el.value === 'pi_third_party_provision') { checkedFl = $(el).is(':checked'); } } if (checkedFl) { if (!$('input:checkbox[name="directMailAgreed"]').is(':checked')) { $('input:checkbox[name="directMailAgreed"]').trigger('click'); } if (!$('input:checkbox[name="smsAgreed"]').is(':checked')) { $('input:checkbox[name="smsAgreed"]').trigger('click'); } } else { if ($('input:checkbox[name="directMailAgreed"]').is(':checked')) { $('input:checkbox[name="directMailAgreed"]').trigger('click'); } if ($('input:checkbox[name="smsAgreed"]').is(':checked')) { $('input:checkbox[name="smsAgreed"]').trigger('click'); } } }, ); // END })(); /******/ })();