This commit is contained in:
2026-05-31 18:00:43 +03:30
parent 98af7d639b
commit b241d12ff5
20 changed files with 939 additions and 797 deletions

View File

@@ -0,0 +1,82 @@
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<React.SetStateAction<number>>;
data: WizardFormData;
update: (newData: Partial<WizardFormData>) => 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<IdentityFormProps, IdentityFormValues>({
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;