// PersonalInfoForm.validation.ts import * as yup from "yup"; import { PersonalInfoFormValues } from "../types"; export const PersonalInfoValidationSchema = yup .object({ maritalStatus: yup.string().trim().required("وضعیت تاهل را انتخاب کنید"), militaryStatus: yup .mixed() .oneOf([ "", "کارت پایان خدمت", "در حال خدمت", "معافیت تحصیلی", "معافیت دائم", "انجام نشده", ]) .required("وضعیت نظام وظیفه را انتخاب کنید"), permanentExemptionReason: yup .string() .trim() .when("militaryStatus", { is: "معافیت دائم", then: (s) => s.required("علت معافیت دائم الزامی است"), otherwise: (s) => s.notRequired(), }), fatherEducation: yup.string().required("تحصیلات پدر را انتخاب کنید"), fatherJob: yup.string().trim().required("شغل پدر الزامی است"), motherEducation: yup.string().required("تحصیلات مادر را انتخاب کنید"), motherJob: yup.string().trim().required("شغل مادر الزامی است"), housingStatus: yup .mixed() .oneOf(["", "منزل شخصی", "منزل والدین", "منزل استیجاری", "سایر"]) .required("وضعیت مسکن را انتخاب کنید"), city: yup.string().trim().required("شهر الزامی است"), address: yup.string().trim().required("آدرس الزامی است"), homePhone: yup.string().trim().notRequired(), mobilePhone: yup.string().trim().required("تلفن همراه الزامی است"), emergencyPhone: yup.string().trim().notRequired(), email: yup.string().trim().email("ایمیل نامعتبر است").notRequired(), residenceDuration: yup .mixed() .test( "residenceDuration", "مدت سکونت نامعتبر است", (v) => v === "" || (typeof v === "number" && v >= 0), ) .notRequired(), isVeteran: yup.boolean().required(), hasCriminalRecord: yup.boolean().required(), criminalDescription: yup .string() .trim() .when("hasCriminalRecord", { is: true, then: (s) => s.required("توضیحات سوء پیشینه الزامی است"), otherwise: (s) => s.notRequired(), }), spouseName: yup .string() .trim() .when("maritalStatus", { is: "متاهل", then: (s) => s.required("نام همسر الزامی است"), otherwise: (s) => s.notRequired(), }), spouseEducation: yup .string() .trim() .when("maritalStatus", { is: "متاهل", then: (s) => s.required("تحصیلات همسر الزامی است"), otherwise: (s) => s.notRequired(), }), spouseJob: yup .string() .trim() .when("maritalStatus", { is: "متاهل", then: (s) => s.required("شغل همسر الزامی است"), otherwise: (s) => s.notRequired(), }), spouseWorkplace: yup .string() .trim() .when("maritalStatus", { is: "متاهل", then: (s) => s.required("محل کار همسر الزامی است"), otherwise: (s) => s.notRequired(), }), childrenCount: yup.mixed().when("maritalStatus", { is: (ms: string) => ["متاهل", "متارکه", "فوت همسر"].includes(ms), then: (s) => s.test( "childrenCount", "تعداد فرزند نامعتبر است", (v) => v === "" || (typeof v === "number" && v >= 0), ), otherwise: (s) => s.notRequired(), }), }) .required();