diff --git a/src/Components/Case/CaseDetailsPage.js b/src/Components/Case/CaseDetailsPage.js
index d24c05a..63d3aa8 100644
--- a/src/Components/Case/CaseDetailsPage.js
+++ b/src/Components/Case/CaseDetailsPage.js
@@ -108,7 +108,6 @@ const CaseDetailsPage = () => {
const response = await getDoc(docRef).then(function (doc) {
if (doc.exists) {
const data = doc.data();
- console.log("data", data);
setDocsAllowed(data.docsAllowedPerMonth);
setDocsGenerated(data.docsGenerated);
return data;
diff --git a/src/Components/Document/DocEditPage.js b/src/Components/Document/DocEditPage.js
index 360a268..5b0795b 100644
--- a/src/Components/Document/DocEditPage.js
+++ b/src/Components/Document/DocEditPage.js
@@ -23,51 +23,115 @@ import { docEditCopy } from "../../Constants/Copy/docEditCopy.js";
import "../../styles/docedit-page.scss";
const DocEditPage = (props) => {
+ const navigate = useNavigate();
const { documentId, caseId } = useParams();
const [document, setDocument] = useState(null);
const [docType, setDocType] = useState(null);
const [fetchedCase, setFetchedCase] = useState(null);
const [parsedRogs, setParsedRogs] = useState(null);
- const [docLoaded, setDocLoaded] = useState(false);
+ const [responses, setResponses] = useState();
+ const [showInputEle, setShowInputEle] = useState(true);
const { appState } = useContext(AppContext);
const { group } = appState;
const appUserId = group ? group.appUserId : null;
+ const [isBusy, setIsBusy] = useState(false);
+ const fbUserId = group ? group.fbAuthUid : null;
+ const [showSaveModal, setShowSaveModal] = useState(false);
+ const [isLoading, setIsLoading] = useState(false);
+ const [isReport, setIsReport] = useState(false);
+ const [issueText, setIssueText] = useState("");
+ const [showErrorModal, setShowErrorModal] = useState(false);
+ // For document generation:
+ 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 respondent =
+ fetchedCase?.clientPosition == "Defendant"
+ ? fetchedCase?.defendantParties
+ : fetchedCase?.plaintiffParties;
const apiUrl =
process.env.NODE_ENV === "development"
? process.env.REACT_APP_API_DEV
: process.env.REACT_APP_API_PROD;
- async function getParsedRequests(docId, docType) {
- try {
- const response = await fetch(
- `${apiUrl}/getParsedRequests/${documentId}/${docType}`,
- {
- method: "GET",
- }
- );
- const res = await response.json();
- const req = res[0].requests;
- if (req.length > 1) {
- setParsedRogs(req);
- }
- } catch (err) {
- console.log("Error occured GET parsed req:", err);
+ const displayCopy =
+ state === "ny"
+ ? docEditCopy.NewYork
+ : state === "nj"
+ ? docEditCopy.NewJersey
+ : docEditCopy.NewYork;
+
+ const headerPicker = () => {
+ switch (state) {
+ case "ny":
+ return (
+
+ );
+ case "nj":
+ return (
+
+ );
+ case "fl":
+ return (
+
+ );
+ default:
+ return (
+
+ );
}
- }
+ };
+
+ const headerString =
+ docType === "interrogatories" ? (
+ "Response to Interrogatories"
+ ) : docType === "admissions" ? (
+ "Response to Request for Admissions"
+ ) : docType === "production" ? (
+ "Response to Request for Production"
+ ) : docType === "combined-numbered" ? (
+ "Response to Interrogatories and Request for Production"
+ ) : (
+ <>>
+ );
+
+ const servingParty =
+ fetchedCase?.clientPosition === "Defendant"
+ ? fetchedCase?.plaintiffParties
+ : fetchedCase?.defendantParties;
+
+ const messages = [
+ "Generating responses. Please be patient, this may take several minutes.",
+ ];
async function getDocument(docId) {
try {
const docRef = doc(db, "documents", `${docId}`);
const docSnap = await getDoc(docRef);
if (docSnap.exists()) {
- const bar = docSnap.data();
- if (bar.docType) {
- console.log(bar.docType);
- let zib = bar.docType;
- console.log("zib", zib);
- getParsedRequests(docId, zib);
- }
+ const data = docSnap.data();
+ return data;
} else {
console.log("DB item does not exist");
}
@@ -93,7 +157,6 @@ const DocEditPage = (props) => {
}
async function getParsedRequests(docId, zib) {
- console.log("zibbbt", zib);
try {
fetch(`${apiUrl}/v1/get-parsed-requests/${documentId}/${zib}`, {
method: "GET",
@@ -110,24 +173,36 @@ const DocEditPage = (props) => {
obj["index"] = index;
return obj;
});
- return result;
- })
- .then((result) => {
setParsedRogs(result);
- })
- .catch((err) => {
- console.log("err in getz", err);
});
} catch (err) {
console.log("Error occured:", err);
}
}
+ async function getCompletions(docId, docType) {
+ if (!docId || !docType) {
+ return;
+ }
+ const response = await fetch(
+ `${apiUrl}/v1/get-completions/${docId}/${docType}`,
+ {
+ method: "GET",
+ }
+ );
+ const req = await response.json();
+ console.log("req", req);
+ return req;
+ }
+
useEffect(() => {
if (!documentId) {
return;
}
- getDocument(documentId);
+ getDocument(documentId).then((data) => {
+ setDocument(data);
+ setDocType(data.docType);
+ });
}, [documentId]);
useEffect(() => {
@@ -135,12 +210,365 @@ const DocEditPage = (props) => {
return;
}
getCase(caseId);
- getDocument(documentId);
}, [caseId, documentId]);
- useEffect(() => {}, [document]);
+ useEffect(() => {
+ if (!documentId || !docType) {
+ return;
+ }
- return
Doc Edit
; //
+ getCompletions(documentId, docType)
+ .then((data) => {})
+ .catch((err) => console.log(err));
+ }, [documentId, docType]);
+
+ /*
+ useEffect(() => {
+ if (!documentId || !docType) {
+ return;
+ }
+
+ getParsedRequests(documentId, docType)
+ .then((data) => {})
+ .catch((err) => console.log(err));
+ }, [documentId, docType]);
+*/
+ async function postEditedResponses(docId, docType) {
+ let obj = {};
+ obj["type"] = docType;
+ obj["id"] = docId;
+ obj["requests"] = responses ? responses : null;
+ const data = JSON.stringify(obj);
+ try {
+ const response = await fetch(`${apiUrl}/v1/store-edited-completions`, {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ json: true,
+ body: data,
+ });
+ const res = response;
+ return res;
+ } catch (error) {
+ console.error("Error sending responses to the server:", error);
+ }
+ }
+
+ async function cleanUpDocx() {
+ const docId = documentId;
+ const reqType = docType;
+ fetch(`${apiUrl}/cleanUpDocx/${docId}/${reqType}`, {
+ method: "GET",
+ })
+ .then((response) => {
+ console.log(response);
+ })
+ .catch((err) => {
+ console.log(err);
+ });
+ }
+
+ async function createAndReturnDocx() {
+ setIsBusy(true);
+ const response = await handleCreateDocx();
+ if (response.status === 200) {
+ setTimeout(getDocx, 5000);
+ setTimeout(cleanUpDocx, 10000);
+ } else {
+ setShowErrorModal(true);
+ }
+ setIsBusy(false);
+ }
+
+ async function getDocx() {
+ const docId = documentId;
+ const reqType = docType;
+ 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 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 = docType;
+ 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 responses to the server:", error);
+ }
+ }
+
+ const handleConfirmReport = () => {
+ setShowSaveModal(true);
+ setIsReport(true);
+ };
+
+ const handleConfirmSave = () => {
+ setShowSaveModal(true);
+ };
+
+ const handleSave = () => {
+ postEditedResponses();
+ setShowSaveModal(false);
+ };
+
+ const handleCancelSave = () => {
+ setShowSaveModal(false);
+ };
+
+ 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" });
+ }
+ };
+
+ const numberingContent = (i) => {
+ let numText;
+ if (docType === "interrogatories") {
+ numText = "INTERROGATORY NO..";
+ } else if (docType === "admissions") {
+ numText = "REQUEST FOR ADMISSION NO.";
+ } else if (docType === "production") {
+ numText = "REQUEST FOR PRODUCTION NO.";
+ } else {
+ numText = "REQUEST NO.";
+ }
+ return {`${numText}${i + 1} `}
;
+ };
+
+ const handleBlur = (e, i) => {
+ const newSelectedResponses = responses?.map((r) => {
+ if (r.index === i) {
+ return {
+ ...r,
+ showInputEle: !showInputEle,
+ };
+ }
+ return r;
+ });
+ setResponses(newSelectedResponses);
+ };
+
+ const handleFocus = (arg, i) => {
+ const newSelectedResponses = responses?.map((r) => {
+ if (r.index === i) {
+ return {
+ ...r,
+ showInputEle: !showInputEle,
+ };
+ }
+ return r;
+ });
+ setResponses(newSelectedResponses);
+ };
+
+ const handleEditValue = (e, i) => {
+ const editingRes = responses?.map((r) => {
+ if (r.index === i) {
+ return {
+ ...r,
+ resp: e.target.value,
+ };
+ }
+ return r;
+ });
+ setResponses(editingRes);
+ };
+
+ const handleReport = () => {
+ setShowSaveModal(false);
+ setIsReport(false);
+ };
+
+ const handleBack = () => {
+ navigate(`/documents`);
+ };
+
+ const editingContent = () => {
+ return (
+ <>
+ {headerPicker()}
+
+
{headerString}
+
+ {displayCopy.prelimaryStatement(docType, respondent, servingParty)}
+
+
+ {parsedRogs?.map((rog, i) => (
+
+
+ {numberingContent(i)}
+ {rog?.text}
+
+
+ 2
+ ? // NEVER CHANGE THIS
+ responses[i].resp
+ : null
+ }
+ setShowInputEle={setShowInputEle}
+ showInputEle={
+ responses && responses.length > 2
+ ? responses[i].showInputEle
+ : null
+ }
+ handleFocus={handleFocus}
+ handleEditValue={handleEditValue}
+ handleBlur={handleBlur}
+ i={i}
+ />
+
+
+ ))}
+
handleConfirmReport()}
+ >
+
Report an issue
+
+
+
+ {/* TODO: add tooltip: "This will save the document and create a .docx file that will (be downloaded? saved somewhere?" */}
+
+
+
+
+
+
+ {showSaveModal && !isReport && documentId !== null ? (
+
+ ) : null}
+ {showSaveModal && isReport && documentId !== null ? (
+
+ ) : null}
+ {showErrorModal ? (
+ setShowErrorModal(false)}
+ onConfirm={() => setShowErrorModal(false)}
+ buttonLabelText="Confirm"
+ modalText={
+ "There was a problem. Support was notified and will respond within 24 hours."
+ }
+ />
+ ) : null}
+ >
+ );
+ };
+
+ const readyToEdit = fetchedCase && responses.length > 1;
+
+ return isLoading ? (
+
+ ) : isBusy ? (
+
+ ) : readyToEdit ? (
+ editingContent()
+ ) : (
+
+
+
+ {" "}
+ Response 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 DocEditPage;