import React, { useEffect, useState } from 'react' import { PiDotsThreeOutlineVerticalFill } from 'react-icons/pi'; import api from '../../config/api'; import { Transaction } from '../transactions/Transactions'; import { useLocation, useNavigate } from 'react-router-dom'; import { FaCheck } from 'react-icons/fa'; import LoaderUi from '../../helper/LoaderUi'; import logoRecord from '../../assets/record.svg'; const formatDate = (timestamp: number) => { return new Date(timestamp * 1000).toLocaleString(); }; const statusColorMap = { CREATED: "bg-blue-100 text-blue-600", SENT: "bg-green-100 text-green-600", COMPLETED: "bg-purple-100 text-purple-600", EXPIRED: "bg-red-100 text-red-600", }; const TransactionDataTable = ({activeAccountId}) => { const navigate = useNavigate() const loaction = useLocation() console.log("loaction", loaction.pathname); const [currentEmailId, setCurrentEmailId] = useState('null'); const [selectedTransactions, setSelectedTransactions] = useState([]); const [loading, setLoading] = useState(false) const fetchTransactions = async () => { console.log("fetchTransactions") setLoading(true) try { const response = await api.get(`/api/accounts/${activeAccountId}/transactions?sortBy=lastModifiedAt desc`); setTransactions(response.data || []); } catch (error) { console.error("Error fetching transactions:", error); } finally { setLoading(false) } }; const [transactions, setTransactions] = useState([]); const handleTransactionClick = (id: number) => { navigate(`/accounts/${activeAccountId}/transactions/${id}`); }; useEffect(() => { if (activeAccountId) { fetchTransactions(); } }, [activeAccountId]); useEffect(() => { const userDetails = JSON.parse(sessionStorage.getItem('userDetails')); setCurrentEmailId(userDetails?.email) }, []); function formatTimestamp(isoString, options = { timeZone: 'local' }) { // Parse the ISO string to a Date object const date = new Date(isoString); if (isNaN(date)) { return 'Invalid date'; } // Return formatted date string if (options.timeZone === 'UTC') { return date.toUTCString(); // e.g. "Mon, 04 Aug 2025 13:46:46 GMT" } else { return date.toLocaleString(); // e.g. "8/4/2025, 9:46:46 AM" (based on local time zone) } } function getStatusColorClass(status) { return statusColorMap[status] || "bg-gray-100 text-gray-600"; } return ( <>
{/* Header */} {location.pathname !== '/transactions' &&

Recent Transactions

View all
} {/* Scrollable Table Container */}
{/* Sticky Header */} {location.pathname === '/transactions' && ( <> )} {loading ? ( ) : transactions.length > 0 ? ( <> {/* Scrollable Body */} {transactions.map((tx) => ( handleTransactionClick(tx.id)} className="hover:bg-gray-50 transition-colors duration-150 cursor-pointer" > {location.pathname === '/transactions' && ( <> )} ))} ) : ( )}
Document StatusSigned By Last Change Expire After (Days) Actions
{tx?.subject || "Untitled"}
{tx.status}
{tx.signedBy ? (
{tx.signedByInitials}
{tx.signedBy}
) : ( - )}
{formatTimestamp(tx.lastModifiedAt)} {tx.expireAfter ?? "-"}
Record Not Found
) } export default TransactionDataTable