/** @jsx React.createElement */ /** @jsxFrag React.Fragment */ const { useState, useEffect } = React; // Mock data const mockDocuments = [ { id: '1', name: 'Contract Agreement.pdf', type: 'pdf', size: '2.4 MB', lastModified: '2 hours ago', status: 'pending', sharedWith: ['john@example.com', 'jane@example.com'], thumbnail: 'http://static.photos/document/320x240/1' }, { id: '2', name: 'Project Proposal.docx', type: 'doc', size: '1.2 MB', lastModified: '1 day ago', status: 'draft', sharedWith: [], thumbnail: 'http://static.photos/document/320x240/2' }, { id: '3', name: 'NDA Agreement.pdf', type: 'pdf', size: '3.1 MB', lastModified: '1 week ago', status: 'signed', sharedWith: ['legal@example.com'], thumbnail: 'http://static.photos/document/320x240/3' }, { id: '4', name: 'Invoice March 2023.pdf', type: 'pdf', size: '1.8 MB', lastModified: '3 days ago', status: 'completed', sharedWith: ['accounting@example.com'], thumbnail: 'http://static.photos/document/320x240/4' } ]; const App = () => { const [documents, setDocuments] = useState(mockDocuments); const [activeView, setActiveView] = useState('grid'); const [currentFolder, setCurrentFolder] = useState('my-documents'); const [showUploadModal, setShowUploadModal] = useState(false); const [showSignatureModal, setShowSignatureModal] = useState(false); const [selectedDocument, setSelectedDocument] = useState(null); const [searchQuery, setSearchQuery] = useState(''); const filteredDocuments = documents.filter(doc => doc.name.toLowerCase().includes(searchQuery.toLowerCase()) ); const handleDocumentClick = (doc) => { setSelectedDocument(doc); }; const handleSignDocument = (doc) => { setSelectedDocument(doc); setShowSignatureModal(true); }; const handleDeleteDocument = (id) => { setDocuments(documents.filter(doc => doc.id !== id)); }; const handleShareDocument = (id) => { // In a real app, this would open a share dialog alert(`Sharing document ${id}`); }; return (
setShowUploadModal(true)} />

{currentFolder === 'my-documents' ? 'My Documents' : currentFolder === 'shared' ? 'Shared with Me' : currentFolder === 'pending' ? 'Pending Signatures' : currentFolder === 'completed' ? 'Completed' : 'Trash'}

{activeView === 'grid' ? (
{filteredDocuments.map(doc => ( handleDocumentClick(doc)} onSign={() => handleSignDocument(doc)} onDelete={() => handleDeleteDocument(doc.id)} onShare={() => handleShareDocument(doc.id)} /> ))}
) : (
{filteredDocuments.map(doc => ( handleDocumentClick(doc)}> ))}
Name Modified Size Status Actions
{doc.type === 'pdf' ? ( ) : ( )}
{doc.name}
{doc.lastModified} {doc.size} {doc.status}
)}
{showUploadModal && ( setShowUploadModal(false)} onUploadComplete={(newDoc) => { setDocuments([newDoc, ...documents]); setShowUploadModal(false); }} /> )} {showSignatureModal && selectedDocument && ( setShowSignatureModal(false)} onSignComplete={() => { setDocuments(documents.map(doc => doc.id === selectedDocument.id ? {...doc, status: 'signed'} : doc )); setShowSignatureModal(false); }} /> )}
); }; ReactDOM.render(, document.getElementById('root'));