import { withFormik } from "formik"; import InnerIdentityForm from "./InnerIdentityForm"; import * as yup from "yup"; export interface IdentityFormValues { firstName: string; lastName: string; birthDate: string; birthPlace: string; fatherName: string; gender: string; nationalCode: string; nationality: string; profilePhotoId: string; religion: string; } export interface WizardFormData { identity: IdentityFormValues; } export interface IdentityFormProps { step: number; setStep: React.Dispatch>; data: WizardFormData; update: (newData: Partial) => void; } const IdentityFormValidationSchema = yup.object({ firstName: yup.string().trim().required("نام الزامی است").min(2).max(50), lastName: yup.string().trim().required("نام خانوادگی الزامی است").min(2).max(50), birthDate: yup .string() .required("تاریخ تولد الزامی است") .matches(/^\d{4}\/\d{2}\/\d{2}$/, "فرمت تاریخ تولد باید به شکل ۱۴۰۳/۰۱/۲۰ باشد"), birthPlace: yup.string().trim().required("محل تولد الزامی است").min(2).max(80), fatherName: yup.string().trim().required("نام پدر الزامی است").min(2).max(50), gender: yup .string() .required("جنسیت الزامی است") .oneOf(["male", "female", "other"], "جنسیت معتبر نیست"), nationalCode: yup .string() .required("کد ملی الزامی است") .matches(/^\d{10}$/, "کد ملی باید ۱۰ رقم باشد"), nationality: yup.string().trim().required("تابعیت الزامی است").min(2).max(50), profilePhotoId: yup.string().trim().required("عکس پرسنلی الزامی است"), religion: yup.string().trim().required("دین الزامی است").min(2).max(50), }); const EMPTY_IDENTITY_VALUES: IdentityFormValues = { firstName: "", lastName: "", birthDate: "", birthPlace: "", fatherName: "", gender: "", nationalCode: "", nationality: "", profilePhotoId: "", religion: "", }; const IdentityForm = withFormik({ enableReinitialize: true, mapPropsToValues: (props) => { return props.data?.identity || EMPTY_IDENTITY_VALUES; }, validationSchema: IdentityFormValidationSchema, handleSubmit: (values, { props }) => { props.update({ identity: values, }); props.setStep((prev) => prev + 1); }, })(InnerIdentityForm); export default IdentityForm;