import React, { useEffect, useState } from 'react' import { FaFileAlt, FaCheckCircle, FaUpload } from 'react-icons/fa' import { MdFileUpload } from 'react-icons/md' import { RiDraggable } from 'react-icons/ri' import { deleteDocument, setDocProgComplete } from '../../../store/slices/documentSlice' import { useDispatch } from 'react-redux' import { AppDispatch } from '../../../store/store' import { IoMdClose } from 'react-icons/io' import api from '../../../config/api' import { useParams } from 'react-router-dom' import axios from 'axios' interface DocumentCardProps { id: string; name: string; isCompleted: boolean; transactionTemplateToggle:boolean; } const DocumentCard: React.FC = ({ id, name, isCompleted , transactionTemplateToggle }) => { const params = useParams<{ accountId?: string; transactionId?: string; templateId?: string }>(); const accountId = params.accountId; const transactionId = params.transactionId || params.templateId; // if (!accountId || !transactionId) { // window.location.href = "/"; // return null; // } const [progress, setProgress] = useState(0) const [message, setMessage] = useState('') const [documentDel, setDocumentDel] = useState<{ docId: string | null, isDel: boolean }>({ docId: null, isDel: false }) const dispatch = useDispatch() useEffect(() => { let isCompleted = false; let updateTimeout: ReturnType | null = null; let lastUpdate = 0; const delay = 1000; const docProgSSE = new EventSource(`http://192.168.2.112:8083/api/progress/${id}`); docProgSSE.addEventListener('progress', (event) => { const jsonData = JSON.parse(event.data); console.log(jsonData, "Kaboom"); if (jsonData.isComplete) { isCompleted = true; if (updateTimeout) clearTimeout(updateTimeout); dispatch(setDocProgComplete(id)); setProgress(jsonData.progress); setMessage(jsonData.message); docProgSSE.close(); // Close connection ourselves return; } const now = Date.now(); const sinceLast = now - lastUpdate; if (sinceLast >= delay) { setProgress(jsonData.progress); setMessage(jsonData.message); lastUpdate = now; } else { if (updateTimeout) clearTimeout(updateTimeout); updateTimeout = setTimeout(() => { setProgress(jsonData.progress); setMessage(jsonData.message); lastUpdate = Date.now(); }, delay - sinceLast); } }); docProgSSE.onerror = (error) => { if (!isCompleted) { console.error("SSE Error", error); } docProgSSE.close(); }; return () => { docProgSSE.close(); if (updateTimeout) clearTimeout(updateTimeout); }; }, [id]); console.log(isCompleted, "line 118") const radius = 28 const circumference = 2 * Math.PI * radius const offset = circumference - (progress / 100) * circumference const handleDeleteDocument = async () => { const docId = documentDel.docId; if (!docId || !accountId || !transactionId) { console.error("Missing document ID, account ID, or transaction ID"); return; } const res = await api.delete(`/api/accounts/${accountId}/${transactionTemplateToggle}/${transactionId}/documents/${docId}`) if (res.status === 202) { dispatch(deleteDocument(docId)); setDocumentDel({ docId: null, isDel: false }); console.log("Document deleted successfully"); } } return ( <>
setDocumentDel({ docId: id, isDel: false })} className='absolute right-2.5 top-2.5 text-slate-400 text-xl hover:text-red-500 cursor-pointer transition-all' /> {/* Draggable handle */} e.dataTransfer.setData('text/plain', id)} className="absolute top-2 left-2 text-gray-400 text-lg cursor-grab drag-handle" /> {/* Main icon or circular loader */}
{!isCompleted ? (
{progress}%
) : ( )}
{/* Document name */} {name} {/* Status message */} {message}
{ documentDel.docId !== null &&

Confirm Delete

Are you sure you want to delete?

} ) } export default DocumentCard