import React from "react"; import { Box, MenuItem, Paper, TextField, Typography, Divider, Switch, FormControlLabel } from "@mui/material"; // --- Types --- type ProficiencyLevel = "" | "NONE" | "VERY_WEAK" | "WEAK" | "AVERAGE" | "GOOD" | "VERY_GOOD" | "EXCELLENT"; export interface ComputerSkillFormData { pcUsage: ProficiencyLevel; word: ProficiencyLevel; excel: ProficiencyLevel; powerPoint: ProficiencyLevel; rahkaran: ProficiencyLevel; kasra: ProficiencyLevel; didgah: ProficiencyLevel; his: ProficiencyLevel; otherSoftware?: string; } export interface LanguageSkillsFormData { englishLevel: ProficiencyLevel; englishDescription: string; hasEnglishCertificate: boolean; // جدید englishCertificateType: string; // جدید arabicLevel: ProficiencyLevel; arabicDescription: string; otherLanguagesDescription: string; dialectsDescription: string; otherSkills: string; } export interface SkillsFormState { computerSkill: ComputerSkillFormData; languageSkill: LanguageSkillsFormData; } interface Props { value: SkillsFormState; onChange: (next: SkillsFormState) => void; } // --- Constants --- const proficiencyOptions: { value: ProficiencyLevel; label: string }[] = [ { value: "", label: "انتخاب ..." }, { value: "NONE", label: "ندارد" }, { value: "VERY_WEAK", label: "خیلی ضعیف" }, { value: "WEAK", label: "ضعیف" }, { value: "AVERAGE", label: "متوسط" }, { value: "GOOD", label: "خوب" }, { value: "VERY_GOOD", label: "خیلی خوب" }, { value: "EXCELLENT", label: "عالی" }, ]; const certTypes = ["IELTS", "TOFEL", "TOLIMO", "MCHE"]; export default function SkillsForm({ value, onChange }: Props) { const handleComputerChange = (key: keyof ComputerSkillFormData, val: string) => { onChange({ ...value, computerSkill: { ...value.computerSkill, [key]: val }, }); }; const handleLanguageChange = (key: keyof LanguageSkillsFormData, val: any) => { const nextLang = { ...value.languageSkill, [key]: val }; // پاکسازی فیلد نوع مدرک در صورتی که سوییچ خاموش شود if (key === "hasEnglishCertificate" && val === false) { nextLang.englishCertificateType = ""; } onChange({ ...value, languageSkill: nextLang, }); }; return ( {/* 1. Computer Skills Section */} مهارت‌های کامپیوتری {(['pcUsage', 'word', 'excel', 'powerPoint', 'rahkaran', 'kasra', 'didgah', 'his'] as const).map((field) => ( handleComputerChange(field, e.target.value)} fullWidth > {proficiencyOptions.map((o) => ( {o.label} ))} ))} handleComputerChange('otherSoftware', e.target.value)} fullWidth multiline minRows={2} sx={{ gridColumn: { xs: "1", md: "1 / -1" } }} /> {/* 2. Language Skills Section */} آشنایی با زبان‌های خارجه {/* English */} handleLanguageChange("englishLevel", e.target.value)} fullWidth > {proficiencyOptions.map((o) => {o.label})} handleLanguageChange("hasEnglishCertificate", e.target.checked)} /> } label="مدرک معتبر زبان انگلیسی دارد" /> {value?.languageSkill.hasEnglishCertificate && ( handleLanguageChange("englishCertificateType", e.target.value)} fullWidth sx={{ gridColumn: { xs: "1", md: "1 / -1" } }} > {certTypes.map((t) => {t})} )} handleLanguageChange("englishDescription", e.target.value)} fullWidth multiline sx={{ gridColumn: { xs: "1", md: "1 / -1" } }} /> {/* Arabic */} handleLanguageChange("arabicLevel", e.target.value)} fullWidth > {proficiencyOptions.map((o) => {o.label})} handleLanguageChange("arabicDescription", e.target.value)} fullWidth multiline sx={{ gridColumn: { xs: "1", md: "1 / -1" } }} /> {/* Other Skills */} handleLanguageChange("otherLanguagesDescription", e.target.value)} fullWidth multiline sx={{ gridColumn: { xs: "1", md: "1 / -1" } }} /> handleLanguageChange("dialectsDescription", e.target.value)} fullWidth multiline sx={{ gridColumn: { xs: "1", md: "1 / -1" } }} /> handleLanguageChange("otherSkills", e.target.value)} fullWidth multiline minRows={3} sx={{ gridColumn: { xs: "1", md: "1 / -1" } }} /> ); }