import React, { useEffect, useState } from "react"; import { useNavigate, useParams, useRouteLoaderData, useSubmit, } from "react-router-dom"; import ValidationStatus from "./ValidationStatus"; import Form from "../ApplicationForm/Form"; import RejectionFeedback from "./RejectionFeedback"; import { TbLoader3 } from "react-icons/tb"; import AcceptChoice from "./AcceptChoice"; import { FaCopy } from "react-icons/fa"; function ApplicationView() { const { role, user } = useRouteLoaderData("Applicant-Root")?.data || useRouteLoaderData("Validator-Root")?.data; const submit = useSubmit(); const navigate = useNavigate(); const [loading, setLoading] = useState(false); const [applicationDisplay, setApplicationDisplay] = useState(null); const [rejectionFeedbackPopUp, setRejectionFeedbackPopUp] = useState(false); const [acceptChoicePopUp, setAcceptChoicePopUp] = useState(false); const [copySuccess, setCopySuccess] = useState(false); const [formValues, setFormValues] = useState({}); const applicationId = useParams().applicationId; const statusParam = useParams().status; const getFullApplication = async (applicationId) => { try { setLoading(true); const response = await fetch( `${ import.meta.env.VITE_APP_API_URL }/general/getApplicationData/${applicationId}`, { method: "GET", credentials: "include", } ); if (!response.ok) { throw new Error( `Failed to fetch application data: ${response.status} ${response.statusText}` ); } const fullApplication = await response.json(); setApplicationDisplay(fullApplication?.data); } catch (error) { console.error("Error fetching application data:", error); } finally { setLoading(false); } }; const handleSubmit = ( applicationId, action, rejectionFeedback = "", toVC = false, resubmission = false ) => { try { setLoading(true); const formData = new FormData(); formData.append("applicationId", applicationId); formData.append("action", action); formData.append("rejectionFeedback", rejectionFeedback); formData.append("toVC", toVC); formData.append("resubmission", resubmission); if (formValues && formValues?.expenses) { formData.append("expenses", JSON.stringify(formValues.expenses)); } submit(formData, { method: "PUT", encType: "multipart/form-data", // Specify the encoding type }); } catch (error) { console.error("Error during submit:", error); } finally { setLoading(false); } }; // Navigation for status change let currentStatus = applicationDisplay?.currentStatus?.toLowerCase(); useEffect(() => { getFullApplication(applicationId); }, [applicationId]); useEffect(() => { if ( (statusParam !== currentStatus && currentStatus) || (applicationId !== applicationDisplay?.applicationId && applicationDisplay?.applicationId) ) { const location = window.location.pathname; const newPath = location.split("/").slice(0, -2).join("/"); navigate( `${newPath}/${currentStatus}/${applicationDisplay?.applicationId}` ); } }, [statusParam, currentStatus, applicationDisplay]); if (loading) { return (
Loading...