dasdasd
This commit is contained in:
82
ui/forms/identity/IdentityForm.tsx
Normal file
82
ui/forms/identity/IdentityForm.tsx
Normal 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;
|
||||
Reference in New Issue
Block a user