import DefaulModal from '@/components/DefaulModal' import { Button } from '@/components/ui/button' import { useState, type FC, useEffect } from 'react' import { useForm } from 'react-hook-form' import { ResumeType } from '../types/Types' import { useGetJobs } from '../hooks/useJobsData' import { useMutation } from '@tanstack/react-query' import * as api from '../service/JobsService' import { toast } from '@/components/Toast' import Input from '@/components/Input' import DatePickerComponent from '@/components/DatePicker' import Select from '@/components/Select' import { DocumentUpload, CloseCircle } from 'iconsax-react' import { extractErrorMessage } from '@/helpers/errorUtils' interface ResumeProps { jobId?: string } const Resume: FC = ({ jobId }) => { const [open, setOpen] = useState(false) const [selectedFile, setSelectedFile] = useState(null) const [filePreview, setFilePreview] = useState('') const { data: jobsData } = useGetJobs() const { register, handleSubmit, formState: { errors }, setValue, watch, reset } = useForm() const jobs = jobsData?.results?.jobs || [] const jobOptions = jobs.map(job => ({ label: job.title, value: job._id })) const watchedJob = watch('job') useEffect(() => { if (jobId) { setValue('job', jobId) } }, [jobId, setValue]) const uploadFileMutation = useMutation({ mutationFn: api.uploadSingleFile, onSuccess: (data) => { setValue('resumeUrl', data?.results?.url?.url) toast('فایل با موفقیت آپلود شد', 'success') }, onError: () => { toast('خطا در آپلود فایل', 'error') setSelectedFile(null) setFilePreview('') } }) const sendResumeMutation = useMutation({ mutationFn: api.sendResume, onSuccess: () => { toast('رزومه شما با موفقیت ارسال شد', 'success') setOpen(false) reset() setSelectedFile(null) setFilePreview('') }, onError: (error) => { toast(extractErrorMessage(error), 'error') } }) const handleFileChange = (event: React.ChangeEvent) => { const file = event.target.files?.[0] if (file) { // بررسی نوع فایل if (!file.type.includes('pdf') && !file.type.includes('word') && !file.type.includes('document')) { toast('لطفا فایل PDF یا Word انتخاب کنید', 'error') return } // بررسی اندازه فایل (حداکثر 5MB) if (file.size > 5 * 1024 * 1024) { toast('حجم فایل نباید بیشتر از ۵ مگابایت باشد', 'error') return } setSelectedFile(file) setFilePreview(file.name) // آپلود فایل uploadFileMutation.mutate(file) } } const removeFile = () => { setSelectedFile(null) setFilePreview('') setValue('resumeUrl', '') } const onSubmit = (data: ResumeType) => { if (!selectedFile) { toast('لطفا فایل رزومه را انتخاب کنید', 'error') return } if (!data.resumeUrl) { toast('لطفا منتظر تکمیل آپلود فایل باشید', 'error') return } sendResumeMutation.mutate(data) } return (
setOpen(false)} title_header='ارسال رزومه' isHeader >
{/* انتخاب شغل */} {/* نام پدر */} {/* محل تولد */} {/* تاریخ تولد */} setValue('birthday', date)} error_text={errors.birthday?.message} /> {/* آپلود فایل رزومه */}
{!selectedFile ? (
) : (
{filePreview} {uploadFileMutation.isPending && ( در حال آپلود... )}
)} {errors.resumeUrl && (
{errors.resumeUrl.message}
)}
{/* دکمه‌های اقدام */}
) } export default Resume