import { useState, useCallback, useEffect } from "react"; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Button } from "@/components/ui/button"; import { toast } from "sonner"; import { t } from "@/utils"; import { HiOutlineUpload } from "react-icons/hi"; import { MdOutlineAttachFile } from "react-icons/md"; import { useDropzone } from "react-dropzone"; import { jobApplyApi } from "@/utils/api"; import { userSignUpData } from "@/redux/reducer/authSlice"; import { useSelector } from "react-redux"; const ApplyJobModal = ({ showApplyModal, setShowApplyModal, item_id, setProductDetails, }) => { const userData = useSelector(userSignUpData); const [formData, setFormData] = useState({ fullName: userData?.name || "", phoneNumber: userData?.mobile || "", email: userData?.email || "", resume: null, }); const [isSubmitting, setIsSubmitting] = useState(false); const [resumePreview, setResumePreview] = useState(null); // this is the useEffect to revoke the object url of the resume preview useEffect(() => { return () => { if (resumePreview?.url) { URL.revokeObjectURL(resumePreview.url); } }; }, [resumePreview?.url]); const onDrop = useCallback((acceptedFiles) => { const file = acceptedFiles[0]; if (file) { setFormData((prev) => ({ ...prev, resume: file, })); // Create preview for PDF files if (file.type === "application/pdf") { const fileUrl = URL.createObjectURL(file); setResumePreview({ url: fileUrl, isPdf: true, name: file.name, }); } else { setResumePreview({ url: null, isPdf: false, name: file.name, }); } } }, []); const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop, accept: { "application/pdf": [".pdf"], "application/msword": [".doc"], "application/vnd.openxmlformats-officedocument.wordprocessingml.document": [".docx"], }, maxFiles: 1, multiple: false, }); const removeResume = () => { setFormData((prev) => ({ ...prev, resume: null, })); if (resumePreview?.url) { URL.revokeObjectURL(resumePreview.url); } setResumePreview(null); }; const handleInputChange = (e) => { const { name, value } = e.target; setFormData((prev) => ({ ...prev, [name]: value, })); }; const handleSubmit = async (e) => { e.preventDefault(); try { // Create form data object to send const data = { full_name: formData.fullName, mobile: formData.phoneNumber, email: formData.email, item_id: item_id, }; // Only include resume if it's available if (formData.resume) { data.resume = formData.resume; } setIsSubmitting(true); const res = await jobApplyApi.jobApply(data); if (res?.data?.error === false) { toast.success(res?.data?.message); setProductDetails((prev) => ({ ...prev, is_already_job_applied: true, })); setShowApplyModal(false); } else { toast.error(res?.data?.message); } } catch (error) { console.log(error); } finally { setIsSubmitting(false); } }; return ( e.preventDefault()} > {t("applyNow")}
{/* Full Name */}
{/* Phone Number */}
{/* Email */}
{/* Resume Upload */}
{!resumePreview ? (

{isDragActive ? t("dropResumeHere") : t("dragAndDropResume")}

{t("clickToSelect")}

PDF, DOC, DOCX

) : (
{resumePreview.name}
)}
{/* Submit Button */}
); }; export default ApplyJobModal;