import React, { createContext, useContext, useEffect, useState } from "react"; import GlobalModel from "../common/GlobalModel"; import NewDocument from "./ManageDocument"; import { DOCUMENTS_ENTITIES, UPLOAD_DOCUMENT } from "../../utils/constants"; import { useParams } from "react-router-dom"; import DocumentsList from "./DocumentsList"; import DocumentFilterPanel from "./DocumentFilterPanel"; import { useFab } from "../../Context/FabContext"; import { useForm } from "react-hook-form"; import { DocumentFilterDefaultValues, DocumentFilterSchema, } from "./DocumentSchema"; import { zodResolver } from "@hookform/resolvers/zod"; import ManageDocument from "./ManageDocument"; import ViewDocument from "./ViewDocument"; import DocumentViewerModal from "./DocumentViewerModal"; import { useHasUserPermission } from "../../hooks/useHasUserPermission"; import { useProfile } from "../../hooks/useProfile"; // Context export const DocumentContext = createContext(); export const useDocumentContext = () => { const context = useContext(DocumentContext); if (!context) { throw new Error( "useDocumentContext must be used within an DocumentProvider" ); } return context; }; export const getDocuementsStatus = (status) => { switch (status) { case true: return ( Verified ); case false: return ( Rejected ); case null: default: return ( Pending ); } }; const Documents = ({ Document_Entity, Entity }) => { const [isSelf, setIsSelf] = useState(false); const [searchText, setSearchText] = useState(""); const [isActive, setIsActive] = useState(true); const [filters, setFilter] = useState(); const [isRefetching, setIsRefetching] = useState(false); const [refetchFn, setRefetchFn] = useState(null); const [DocumentEntity, setDocumentEntity] = useState(Document_Entity); const { employeeId } = useParams(); const [OpenDocument, setOpenDocument] = useState(false); const [ManageDoc, setManageDoc] = useState({ document: null, isOpen: false, }); const [viewDoc, setViewDoc] = useState({ document: null, isOpen: false, }); const { profile } = useProfile(); useEffect(() => { if (profile?.employeeInfo?.id) { setIsSelf(profile.employeeInfo.id === employeeId); } }, [profile?.employeeInfo?.id, employeeId]); const canUploadDocument = useHasUserPermission(UPLOAD_DOCUMENT); const { setOffcanvasContent, setShowTrigger } = useFab(); const methods = useForm({ resolver: zodResolver(DocumentFilterSchema), defaultValues: DocumentFilterDefaultValues, }); const { reset } = methods; const clearFilter = () => { setFilter(DocumentFilterDefaultValues); reset(); }; useEffect(() => { setShowTrigger(true); setOffcanvasContent( "Document Filters", ); return () => { setShowTrigger(false); setOffcanvasContent("", null); }; }, []); const contextValues = { ManageDoc, setManageDoc, viewDoc, setViewDoc, setOpenDocument, OpenDocument, }; useEffect(() => { if (Document_Entity) { setDocumentEntity(Document_Entity); } }, [Document_Entity]); return ( {/* Search */} {" "} setSearchText(e.target.value)} className="form-control form-control-sm" placeholder="Search Document" /> setIsActive(e.target.checked)} /> {isActive ? "Active Document" : "In-Active Document"} {(isSelf || canUploadDocument) && ( setManageDoc({ document: null, isOpen: true, }) } > Add New Document )} {ManageDoc.isOpen && ( setManageDoc({ document: null, isOpen: false, }) } > setManageDoc({ document: null, isOpen: false, }) } Document_Entity={DocumentEntity} Entity={Entity} /> )} {viewDoc.isOpen && ( setViewDoc({ document: null, isOpen: false, }) } > )} {OpenDocument && ( setOpenDocument(false)} > )} ); }; export default Documents;