import { useState, useContext, useEffect } from "react"; import headerPicker from "./HeaderPicker"; import { useParams } from "react-router-dom"; import { Link, useNavigate } from "react-router-dom"; import { AppContext } from "../../Hooks/useContext/appContext"; import EditElement from "../../pageElements/EditElement"; import LoadingSpinner from "../../pageElements/LoadingSpinner"; import { docEditCopy } from "../../Constants/Copy/docEditCopy.js"; import ConfirmModal from "../Modals/ConfirmModal"; import Button from "../../pageElements/Button"; import { rogInstructions } from "../../Constants/Copy/reqEditCopy.js"; import { db } from "../../firebase"; import { collection, updateDoc, onSnapshot, doc, getDoc, setDoc, increment, } from "firebase/firestore"; import "../../styles/doclist-page.scss"; const RequestEditPage = () => { const { documentId, documentType, caseId } = useParams(); const { appState } = useContext(AppContext); const { group } = appState; const navigate = useNavigate(); const [requests, setRequests] = useState([1]); const [fetchedCase, setFetchedCase] = useState(); const [showInputEle, setShowInputEle] = useState(true); const [document, setDocument] = useState(null); const appUserId = group ? group.appUserId : null; const [docId, setDocId] = useState(documentId); const [saveDocumentId, setSaveDocumentId] = useState(""); const [showSaveModal, setShowSaveModal] = useState(false); const [isLoading, setIsLoading] = useState(false); const [isReport, setIsReport] = useState(false); const [issueText, setIssueText] = useState(""); const [showErrorModal, setShowErrorModal] = useState(false); const [isBusy, setIsBusy] = useState(false); const state = group.state[0] ? group.state[0].code : "ny"; const lawFirm = group ? group?.firm : null; const streetAdd = group ? group?.streetAddress : null; const city = group ? group.city : null; const usState = group.state[0] ? group.state[0].code : "ny"; const zipCode = group ? group.zipCode : null; const telephone = group ? group.telephone : null; const apiUrl = process.env.NODE_ENV === "development" ? process.env.REACT_APP_API_DEV : process.env.REACT_APP_API_PROD; const headerString = documentType === "interrogatories" ? ( "Response to Interrogatories" ) : documentType === "admissions" ? ( "Response to Request for Admissions" ) : documentType === "production" ? ( "Response to Request for Production" ) : documentType === "combined-numbered" ? ( "Response to Interrogatories and Request for Production" ) : ( <> ); useEffect(() => { if (!appUserId || !docId) { setDocument(null); return; } try { getCase(caseId); //getDocument(); } catch (err) { console.log("Error:", err); } }, [appUserId, docId, caseId]); /* * GET parsed requests. * GET completions if already generated */ useEffect(() => { if (!documentId || !documentType) { return; } getOutgoingRequests(documentId) .then((data) => { console.log("data in useEffect", data); const resp = data[0].requests.map((item, index) => { // NEVER CHANGE THIS: return { showInputEle: false, text: item.text, index: index }; }); setRequests(resp); }) .catch((err) => console.log(err)); }, [documentId]); async function getCase(parentCaseId) { try { const docRef = doc(db, "cases", `${parentCaseId}`); const docSnap = await getDoc(docRef); if (docSnap.exists()) { const _case = docSnap.data(); _case.id = docSnap._key.path.segments[1]; setFetchedCase(_case); } else { console.log("DB item does not exist"); } } catch (error) { console.log(`A system error has occurred: ${error}`); } } async function getOutgoingRequests(docId) { console.log("getOutgoingRequests fired, docId", docId); const docType = String(documentType); const response = await fetch( `${apiUrl}/v1/get-outgoing-requests/${docId}/${docType}`, { method: "GET", } ); const req = await response.json(); return req; } async function getDocx() { const docId = documentId; const reqType = documentType; fetch(`${apiUrl}/getDocx/${docId}/${reqType}`, { method: "GET", }).then((response) => { response.blob().then((blob) => { let url = window.URL.createObjectURL(blob); let a = window.document.createElement("a"); a.href = url; a.download = `${reqType}-repsonse.docx`; a.click(); }); }); } async function cleanUpDocx() { const docId = documentId; const reqType = documentType; fetch(`${apiUrl}/cleanUpDocx/${docId}/${reqType}`, { method: "GET", }) .then((response) => { setIsBusy(false); }) .catch((err) => { console.log(err); }); } async function createAndReturnDocx() { window.scrollTo({ top: 0 }); setIsBusy(true); const response = await handleCreateDocx(); if (response.status === 200) { setTimeout(getDocx, 5000); setTimeout(cleanUpDocx, 10000); } else { setShowErrorModal(true); } } const postEditedrequests = () => {}; const onScrollClick = () => { const bottom = window.document.scrollingElement.scrollHeight; const place = window.scrollY; if (place > bottom / 2) { window.scrollTo({ top: 0, behavior: "smooth" }); } else if (place < bottom / 2) { window.scrollTo({ top: bottom, behavior: "smooth" }); } }; async function handleCreateDocx() { // TODO: compare to see if any changes made before gen, save those const docId = documentId; const leadAttorneys = fetchedCase?.leadAttorneys ? fetchedCase?.leadAttorneys : null; const reqType = documentType; const captionOne = fetchedCase.caption; const captionTwo = fetchedCase.captionTwo; const caseNum = fetchedCase.caseNumber; const plaintiffs = fetchedCase.plaintiffParties; const defendants = fetchedCase.defendantParties; const venued = fetchedCase.venue; const juris = fetchedCase.jurisdiction; const judge = fetchedCase.judge; const clientPosition = fetchedCase?.clientPosition ? fetchedCase?.clientPosition : null; try { const response = await fetch(`${apiUrl}/genDocx/${docId}/${reqType}`, { method: "POST", headers: { Accept: "application/json", "Content-Type": "application/json", }, body: JSON.stringify({ caseCaption1: captionOne, caseCaption2: captionTwo, caseNumber: caseNum, clientPosition: clientPosition, defendant: defendants, firm: lawFirm, firmCity: city, firmState: usState.code, firmStreetAddress: streetAdd, firmZip: zipCode, judge: judge, jurisdiction: juris, leadAttorneys: leadAttorneys, plaintiff: plaintiffs, state: state, tel: telephone, venue: venued, }), }); return response; } catch (error) { console.error("Error sending requests to the server:", error); } } const handleBlur = (e, i) => { const newSelectedrequests = requests?.map((r) => { if (r.index === i) { return { ...r, showInputEle: !showInputEle, }; } return r; }); setRequests(newSelectedrequests); }; const handleFocus = (arg, i) => { const newSelectedrequests = requests?.map((r) => { if (r.index === i) { return { ...r, showInputEle: !showInputEle, }; } return r; }); setRequests(newSelectedrequests); }; const handleEditValue = (e, i) => { const editingRes = requests?.map((r) => { if (r.index === i) { return { ...r, resp: e.target.value, }; } return r; }); setRequests(editingRes); }; const handleBack = () => { navigate(`/documents`); }; const handleCancelSave = () => { setShowSaveModal(false); }; const handleSave = () => { postEditedrequests(); setShowSaveModal(false); }; const handleReport = () => { setShowSaveModal(false); setIsReport(false); }; const handleConfirmSave = () => { setShowSaveModal(true); }; const handleConfirmReport = () => { setShowSaveModal(true); setIsReport(true); }; const numberingContent = (i) => { let numText; if (documentType === "interrogatories") { numText = "INTERROGATORY NO.."; } else if (documentType === "admissions") { numText = "REQUEST FOR ADMISSION NO."; } else if (documentType === "production") { numText = "REQUEST FOR PRODUCTION NO."; } else { numText = "REQUEST NO."; } return
{`${numText}${i + 1} `}
; }; const respondent = fetchedCase?.clientPosition == "Defendant" ? fetchedCase?.defendantParties : fetchedCase?.plaintiffParties; const displayCopy = state === "ny" ? docEditCopy.NewYork : state === "nj" ? docEditCopy.NewJersey : docEditCopy.NewYork; const servingParty = fetchedCase?.clientPosition === "Defendant" ? fetchedCase?.plaintiffParties : fetchedCase?.defendantParties; console.log("requests", requests); const editingContent = () => { return ( <>
{headerPicker(state, fetchedCase, onScrollClick)}
INTERROGATORIES AND REQUESTS FOR PRODUCTION
{displayCopy.prelimaryStatement( documentType, respondent, servingParty )}
{/*displayCopy.prelimaryStatement*/}
INSTRUCTIONS
{rogInstructions?.map((req, i) => (
{`${i + 1}.`}
{req?.text}
))}
INTERROGATORIES
{requests?.map((req, i) => (
{`${i + 1}.`}
{req?.text}
))}
handleConfirmReport()} >
Report an issue
); }; //const readyToEdit = fetchedCase && requests.length > 1; const readyToEdit = true; const messages = [ "Generating responses. Please be patient, this may take several minutes.", ]; return isLoading ? ( ) : isBusy ? ( ) : readyToEdit ? ( editingContent() ) : (

Content for this document cannot be displayed at this time.

Support has been notified and will respond within 24 hours.

Return to Dashboard
); }; export default RequestEditPage; /*
{displayCopy.prelimaryStatement( documentType, respondent, servingParty )}
console.log("reqwuests in useEffect", requests); {headerPicker(state, fetchedCase, onScrollClick)} 2 ? // NEVER CHANGE THIS requests[i].resp : null } setShowInputEle={setShowInputEle} showInputEle={ requests && requests.length > 2 ? requests[i].showInputEle : null } handleFocus={handleFocus} handleEditValue={handleEditValue} handleBlur={handleBlur} i={i} /> */