(() => {
const {
EventManager,
pageHelper,
constants: { REG_EX_FOR_CHECK_FORMAT },
utils: { makeVerificationResult, handleFocusEvent, isSignedIn },
} = ShopbySkin;
if (isSignedIn()) {
if (!document.referrer || location.href === document.referrer) {
history.back();
return;
}
location.href = document.referrer;
}
const findIdHelper = pageHelper.findIdHelper();
const containerEl = document.querySelector('[shopby-helper-key="find-id"]');
findIdHelper.initialize({
helperKey: 'find-id',
});
const verificationMap = {
memberName: (memberName) => {
if (!memberName) {
return makeVerificationResult({
reason: '이름을 입력해주세요.',
fields: ['memberName'],
});
}
return makeVerificationResult();
},
// eslint-disable-next-line default-param-last
email: ({ value = '@', findMethod }) => {
if (findMethod !== 'EMAIL') {
return makeVerificationResult();
}
const [id, domain] = value.split('@');
if (!id || !domain) {
return makeVerificationResult({
reason: '이메일을 입력해주세요',
fields: ['email'],
});
}
const isInvalidEmail =
!id.match(REG_EX_FOR_CHECK_FORMAT.EMAIL_ID) || !domain.match(REG_EX_FOR_CHECK_FORMAT.EMAIL_DOMAIN);
if (isInvalidEmail) {
return makeVerificationResult({
reason: '입력된 이메일은 잘못된 형식입니다.',
fields: ['email'],
});
}
return makeVerificationResult();
},
mobileNo: ({ value, findMethod }) => {
if (findMethod !== 'SMS') {
return makeVerificationResult();
}
const REQUIRED_MOBILE_NUMBER_SIZE = 10;
if (!value) {
return makeVerificationResult({
reason: '휴대폰번호를 입력해주세요.',
fields: ['mobileNumber'],
});
}
if (value.length < REQUIRED_MOBILE_NUMBER_SIZE) {
return makeVerificationResult({
reason: '정확한 휴대폰번호를 입력해주세요.',
fields: ['mobileNumber'],
});
}
return makeVerificationResult();
},
};
const handleSubmit = async (helper) => {
const { findAccountBasicInformation } = helper.getState();
const errors = Object.keys(verificationMap)?.map((key) => {
if (!findAccountBasicInformation) {
return makeVerificationResult({
reason: '이름을 입력해주세요.',
fields: ['memberName'],
});
}
if (['email', 'mobileNo'].includes(key)) {
return verificationMap?.[key]({
value: findAccountBasicInformation[key],
findMethod: findAccountBasicInformation.findMethod,
});
}
return verificationMap?.[key](findAccountBasicInformation[key]);
});
const [firstErrorField] = errors.filter(({ reason }) => !!reason);
if (firstErrorField) {
EventManager.fire('MODAL_ALERT_OPEN', {
noticeType: 'CAUTION',
message: `${firstErrorField.reason}`,
onClose: () => handleFocusEvent({ containerEl, fields: firstErrorField.fields }),
});
return;
}
const { data } = await helper.fetchProfileFindId({ payload: findAccountBasicInformation });
if (!data?.length) {
EventManager.fire('MODAL_ALERT_OPEN', {
noticeType: 'CAUTION',
message: '회원정보를 찾을 수 없습니다.',
});
return;
}
EventManager.fire('OPEN_LAYER_MODAL', { name: 'find-id-result', data });
};
const clickEventListener = ({ target }) => {
const action = target.getAttribute('shopby-action');
switch (action) {
case 'CERTIFICATION_MOBILE_NO':
EventManager.fire('OPEN_LAYER_MODAL', {
name: 'kcp-sms-authentication',
data: { type: 'FIND_ID' },
onClose: async ({ reason, state }) => {
if (reason === 'DID_SUBMIT') {
const { data } = await findIdHelper.fetchProfileFindId({
payload: {
...state,
findMethod: 'MOBILE',
},
});
if (!data?.length) {
EventManager.fire('MODAL_ALERT_OPEN', {
noticeType: 'CAUTION',
message: '회원정보를 찾을 수 없습니다.',
});
return;
}
EventManager.fire('OPEN_LAYER_MODAL', { name: 'find-id-result', data });
}
},
});
break;
case 'FIND_ID_SUBMIT':
handleSubmit(findIdHelper);
break;
default:
break;
}
};
containerEl.addEventListener('click', clickEventListener);
})();