/** @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)}
/>
))}
) : (
| Name |
Modified |
Size |
Status |
Actions |
{filteredDocuments.map(doc => (
handleDocumentClick(doc)}>
{doc.type === 'pdf' ? (
) : (
)}
|
{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'));