113 lines
3.8 KiB
TypeScript
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();
|