first commit
This commit is contained in:
172
ui/forms/JobInfoForm.tsx
Normal file
172
ui/forms/JobInfoForm.tsx
Normal file
@@ -0,0 +1,172 @@
|
||||
import React from "react";
|
||||
import {
|
||||
Box,
|
||||
Paper,
|
||||
TextField,
|
||||
Typography,
|
||||
Switch,
|
||||
FormControlLabel,
|
||||
MenuItem,
|
||||
Grid,
|
||||
} from "@mui/material";
|
||||
import { DatePicker } from "@mui/x-date-pickers";
|
||||
import { format } from "date-fns-jalali"; // برای تبدیل تاریخ به رشته استاندارد
|
||||
|
||||
// --- Types ---
|
||||
export interface JobInfoFormData {
|
||||
readyToWorkDate: string; // YYYY-MM-DD
|
||||
isCurrentEmployee: boolean;
|
||||
hasPastCooperation: boolean;
|
||||
isCurrentlyEmployed: boolean;
|
||||
dualJobInterest: boolean;
|
||||
retirementStatus: "None" | "Retired" | "Redeemed";
|
||||
isMilitary: boolean;
|
||||
hasInsurance: boolean;
|
||||
insuranceType: string;
|
||||
totalInsuranceYears: string;
|
||||
}
|
||||
|
||||
interface Props {
|
||||
value: JobInfoFormData;
|
||||
onChange: (next: JobInfoFormData) => void;
|
||||
}
|
||||
|
||||
export default function JobInfoForm({ value, onChange }: Props) {
|
||||
const setField = (key: keyof JobInfoFormData) => (e: any) => {
|
||||
onChange({ ...value, [key]: e.target.value });
|
||||
};
|
||||
|
||||
const setSwitch =
|
||||
(key: keyof JobInfoFormData) =>
|
||||
(e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
const checked = e.target.checked;
|
||||
const next = { ...value, [key]: checked };
|
||||
|
||||
// پاکسازی فیلدهای وابسته بیمه در صورت غیرفعال شدن
|
||||
if (key === "hasInsurance" && !checked) {
|
||||
next.insuranceType = "";
|
||||
next.totalInsuranceYears = "0";
|
||||
}
|
||||
|
||||
onChange(next);
|
||||
};
|
||||
const handleDateChange = (date: Date | null) => {
|
||||
if (date) {
|
||||
// تبدیل تاریخ جاوا اسکریپت به فرمت YYYY-MM-DD برای دیتابیس
|
||||
const formattedDate = format(date, "yyyy-MM-dd");
|
||||
onChange({ ...value, readyToWorkDate: formattedDate });
|
||||
}
|
||||
};
|
||||
return (
|
||||
<Paper
|
||||
elevation={0}
|
||||
|
||||
>
|
||||
|
||||
<Box
|
||||
sx={{
|
||||
display: "grid",
|
||||
gridTemplateColumns: { xs: "1fr", md: "1fr 1fr" },
|
||||
gap: 3,
|
||||
}}
|
||||
>
|
||||
<DatePicker
|
||||
label="تاریخ آمادگی برای شروع کار"
|
||||
value={value?.readyToWorkDate ? new Date(value?.readyToWorkDate) : null}
|
||||
onChange={handleDateChange}
|
||||
slotProps={{
|
||||
textField: { fullWidth: true },
|
||||
}}
|
||||
/>
|
||||
|
||||
{/* وضعیت بازنشستگی */}
|
||||
<TextField
|
||||
select
|
||||
label="وضعیت بازنشستگی"
|
||||
value={value?.retirementStatus}
|
||||
onChange={setField("retirementStatus")}
|
||||
fullWidth
|
||||
>
|
||||
<MenuItem value="None">هیچکدام</MenuItem>
|
||||
<MenuItem value="Retired">بازنشسته</MenuItem>
|
||||
<MenuItem value="Redeemed">بازخرید</MenuItem>
|
||||
</TextField>
|
||||
|
||||
{/* Switch Buttons */}
|
||||
<FormControlLabel
|
||||
control={
|
||||
<Switch
|
||||
checked={value?.isCurrentEmployee}
|
||||
onChange={setSwitch("isCurrentEmployee")}
|
||||
/>
|
||||
}
|
||||
label="از پرسنل حال حاضر هستم"
|
||||
/>
|
||||
<FormControlLabel
|
||||
control={
|
||||
<Switch
|
||||
checked={value?.hasPastCooperation}
|
||||
onChange={setSwitch("hasPastCooperation")}
|
||||
/>
|
||||
}
|
||||
label="سابقه همکاری در گذشته دارم"
|
||||
/>
|
||||
<FormControlLabel
|
||||
control={
|
||||
<Switch
|
||||
checked={value?.isCurrentlyEmployed}
|
||||
onChange={setSwitch("isCurrentlyEmployed")}
|
||||
/>
|
||||
}
|
||||
label="در حال حاضر مشغول به کار هستم"
|
||||
/>
|
||||
<FormControlLabel
|
||||
control={
|
||||
<Switch
|
||||
checked={value?.dualJobInterest}
|
||||
onChange={setSwitch("dualJobInterest")}
|
||||
/>
|
||||
}
|
||||
label="تمایل به شغل دوم دارم"
|
||||
/>
|
||||
<FormControlLabel
|
||||
control={
|
||||
<Switch
|
||||
checked={value?.isMilitary}
|
||||
onChange={setSwitch("isMilitary")}
|
||||
/>
|
||||
}
|
||||
label="نظامی هستم"
|
||||
/>
|
||||
<FormControlLabel
|
||||
control={
|
||||
<Switch
|
||||
checked={value?.hasInsurance}
|
||||
onChange={setSwitch("hasInsurance")}
|
||||
/>
|
||||
}
|
||||
label="دارای سابقه بیمه هستم"
|
||||
/>
|
||||
|
||||
{/* Conditional Insurance Fields */}
|
||||
{value?.hasInsurance && (
|
||||
<>
|
||||
<TextField
|
||||
label="نوع بیمه"
|
||||
value={value?.insuranceType}
|
||||
onChange={setField("insuranceType")}
|
||||
fullWidth
|
||||
/>
|
||||
<TextField
|
||||
type="number"
|
||||
label="جمع سالهای سابقه بیمه"
|
||||
value={value?.totalInsuranceYears}
|
||||
onChange={setField("totalInsuranceYears")}
|
||||
fullWidth
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
</Box>
|
||||
</Paper>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user