import React, { useMemo, useState } from "react"; import { Box, MenuItem, Paper, TextField, Typography, InputAdornment, } from "@mui/material"; type JobCategoryOption = { id: string; name: string; }; type JobOption = { id: string; title: string; jobCategoryId: string; }; interface JobRequestFormData { jobCategoryId: string; jobId: string; requestedJobDescription: string; employmentRelationType: string; description: string; requestedShiftType: string; expectedSalary: string; } interface JobRequestFormProps { jobCategories?: JobCategoryOption[]; jobs?: JobOption[]; value?: JobRequestFormData; onChange?: (data: JobRequestFormData) => void; } const relationTypes = [ "تمام وقت", "پاره وقت", "پروژه‌ای", "ساعتی", "قراردادی", "کارورزی", ]; const shiftTypes = [ "ثابت صبح", "ثابت عصر", "ثابت شب", "چرخشی", "شیفتی", "فرقی ندارد", ]; const defaultCategories: JobCategoryOption[] = [ { id: "1", name: "پاراکلینیک" }, { id: "2", name: "اداری" }, { id: "3", name: "درمانی" }, ]; const defaultJobs: JobOption[] = [ { id: "1", title: "کارشناس آزمایشگاه", jobCategoryId: "1" }, { id: "2", title: "کارشناس رادیولوژی", jobCategoryId: "1" }, { id: "3", title: "منشی", jobCategoryId: "2" }, { id: "4", title: "مسئول بایگانی", jobCategoryId: "2" }, { id: "5", title: "پرستار", jobCategoryId: "3" }, { id: "6", title: "کمک پرستار", jobCategoryId: "3" }, ]; const initialValues: JobRequestFormData = { jobCategoryId: "", jobId: "", requestedJobDescription: "", employmentRelationType: "", description: "", requestedShiftType: "", expectedSalary: "", }; export default function JobRequestForm({ jobCategories = defaultCategories, jobs = defaultJobs, value, onChange, }: JobRequestFormProps) { const [formData, setFormData] = useState( value ?? initialValues, ); const [errors, setErrors] = useState>({}); const filteredJobs = useMemo(() => { if (!formData.jobCategoryId) return []; return jobs.filter((job) => job.jobCategoryId === formData.jobCategoryId); }, [jobs, formData.jobCategoryId]); const updateForm = (next: JobRequestFormData) => { setFormData(next); onChange?.(next); }; const handleChange = (field: keyof JobRequestFormData) => (event: React.ChangeEvent) => { const value = event.target.value; let next = { ...formData, [field]: value }; // اگر رسته شغلی عوض شد، شغل قبلی پاک شود if (field === "jobCategoryId") { next.jobId = ""; } // فقط عدد برای حقوق if (field === "expectedSalary") { next.expectedSalary = value.replace(/[^\d]/g, ""); } updateForm(next); setErrors((prev) => ({ ...prev, [field]: "", })); }; const validate = () => { const newErrors: Record = {}; if (!formData.jobCategoryId) { newErrors.jobCategoryId = "یک گزینه را انتخاب کنید!"; } if (!formData.jobId) { newErrors.jobId = "یک گزینه را انتخاب کنید!"; } if (!formData.employmentRelationType) { newErrors.employmentRelationType = "یک گزینه را انتخاب کنید!"; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; // اگر خواستی بعداً برای submit استفاده کن // const handleSubmit = () => { // if (!validate()) return; // console.log(formData); // }; return ( انتخاب... {jobCategories.map((item) => ( {item.name} ))} انتخاب... {filteredJobs.map((item) => ( {item.title} ))} انتخاب ... {relationTypes.map((item) => ( {item} ))} ); }