import React, { useEffect, useState } from "react"; import { Box, MenuItem, TextField } from "@mui/material"; type MilitaryStatus = | "" | "کارت پایان خدمت" | "در حال خدمت" | "معافیت تحصیلی" | "معافیت دائم" | "انجام نشده"; type EducationLevel = | "" | "زیر دیپلم" | "دیپلم" | "دانشجو" | "کاردانی" | "کارشناسی" | "کارشناسی ارشد" | "دکترا"; export interface PersonalInfoFormState { applicantId: string; maritalStatus: string; // نظام وظیفه militaryStatus: MilitaryStatus; permanentExemptionReason: string; // علت معافیت دائم (شرطی) // والدین fatherEducation: EducationLevel; fatherJob: string; motherEducation: EducationLevel; motherJob: string; housingStatus: string; city: string; address: string; homePhone: string; mobilePhone: string; emergencyPhone: string; email: string; residenceDuration: number | ""; isVeteran: boolean; hasCriminalRecord: boolean; criminalDescription: string; // فیلدهای همسر/فرزند spouseName?: string; spouseEducation?: string; spouseJob?: string; spouseWorkplace?: string; childrenCount?: number | ""; } const initialValues: PersonalInfoFormState = { applicantId: "", maritalStatus: "", militaryStatus: "", permanentExemptionReason: "", fatherEducation: "", fatherJob: "", motherEducation: "", motherJob: "", housingStatus: "", city: "", address: "", homePhone: "", mobilePhone: "", emergencyPhone: "", email: "", residenceDuration: "", isVeteran: false, hasCriminalRecord: false, criminalDescription: "", spouseName: "", spouseEducation: "", spouseJob: "", spouseWorkplace: "", childrenCount: "", }; const MILITARY_OPTIONS: Exclude[] = [ "کارت پایان خدمت", "در حال خدمت", "معافیت تحصیلی", "معافیت دائم", "انجام نشده", ]; const EDUCATION_OPTIONS: Exclude[] = [ "زیر دیپلم", "دیپلم", "دانشجو", "کاردانی", "کارشناسی", "کارشناسی ارشد", "دکترا", ]; export default function PersonalInfoForm({ value, onChange, }: { value?: PersonalInfoFormState; onChange?: (val: PersonalInfoFormState) => void; }) { const [formData, setFormData] = useState(value || initialValues); // اگر prop value از بیرون تغییر کرد، state داخلی sync شود useEffect(() => { if (value) setFormData(value); }, [value]); const setNext = (updater: (prev: PersonalInfoFormState) => PersonalInfoFormState) => { setFormData((prev) => { const next = updater(prev); onChange?.(next); return next; }); }; const handleChange = (field: K) => (e: React.ChangeEvent) => { const val = e.target.value as PersonalInfoFormState[K]; setNext((p) => ({ ...p, [field]: val })); }; const handleNumber = (field: K) => (e: React.ChangeEvent) => { const v = e.target.value; setNext((p) => ({ ...p, [field]: (v === "" ? "" : Number(v)) as PersonalInfoFormState[K] })); }; // تغییر وضعیت تاهل + پاکسازی فیلدهای شرطی مربوط به همسر/فرزند const handleMaritalStatusChange = (e: React.ChangeEvent) => { const status = e.target.value; setNext((p) => { const isMarried = status === "متاهل"; const hasChildren = ["متاهل", "متارکه", "فوت همسر"].includes(status); return { ...p, maritalStatus: status, spouseName: isMarried ? p.spouseName : "", spouseEducation: isMarried ? p.spouseEducation : "", spouseJob: isMarried ? p.spouseJob : "", spouseWorkplace: isMarried ? p.spouseWorkplace : "", childrenCount: hasChildren ? p.childrenCount : "", }; }); }; // تغییر وضعیت نظام وظیفه + پاکسازی علت معافیت در صورت عدم نیاز const handleMilitaryStatusChange = (e: React.ChangeEvent) => { const ms = e.target.value as MilitaryStatus; setNext((p) => ({ ...p, militaryStatus: ms, permanentExemptionReason: ms === "معافیت دائم" ? p.permanentExemptionReason : "", })); }; const isPermanentExempt = formData.militaryStatus === "معافیت دائم"; return ( {/* وضعیت تاهل */} انتخاب کنید مجرد متاهل متارکه فوت همسر {/* همسر (شرطی) */} {formData.maritalStatus === "متاهل" && ( <> )} {/* تعداد فرزند (شرطی) */} {["متاهل", "متارکه", "فوت همسر"].includes(formData.maritalStatus) && ( )} {/* وضعیت نظام وظیفه (لیستی) */} انتخاب کنید {MILITARY_OPTIONS.map((opt) => ( {opt} ))} {/* علت معافیت دائم (شرطی) */} {isPermanentExempt && ( )} {/* تحصیلات پدر/مادر (لیستی) */} انتخاب کنید {EDUCATION_OPTIONS.map((opt) => ( {opt} ))} انتخاب کنید {EDUCATION_OPTIONS.map((opt) => ( {opt} ))} {/* بقیه فیلدهای قبلی (نمونه، اگر لازم داری کاملش می‌کنم یا در همین فایل نگه می‌داریم) */} setNext((p) => ({ ...p, hasCriminalRecord: e.target.value === "true", criminalDescription: e.target.value === "true" ? p.criminalDescription : "" }))} fullWidth > خیر بله {formData.hasCriminalRecord && ( )} ); }