import { useState, useRef, useEffect } from 'react'; import { ReactSortable } from 'react-sortablejs'; import { RiDraggable } from "react-icons/ri"; import { FaFileAlt, FaPlus, FaGoogleDrive, FaDropbox, FaMicrosoft, FaCloudUploadAlt } from "react-icons/fa"; import { useDispatch, useSelector } from 'react-redux'; // import { setSelectedDocuments } from '../../../store/slices/selectedDocsSlice'; import { setDocuments, uploadDocuments } from '../../../store/slices/documentSlice'; import { RootState, AppDispatch } from '../../../store/store'; import { IoMdClose } from 'react-icons/io'; import { Bounce, toast } from "react-toastify"; import api from '../../../config/api'; import DocumentCard from './DocumentCard'; import { useParams } from 'react-router-dom'; import { toggleToTemplates, TRANSACTION_TEMPLATE_TOGGLE } from '../../../store/slices/selectedRecipientsSlice'; const SelectedDocuments = ({transactionTemplateToggle}) => { // let transactionTemplateToggle = TRANSACTION_TEMPLATE_TOGGLE.TRANSACTIONS; // const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); // await sleep(5000); const documents = useSelector((state: RootState) => state.documents.documents); useEffect(() => { console.log("Documents updated:", documents); }, [documents]); const templateId = useParams<{ templateId: string }>().templateId; let { accountId, transactionId } = useParams<{ accountId: string, transactionId: string }>(); const dispatch = useDispatch(); if (!transactionId) { transactionId = templateId; } const [isModalOpen, setModalOpen] = useState(false); const [activeTab, setActiveTab] = useState('Upload'); const [files, setFiles] = useState([]); const fileInputRef = useRef(null); const tabs = [ { name: 'Upload', icon: }, { name: 'Google Drive', icon: }, { name: 'OneDrive', icon: }, { name: 'Dropbox', icon: }, ]; const handleFileChange = (e: React.ChangeEvent) => { const selectedFiles = e.target.files ? Array.from(e.target.files) : []; if (selectedFiles.length > 0) { setFiles((prev) => [...prev, ...selectedFiles]); handleUpload(selectedFiles); } }; const handleDrop = (e: React.DragEvent) => { e.preventDefault(); const droppedFiles = Array.from(e.dataTransfer.files); if (droppedFiles.length > 0) { setFiles((prev) => [...prev, ...droppedFiles]); handleUpload(droppedFiles); } }; const handleUpload = (filesToUpload: File[]) => { const formData = new FormData(); formData.append("file", filesToUpload[0]) console.log(formData, "Line 59") // filesToUpload.forEach((file) => formData.append("document", file)); dispatch(uploadDocuments({ formData, accountId, transactionId })) .unwrap() .then((res) => { toast.dismiss(); // toast.info("📄 Documents uploaded!", { // position: "bottom-right", // autoClose: 5000, // hideProgressBar: false, // closeOnClick: false, // pauseOnHover: true, // draggable: true, // progress: undefined, // theme: "light", // transition: Bounce, // }); // Update selected documents after upload // dispatch(setSelectedDocuments([...documents, ...res])); // debugger; setFiles([]); setModalOpen(false); }) .catch((err) => { console.error("Upload failed", err); }); }; return ( <> {/* Upload Card First */}
{/* Uploaded documents */} ({ ...doc }))} setList={(newState) => dispatch(setDocuments(newState))} handle=".drag-handle" animation={200} ghostClass="sortable-ghost" disabled={false} > {documents.map((doc) => ( ))}
setModalOpen(true)} className="cursor-pointer w-[160px] h-[170px] flex flex-col items-center justify-center border-2 border-dashed border-gray-300 rounded-xl bg-white hover:bg-gray-50 transition shadow-sm hover:shadow-md" >

Upload Document

{/* Modal */} {isModalOpen && (
{/* Close Button */} {/* Sidebar Tabs */}
{tabs.map(tab => ( ))}
{/* Modal Content */}
{activeTab === 'Upload' && (
fileInputRef.current?.click()} onDragOver={(e) => e.preventDefault()} onDrop={handleDrop} className="flex flex-col items-center justify-center h-full border-2 border-dashed border-gray-300 rounded-xl p-6 text-center cursor-pointer hover:bg-gray-50" >

Drag & drop files here or

)} {activeTab !== 'Upload' && (

{activeTab} integration coming soon...

)}
)} ); }; export default SelectedDocuments;