Files
hounam-submit-form-frontend/ui/forms/personal/validation/PersonalInfoFormValidation.tsx
2026-06-02 17:08:52 +03:30

113 lines
3.8 KiB
TypeScript

// 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<PersonalInfoFormValues["militaryStatus"]>()
.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<PersonalInfoFormValues["housingStatus"]>()
.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<number | "">()
.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<number | "">().when("maritalStatus", {
is: (ms: string) => ["متاهل", "متارکه", "فوت همسر"].includes(ms),
then: (s) =>
s.test(
"childrenCount",
"تعداد فرزند نامعتبر است",
(v) => v === "" || (typeof v === "number" && v >= 0),
),
otherwise: (s) => s.notRequired(),
}),
})
.required();