import { useState } from 'react'; import { LinkPaymentStep1 } from '@/entities/additional-service/ui/link-payment/apply/link-payment-step1'; import { LinkPaymentStep2 } from '@/entities/additional-service/ui/link-payment/apply/link-payment-step2'; import { HeaderType } from '@/entities/common/model/types'; import { ProcessStep } from '@/entities/transaction/model/types'; import { useSetFooterMode, useSetHeaderTitle, useSetHeaderType } from '@/widgets/sub-layout/use-sub-layout'; import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { PATHS } from "@/shared/constants/paths"; import { IdentityType, Language } from '@/entities/additional-service/model/types'; import { LinkContentType, LinkPaymentFormData, LinkPaymentSendMethod } from '@/entities/additional-service/model/link-pay/types'; import { useStore } from '@/shared/model/store'; import moment from 'moment'; export const LinkPaymentApplyPage = () => { const { navigate } = useNavigate(); const userMid = useStore.getState().UserStore.mid; const [processStep, setProcessStep] = useState(ProcessStep.One); const [formData, setFormData] = useState({ mid: userMid, sendMethod: LinkPaymentSendMethod.SMS, goodsName: '', amount: 0, moid: '', paymentLimitDate: moment().format('YYYY.MM.DD'), buyerName: '', email: '', phoneNumber: '', isIdentity: false, identityType: IdentityType.INDIVIDUAL, identityValue: '', language: Language.KR, linkContentType: LinkContentType.BASIC }); useSetHeaderTitle('링크결제 신청'); useSetHeaderType(HeaderType.LeftArrow); useSetFooterMode(false); // Step1 필수 필드 검증 const isStep1Valid = () => { return ( formData.mid !== '' && formData.sendMethod !== '' && formData.goodsName.trim() !== '' && formData.amount > 0 && formData.moid.trim() !== '' && formData.paymentLimitDate !== '' ); }; // 전화번호 형식 검증 const isValidPhoneNumber = (phone: string) => { const phoneRegex = /^01[0|1|6|7|8|9][0-9]{7,8}$/; return phoneRegex.test(phone); }; // 이메일 형식 검증 const isValidEmail = (email: string) => { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return emailRegex.test(email); }; // Step2 필수 필드 검증 const isStep2Valid = () => { const basicFieldsValid = formData.sendMethod === 'EMAIL' ? formData.email.trim() !== '' && isValidEmail(formData.email) : formData.buyerName.trim() !== '' && formData.phoneNumber.trim() !== '' && isValidPhoneNumber(formData.phoneNumber); if (formData.isIdentity) { return basicFieldsValid && formData.identityValue.trim() !== ''; } return basicFieldsValid; }; const onClickToBack = () => { setProcessStep(ProcessStep.One); }; const onClickToChangeTab = () => { if (processStep === ProcessStep.One) { setProcessStep(ProcessStep.Two); } else if (processStep === ProcessStep.Two) { navigate(PATHS.additionalService.linkPayment.requestConfirm, { state: { formData } }); } }; return ( <>
{(processStep === ProcessStep.One) &&
} {(processStep === ProcessStep.Two) &&
}
{(processStep === ProcessStep.One) && } {(processStep === ProcessStep.Two) && }
{(processStep === ProcessStep.One) &&
} {(processStep === ProcessStep.Two) &&
}
); };