import { useContext, useEffect, useState, useRef } from "react"; import { useNavigate } from "react-router-dom"; import { AppContext } from "../../Hooks/useContext/appContext"; import SelectDropdown from "../../pageElements/SelectDropdown"; import { DocCard } from "../../pageElements/Cards"; import { db } from "../../firebase"; import MobileContent from "../MobileContent"; import { collection, deleteDoc, doc, documentId, onSnapshot, query, where, } from "firebase/firestore"; import ListPagination from "../../pageElements/ListPagination"; import ConfirmModal from "../Modals/ConfirmModal"; import Toggle from "../../pageElements/Toggle"; import "../../styles/doclist-page.scss"; const DocumentListPage = ({ perPage }) => { const size = window.innerWidth < 440; const [isMobile, setIsMobile] = useState(size); const count = useRef(null); const navigate = useNavigate(); const [showDeleteModal, setShowDeleteModal] = useState(false); const [selectedDocumentId, setSelectedDocumentId] = useState(null); const [allDocs, setAllDocs] = useState(null); const { appState } = useContext(AppContext); const [totalPages, setTotalPages] = useState(1); const { group } = appState; const [page, setPage] = useState(1); const [order, setOrder] = useState("parentCaseName"); const appUserId = group ? group.appUserId : null; const [isBusy, setIsBusy] = useState(false); const [selectedDocumentType, setSelectedDocumentType] = useState(); const [showModal, setShowModal] = useState(false); const [verbValue, setVerbValue] = useState(1); const apiUrl = process.env.NODE_ENV === "development" ? process.env.REACT_APP_API_DEV : process.env.REACT_APP_API_PROD; useEffect(() => { if (count.current == null) { setIsMobile(window.innerWidth < 440); } if (count.current < 3) { setIsMobile(window.innerWidth < 440); } return () => { const temp = (count.current = count.current + 1); count.current = temp; }; }, []); function getDocuments() { if (!appUserId) { setAllDocs([]); return; } const q = query( collection(db, "documents"), where("ownerId", "==", appUserId) ); const unsub = onSnapshot(q, (snapshot) => { const data = snapshot.docs.map((doc) => ({ ...doc.data(), documentId: doc.id, })); if (order === "parentCaseName") { data.sort((a, b) => { return a.parentCaseName.toLowerCase() > b.parentCaseName.toLowerCase() ? 1 : -1; }); } else if (order === "parentCaseName2") { data.sort((a, b) => { return a.parentCaseName.toLowerCase() < b.parentCaseName.toLowerCase() ? 1 : -1; }); } const pages = Math.ceil(data.length / perPage); if (page > pages) { setPage(pages); } setTotalPages(pages); setAllDocs(data); }); return unsub; } useEffect(getDocuments, [appUserId, order]); async function deleteFromDb(documentId) { if (isBusy) { return; } setIsBusy(true); try { const docRef = doc(db, "documents", `${documentId}`); await deleteDoc(docRef); setShowDeleteModal(false); } catch (err) { console.log("Error deleting document from db:", err); } setIsBusy(false); } async function deleteFromStorage() { const selectedDoc = allDocs.filter((doc) => { return doc.documentId == selectedDocumentId; }); const respGens = selectedDoc[0].responseGenerations; try { const response = await fetch( `${apiUrl}/deleteDoc/${selectedDocumentId}/${selectedDocumentType}/${respGens}`, { method: "POST", } ); const res = response; return res; } catch (error) { console.error("Error deleting document from storage:", error); } } const dropDownOptions = [ { label: "Associated case name a - z", value: "parentCaseName" }, { label: "Associated case name z - a", value: "parentCaseName2" }, ]; const handleNovos = (e) => { navigate("/how-to"); }; function handleNavigate( documentId, responseGenerations, caseId, documentType ) { const _id = String(documentId); const _resGen = String(responseGenerations); const parentCaseId = String(caseId); const _docType = String(documentType); navigate( `/docedit/${_id}/${responseGenerations}/${parentCaseId}/${documentType}` ); } const handleToggle = (val) => setVerbValue(val); function handleCancelDelete() { if (!isBusy) { setShowDeleteModal(false); } } function handleDeleteDocument() { deleteFromDb(selectedDocumentId); deleteFromStorage(selectedDocumentId, selectedDocumentType); } function confirmDelete(documentId, docType) { setSelectedDocumentId(documentId); setSelectedDocumentType(docType); setShowDeleteModal(true); } if (!group) { return null; } const DesktopContent = () => { return ( <>
Novos
Min
Max
{" "} You have not uploaded any documents yet.
To upload a document: