import React, { useState, useEffect, useRef } from "react"; import "../../styles/opensigndrive.css"; import axios from "axios"; import * as ContextMenu from "@radix-ui/react-context-menu"; import { useNavigate } from "react-router"; import Table from "react-bootstrap/Table"; import * as HoverCard from "@radix-ui/react-hover-card"; import ModalUi from "../../primitives/ModalUi"; import FolderModal from "../shared/fields/FolderModal"; import { useTranslation } from "react-i18next"; import { handleDownloadPdf, isMobile } from "../../constant/Utils"; import Parse from "parse"; function DriveBody(props) { const { t } = useTranslation(); const [rename, setRename] = useState(""); const [renameValue, setRenameValue] = useState(""); const inputRef = useRef(null); const [isOpenMoveModal, setIsOpenMoveModal] = useState(false); const [selectDoc, setSelectDoc] = useState(); const [isDeleteDoc, setIsDeleteDoc] = useState({}); const contextMenu = [ { type: "Download", icon: "fa-light fa-arrow-down" }, { type: "Rename", icon: "fa-light fa-font" }, { type: "Move", icon: "fa-light fa-file-export" }, { type: "Delete", icon: "fa-light fa-trash" } ]; const navigate = useNavigate(); //to focus input box on press rename to change doc name useEffect(() => { if (rename && inputRef.current) { setTimeout(() => { inputRef.current.focus(); }, 10); } }, [rename]); //function to handle folder component const handleOnclikFolder = (data) => { const folderData = { name: data.Name, objectId: data.objectId }; props.setFolderName((prev) => [...prev, folderData]); props.setIsLoading({ isLoad: true, message: t("loading-mssg") }); props.setDocId(data.objectId); props.setPdfData([]); props.setSkip(0); }; //function for change doc name and update doc name in _document class const handledRenameDoc = async (data) => { setRename(""); const trimmedValue = renameValue.trim(); if (trimmedValue.length > 0) { const updateName = { Name: renameValue }; const docId = data.objectId; const docData = props.pdfData; const updatedData = docData.map((item) => { if (item.objectId === docId) { // If the item's ID matches the target ID, update the name return { ...item, Name: renameValue }; } // If the item's ID doesn't match, keep it unchanged return item; }); props.setPdfData(updatedData); props.sortingData(null, null, updatedData); await axios .put( `${localStorage.getItem( "baseUrl" )}classes/contracts_Document/${docId}`, updateName, { headers: { "Content-Type": "application/json", "X-Parse-Application-Id": localStorage.getItem("parseAppId"), "X-Parse-Session-Token": localStorage.getItem("accesstoken") } } ) .then(() => { // const res = result.data; // console.log("res", res); }) .catch((err) => { console.log("Err ", err); props.setIsAlert({ isShow: true, alertMessage: t("something-went-wrong-mssg") }); }); } }; //function for navigate user to microapp-signature component const checkPdfStatus = async (data) => { const signerExist = data?.Signers; const isDecline = data?.IsDeclined; const isPlaceholder = data?.Placeholders; const signedUrl = data?.SignedUrl; const isSignYourself = data?.IsSignyourself; //checking if document has completed and request signature flow if (data?.IsCompleted && signerExist?.length > 0) { navigate(`/recipientSignPdf/${data.objectId}`); } //checking if document has completed and signyour-self flow else if ((!signerExist && !isPlaceholder) || isSignYourself) { navigate(`/signaturePdf/${data.objectId}`); } //checking if document has declined by someone else if (isDecline) { navigate(`/recipientSignPdf/${data.objectId}`); //checking draft type document } else if ( signerExist?.length > 0 && isPlaceholder?.length > 0 && !signedUrl ) { navigate(`/placeHolderSign/${data.objectId}`); } //Inprogress document else if (isPlaceholder?.length > 0 && signedUrl) { navigate(`/recipientSignPdf/${data.objectId}`); } //placeholder draft document else if ( (signerExist?.length > 0 && (!isPlaceholder || isPlaceholder?.length === 0)) || ((!signerExist || signerExist?.length === 0) && isPlaceholder?.length > 0) ) { navigate(`/placeHolderSign/${data.objectId}`); } }; const handleMenuItemClick = async (selectType, data, deleteType) => { switch (selectType) { case "Download": { await handleDownloadPdf([data]); break; } case "Rename": { setRenameValue(data.Name); setRename(data.objectId); break; } case "Delete": { setIsDeleteDoc({ status: true, deleteType }); setSelectDoc(data); break; } case "Move": { handleMoveDocument(data); break; } default: null; } }; //function for delete document const handleDeleteDocument = async (docData) => { setIsDeleteDoc({}); const docId = docData.objectId; const data = { IsArchive: true }; await axios .put( `${localStorage.getItem("baseUrl")}classes/contracts_Document/${docId}`, data, { headers: { "Content-Type": "application/json", "X-Parse-Application-Id": localStorage.getItem("parseAppId"), "X-Parse-Session-Token": localStorage.getItem("accesstoken") } } ) .then((result) => { const res = result.data; if (res) { const updatedData = props.pdfData.filter((x) => x.objectId !== docId); props.setPdfData(updatedData); } }) .catch((err) => { console.log("Err ", err); props.setIsAlert({ isShow: true, alertMessage: t("something-went-wrong-mssg") }); }); }; const handleMoveDocument = async (docData) => { setIsOpenMoveModal(true); setSelectDoc(docData); }; //function for move document from one folder to another folder const handleMoveFolder = async (selectFolderData) => { const selecFolderId = selectDoc?.Folder?.objectId; const moveFolderId = selectFolderData?.ObjectId; let updateDocId = selectDoc?.objectId; let updateData; const checkExist = moveFolderId ? selecFolderId === moveFolderId ? true : false : selecFolderId ? false : true; if (!checkExist) { if (moveFolderId) { updateData = { Folder: { __type: "Pointer", className: "contracts_Document", objectId: moveFolderId } }; } else { updateData = { Folder: { __op: "Delete" } }; } await axios .put( `${localStorage.getItem( "baseUrl" )}classes/contracts_Document/${updateDocId}`, updateData, { headers: { "Content-Type": "application/json", "X-Parse-Application-Id": localStorage.getItem("parseAppId"), "X-Parse-Session-Token": localStorage.getItem("accesstoken") } } ) .then((Listdata) => { // console.log("Listdata ", Listdata); const res = Listdata.data; if (res) { const updatedData = props.pdfData.filter( (x) => x.objectId !== updateDocId ); props.setPdfData(updatedData); } }) .catch((err) => { console.log("err", err); }); setIsOpenMoveModal(false); } else { alert(t("folder-already-exist!")); setIsOpenMoveModal(false); } }; const handleEnterPress = (e, data) => { if (e.key === "Enter") { handledRenameDoc(data); } }; const checkFolderEmpty = async (docData) => { let isEmptyFolder = true; const query = new Parse.Query("contracts_Document"); query.equalTo("Folder", { __type: "Pointer", className: "contracts_Document", objectId: docData.objectId }); query.notEqualTo("IsArchive", true); const res = await query.find(); const jsonRes = JSON.parse(JSON.stringify(res)); if (jsonRes && jsonRes.length > 0) { isEmptyFolder = false; return isEmptyFolder; } else { return isEmptyFolder; } }; const handleDeleteFolder = async (docData) => { setIsDeleteDoc({}); const isEmptyFolder = await checkFolderEmpty(docData); if (isEmptyFolder) { const docId = docData?.objectId; try { const updateQuery = new Parse.Query("contracts_Document"); const updateObj = await updateQuery.get(docId); updateObj.set("IsArchive", true); const res = await updateObj.save(); if (res) { const updatedData = props.pdfData.filter((x) => x.objectId !== docId); props.setPdfData(updatedData); } } catch (err) { console.log("Err ", err); props.setIsAlert({ isShow: true, alertMessage: t("something-went-wrong-mssg") }); } } else { alert(t("delete-folder-alert-1")); } }; //component to handle type of document and render according to type const handleFolderData = (data, ind, listType) => { let createddate, status, isDecline, signerExist, isComplete; if (data.Type !== "Folder") { const expireDate = data.ExpiryDate && data.ExpiryDate.iso; const createdDate = data.createdAt && data.createdAt; createddate = new Date(createdDate).toLocaleDateString(); isComplete = data.IsCompleted && data.IsCompleted ? true : false; isDecline = data.IsDeclined && data.IsDeclined; signerExist = data.Signers && data.Signers; const signedUrl = data.SignedUrl; const expireUpdateDate = new Date(expireDate).getTime(); const currDate = new Date().getTime(); let isExpire = false; if (currDate > expireUpdateDate) { isExpire = true; } if (isComplete) { status = "Completed"; } else if (isDecline) { status = "Declined"; } else if (!signedUrl) { status = "Draft"; } else if (isExpire) { status = "Expired"; } else { status = "In Progress"; } } const signersName = () => { const getSignersName = signerExist.map((data) => data.Name); const signerName = getSignersName.join(", "); return ( {signerName} ); }; return listType === "table" ? ( data.Type === "Folder" ? (
| {t("report-heading.Name")} | {t("report-heading.created-date")} | {t("report-heading.Type")} | {t("report-heading.Status")} | {t("action")} |
|---|
{t("delete-folder-alert")}
) : ({t("delete-document-alert")}
)}