import React, { useEffect, useContext, useState } from "react"; import { useNavigate } from "react-router-dom"; import { DetailCard } from "../../pageElements/DetailCard.js"; import Button from "../../pageElements/Button"; import CreateModal from "../Modals/CreateModal.js"; import UploadModal from "../Modals/UploadModal.js"; import ConfirmModal from "../Modals/ConfirmModal.js"; import { db } from "../../firebase"; import { useParams } from "react-router-dom"; import { AppContext } from "../../Hooks/useContext/appContext.js"; import LoadingSpinner from "../../pageElements/LoadingSpinner"; import { doc, getDoc, updateDoc, onSnapshot, increment, } from "firebase/firestore"; const CaseDetailsPage = () => { const { caseId } = useParams(); const [subCase, setSubCase] = useState(null); const navigate = useNavigate(); const [showUploadModal, setShowUploadModal] = useState(); const [showCreateModal, setShowCreateModal] = useState(); const [showConfirmModal, setShowConfirmModal] = useState(); const [isLoading, setIsLoading] = useState(false); const [docsAllowed, setDocsAllowed] = useState(null); const [docsGenerated, setDocsGenerated] = useState(null); const [docTypeUploaded, setDocTypeUploaded] = useState(); const { appState } = useContext(AppContext); const { group } = appState; const appUserId = group ? group.appUserId : null; const fbUserId = group ? group.fbAuthUid : null; const message = "Parsing document. Please be patient, this may take several minutes."; const apiUrl = process.env.NODE_ENV === "development" ? process.env.REACT_APP_API_DEV : process.env.REACT_APP_API_PROD; const handleNavigate = (docId, caseId) => { //documentId, responseGenerations, caseId, documentType console.log("handle navigate fired docId", docId); let docType = "interrogatories"; navigate(`/documents/${docId}/${docType}/${caseId}`); }; const handleNavEdit = (documentId, caseId) => { if (!documentId || !caseId) { return; } console.log( "hit handleNavEdit----------------------------------------------------------" ); navigate(`/reqedit/${documentId}/interrogatories-out/${caseId}`); }; const handleBack = () => { navigate("/cases"); }; function getCase() { const docRef = doc(db, "cases", caseId); const unsub = onSnapshot(docRef, (snapshot) => { if (snapshot.exists() && snapshot.data().ownerId === appUserId) { setSubCase({ ...snapshot.data(), id: snapshot.id }); } else { setSubCase(null); } }); return unsub; } useEffect(getCase, [caseId, appUserId]); useEffect(() => { const fetchData = async () => { try { const docRef = doc(db, "users", fbUserId); const response = await getDoc(docRef).then(function (doc) { if (doc.exists) { const data = doc.data(); setDocsAllowed(data.docsAllowedPerMonth); setDocsGenerated(data.docsGenerated); return data; } else { console.log("No such document."); } }); } catch (err) { console.error(err); } }; fetchData(); }, [fbUserId]); const handleUploadDoc = () => { if (docsAllowed - docsGenerated > 0) { setShowUploadModal(true); } else { setShowConfirmModal(true); } }; const handleConfirmDocType = (docType) => { setShowConfirmModal(true); }; const handleCancelConfirm = () => { setShowConfirmModal(false); }; const handleConfirmUpgrade = () => { const isUpgrade = true; const currentPlan = group?.subscriptionPlan; navigate(`/signup/${isUpgrade}/${currentPlan}`); }; async function generateOutgoingDiscoveryRequests( docId, radioValue, clientPosition ) { console.log( "hit generateOutgoingDiscoveryRequests-----------------------------" ); const response = await fetch( `${apiUrl}/v1/make-outgoing-requests/${docId}/${radioValue}/${clientPosition}`, { method: "POST", } ); const res = response; return res; } async function handleSuccess(docId, docType, radioValue) { setShowUploadModal(false); console.log( " handle success in main pagedocId, docType, radioValue", docId, docType, radioValue ); if (docType === "complaint") { const clientPosition = subCase.clientPosition; generateOutgoingDiscoveryRequests(docId, radioValue, clientPosition); setTimeout(handleNavEdit, 20000, docId, caseId); } else { // try to kick off parsing here setTimeout(handleNavigate, 40000, docId, caseId); } } const ButtonContent = () => { return (