import { AiFillSignature } from 'react-icons/ai'; import { Link, useLocation, useNavigate, useParams, useSearchParams } from 'react-router-dom'; import { LuGitGraph } from 'react-icons/lu'; import AccountNav from '../accounts/AccountNav'; import { useEffect, useState } from 'react'; import api from '../../config/api'; import SigningOrderDiagram from '../../SigningOrderDiagram '; import { IoCloseOutline } from 'react-icons/io5'; import { MdEditDocument } from "react-icons/md"; import { useSelector } from 'react-redux'; import { RootState } from '../../store/store'; import { SignTypeEnum } from '../../utlity/types'; import AuditModal from './AuditModal'; import { FaFile } from 'react-icons/fa6'; // Sample recipient data — you can replace this with actual API data later const recipients = [ { id: 1, name: "Shanu.R", email: "shanu.r@example.com", signedAt: "5/1/2025 | 04:24:35 pm", status: "Signed", viewLink: "#" }, { id: 2, name: "Amit B", email: "amit.b@example.com", signedAt: "5/1/2025 | 04:24:35 pm", status: "Signed", viewLink: "#" } ]; const TransactionView = () => { const { accountId, transactionId } = useParams<{ accountId: string, transactionId: string }>(); const navigate = useNavigate(); if (!accountId || !transactionId) { window.location.href = "/"; return null; } const [transactionDetails, setTransactionDetails] = useState(null); const [signingOrderModal, setSigningOrderModal] = useState({ open: false }); const user = useSelector((state: RootState) => state.user) const location = useLocation(); const [isModalOpen, setIsModalOpen] = useState(false); const [documentsData, setDocumentsData] = useState([]) useEffect(() => { // update whenever location changes setIsModalOpen(location.search.includes("auditStatus")); }, [location]); const handleOpenAuditModal = () => { const { pathname, search } = location; let newSearch = search ? search.includes("auditStatus") ? search : `${search}&auditStatus` : "?auditStatus"; window.history.pushState({}, "", pathname + newSearch); setIsModalOpen(true); // update state immediately }; const closeModal = () => { let search = location.search .replace(/[?&]auditStatus\b/, "") .replace(/^&/, "?") .replace(/\?$/, ""); window.history.pushState({}, "", location.pathname + search); setIsModalOpen(false); // update state immediately }; console.log(transactionDetails, "line 37"); const fetchData = async () => { try { const [res1, res2] = await Promise.all([api.get(`/api/accounts/${accountId}/transactions/${transactionId}`), api.get(`/api/accounts/${accountId}/transactions/${transactionId}/recipients`)]) setTransactionDetails({ transaction: res1.data, recipients: res2.data }); } catch (error) { console.error("Error Gettign Transaction and its Recipient: ", error.message) } } const fetchDocuments = async () => { try { const res = await api.get(`https://concrete-gladly-mullet.ngrok-free.app/api/accounts/${accountId}/transactions/${transactionId}/documents?include_images=true`) if (res?.status === 200) { let resDoc = res?.data setDocumentsData(resDoc) } } catch (error) { console.log(error) } } useEffect(() => { fetchData() fetchDocuments() }, [accountId, transactionId]) const handleNavigateToSign = (id: number) => { window.open(`./../../../../sign/${id}/${SignTypeEnum.selfSign}`) } return ( <> {transactionDetails && <>
{/* Header */}

Complete with Forms Made Easy: {transactionDetails?.transaction?.subject ?? "Untitled"}

{/* new Date(transactionDetails?.transaction?.lastModifiedAt * 1000) */}

From {transactionDetails?.transaction.createdBy.firstName + " " + transactionDetails?.transaction.createdBy.lastName}

Last Change on {(transactionDetails?.transaction?.lastModifiedAt)}

Created at {(transactionDetails?.transaction?.createdAt)}

{transactionDetails?.transaction.status}

{/* Buttons */}
{/* */} {/* Edit */}

{/* Recipients Section */} {transactionDetails.recipients.length > 0 &&

Signers

setSigningOrderModal({ ...signingOrderModal, open: true })}> Signing Graph

{/* Recipients List */} {transactionDetails.recipients.map((recipient, index) => (
{/*

{index+1}

*/}

{recipient.name}

{recipient.email}

{recipient.hostEmail !== null && recipient.hostEmail !== "" &&

Host: {recipient.hostEmail}

}

{recipient.status}

{recipient.email === user.email && recipient.status !== "COMPLETED" &&

handleNavigateToSign(recipient.id)} className='text-white rounded-sm bg-[var(--primary)] px-3 py-1 font-semibold cursor-pointer'> Sign

}
{recipient.status !== "PENDING" &&

on {recipient.completedAt}

} {/* View signed location */}

))}
} {transactionDetails?.transaction?.subject !== "" &&

Subject

{`${transactionDetails?.transaction?.subject ? transactionDetails?.transaction?.subject : "Not Found"} `}

} {transactionDetails?.transaction?.message !== "" &&

Message

{`${transactionDetails?.transaction?.message ? transactionDetails?.transaction?.message : "Not Found"} `}

}
{documentsData.map((docsD, index) => (

{docsD.name}

{docsD?.pages[0]?.src ? : }

1 of {docsD?.pages?.length}

))}
{signingOrderModal.open &&

Signing Order

setSigningOrderModal({ ...signingOrderModal, open: false })} className="text-xl cursor-pointer hover:text-gray-200 transition-all">
} {isModalOpen && } } ); }; export default TransactionView;