From ef00f83c44ccb207a247d88555fca9902f3a62cc Mon Sep 17 00:00:00 2001 From: pramod mahajan Date: Tue, 2 Sep 2025 19:34:42 +0530 Subject: [PATCH] document can inside open in browser --- .../Documents/DocumentViewerModal.jsx | 27 +++++++++++ src/components/Documents/Documents.jsx | 13 +++++- src/components/Documents/DocumentsList.jsx | 46 +++++++++++-------- src/components/Documents/ViewDocument.jsx | 18 +++++--- src/hooks/useDocument.js | 8 ++++ src/pages/authentication/LoginPage.jsx | 12 ++--- 6 files changed, 92 insertions(+), 32 deletions(-) create mode 100644 src/components/Documents/DocumentViewerModal.jsx diff --git a/src/components/Documents/DocumentViewerModal.jsx b/src/components/Documents/DocumentViewerModal.jsx new file mode 100644 index 00000000..c5595e84 --- /dev/null +++ b/src/components/Documents/DocumentViewerModal.jsx @@ -0,0 +1,27 @@ +import React, { useEffect } from "react"; +import { useDocumentVersion } from "../../hooks/useDocument"; +import { useDocumentContext } from "./Documents"; +import { error } from "pdf-lib"; + +const DocumentViewerModal = () => { + const { viewDoc,setOpenDocument } = useDocumentContext(); + const { data, isLoading, isError,error } = useDocumentVersion(viewDoc.document); + + useEffect(() => { + if (data?.data) { + const fileUrl = data.data; + window.open(fileUrl, "_blank"); + setOpenDocument(false) + } + }, [data]); + + if (isLoading) return

Loading document...

; + if (isError) return
+

{error.message}

+
; + + // Nothing to render inside modal since we redirect + return null; +}; + +export default DocumentViewerModal; diff --git a/src/components/Documents/Documents.jsx b/src/components/Documents/Documents.jsx index fbb89d69..85efe79c 100644 --- a/src/components/Documents/Documents.jsx +++ b/src/components/Documents/Documents.jsx @@ -14,6 +14,7 @@ import { import { zodResolver } from "@hookform/resolvers/zod"; import ManageDocument from "./ManageDocument"; import ViewDocument from "./ViewDocument"; +import DocumentViewerModal from "./DocumentViewerModal"; // Context export const DocumentContext = createContext(); @@ -50,6 +51,7 @@ const Documents = ({ Document_Entity, Entity }) => { 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, @@ -91,7 +93,9 @@ const Documents = ({ Document_Entity, Entity }) => { ManageDoc, setManageDoc, viewDoc, - setViewDoc + setViewDoc, + setOpenDocument, + OpenDocument } useEffect(()=>{ @@ -189,6 +193,13 @@ const Documents = ({ Document_Entity, Entity }) => { )} + + {OpenDocument && ( + setOpenDocument(false)}> + + + )} + diff --git a/src/components/Documents/DocumentsList.jsx b/src/components/Documents/DocumentsList.jsx index 3fe39a49..7cc64e53 100644 --- a/src/components/Documents/DocumentsList.jsx +++ b/src/components/Documents/DocumentsList.jsx @@ -9,7 +9,6 @@ import { DocumentTableSkeleton } from "./DocumentSkeleton"; import { getDocuementsStatus, useDocumentContext } from "./Documents"; import Pagination from "../common/Pagination"; - const DocumentsList = ({ Document_Entity, Entity, @@ -19,7 +18,7 @@ const DocumentsList = ({ setRefetchFn, }) => { const debouncedSearch = useDebounce(searchText, 500); - const [currentPage,setCurrentPage] = useState(1) + const [currentPage, setCurrentPage] = useState(1); const { data, isError, isLoading, error, refetch, isFetching } = useDocumentListByEntityId( Document_Entity, @@ -40,19 +39,20 @@ const DocumentsList = ({ setIsRefetching(isFetching); }, [isFetching, setIsRefetching]); - const {setManageDoc,setViewDoc} = useDocumentContext() + const { setManageDoc, setViewDoc } = useDocumentContext(); - // check no data scenarios - const noData = !isLoading && !isError && data?.data.length === 0; - const isSearchEmpty = noData && !!debouncedSearch; - const isFilterEmpty = noData && false; - const isInitialEmpty = noData && !debouncedSearch; - const paginate = (page) => { + const paginate = (page) => { if (page >= 1 && page <= (data?.totalPages ?? 1)) { setCurrentPage(page); } }; - if (isLoading || isFetching) return + + const noData = !isLoading && !isError && data?.data.length === 0; + const isSearchEmpty = noData && !!debouncedSearch; + const isFilterEmpty = noData && !!filters && Object.keys(filters).length > 0; + const isInitialEmpty = noData && !debouncedSearch && !isFilterEmpty; + + if (isLoading || isFetching) return ; if (isError) return
Error: {error?.message || "Something went wrong"}
; if (isInitialEmpty) return
No documents found yet.
; @@ -137,9 +137,19 @@ const DocumentsList = ({ ))}
- setViewDoc({document:doc?.id,isOpen:true})}> + + setViewDoc({ document: doc?.id, isOpen: true }) + } + > - setManageDoc({document:doc?.id,isOpen:true})}> + + setManageDoc({ document: doc?.id, isOpen: true }) + } + >
@@ -149,12 +159,12 @@ const DocumentsList = ({ {data?.data?.length > 0 && ( - - )} + + )} ); }; diff --git a/src/components/Documents/ViewDocument.jsx b/src/components/Documents/ViewDocument.jsx index f22e836e..95b673b8 100644 --- a/src/components/Documents/ViewDocument.jsx +++ b/src/components/Documents/ViewDocument.jsx @@ -12,7 +12,7 @@ import VersionListSkeleton from "./VersionListSkeleton"; import DocumentDetailsSkeleton from "./DocumentDetailsSkeleton "; const ViewDocument = () => { - const { viewDoc, setViewDoc } = useDocumentContext(); + const { viewDoc, setViewDoc,setOpenDocument } = useDocumentContext(); const [currentPage, setCurrentPage] = useState(1); const { data, isLoading, isError, error } = useDocumentDetails( viewDoc?.document @@ -39,8 +39,7 @@ const ViewDocument = () => {

Document Details

- {/* Row 1 */} - {/* Row 1 */} +
@@ -184,8 +183,9 @@ const ViewDocument = () => { {getDocuementsStatus(document.isVerified)}
-
- Upload By +
+
+ Upload By { document.uploadedBy?.lastName ?? "" }`.trim() || "N/A"} +
+
setOpenDocument(true)} > + view +
-
+ {/*
{document?.updatedAt && ( Updated At : {formatUTCToLocalTime(document.updatedAt)} )} -
+
*/} ))}
)} diff --git a/src/hooks/useDocument.js b/src/hooks/useDocument.js index 609955c6..f6fed0a2 100644 --- a/src/hooks/useDocument.js +++ b/src/hooks/useDocument.js @@ -91,6 +91,14 @@ export const useDocumentVersionList = (parentAttachmentId,pageSize,pageNumber) = }); }; + +export const useDocumentVersion = (id)=>{ + return useQuery({ + queryKey:["DocumentVersion",id], + queryFn:async()=> await DocumentRepository.getDocumentVersion(id), + enabled:!!id + }) +} //----------------------- MUTATION ------------------------- export const useUploadDocument = (onSuccessCallBack) => { diff --git a/src/pages/authentication/LoginPage.jsx b/src/pages/authentication/LoginPage.jsx index f8f48c84..6b97ffce 100644 --- a/src/pages/authentication/LoginPage.jsx +++ b/src/pages/authentication/LoginPage.jsx @@ -86,12 +86,12 @@ const LoginPage = () => { } }, [IsLoginWithOTP]); - useEffect(() => { - const token = localStorage.getItem("jwtToken"); - if (token) { - navigate("/dashboard"); - } -}, [navigate]); +// useEffect(() => { +// const token = localStorage.getItem("jwtToken"); +// if (token) { +// navigate("/dashboard"); +// } +// }, [navigate]); return (