import React, { useState, useEffect } from
'react'
;
import axios from
'axios'
;
function
DocumentList() {
const [documents, setDocuments] = useState([]);
const [selectedDocument, setSelectedDocument] = useState(
null
);
const [newDocument, setNewDocument] = useState({
name:
''
,
createdDate:
new
Date().toLocaleDateString(),
createdBy:
'Admin'
,
file:
null
,
});
const [filterByUser, setFilterByUser] = useState(
''
);
useEffect(() => {
.then(response => setDocuments(response.data))
.
catch
(error =>
console.error(
'Error fetching documents:'
, error));
}, []);
const handleViewDocuments = () => {
setSelectedDocument(
null
);
};
const handleAddDocument = () => {
setSelectedDocument({ isForm:
true
});
};
const handleDeleteDocument = (id) => {
const updatedDocuments = documents.filter(
doc => doc.id !== id);
setDocuments(updatedDocuments);
};
const handleFileChange = (event) => {
const file = event.target.files[0];
setNewDocument({
...newDocument,
file,
name: file ? file.name.replace(/\.[^/.]+$/,
''
) :
''
,
});
};
const handleSubmitForm = (event) => {
event.preventDefault();
setDocuments([...documents, newDocument]);
setNewDocument({
name:
''
,
createdDate:
new
Date().toLocaleDateString(),
createdBy:
'Default User'
,
file:
null
,
});
setSelectedDocument(
null
);
};
const handleFilterByUser = () => {
const filteredDocuments = documents.filter(
doc => doc.createdBy === filterByUser);
setDocuments(filteredDocuments);
};
return
(
<div>
<nav>
<div className=
"navbar"
>
<h1>Document Management System</h1>
</div>
</nav>
<div className=
"hero-section"
>
<div className=
"hero-left"
>
<button onClick={handleAddDocument}>
Add a Document
</button>
<button onClick={handleViewDocuments}>
View Documents
</button>
<input
type=
"text"
placeholder=
"Filter by User"
value={filterByUser}
onChange={(e) => setFilterByUser(e.target.value)}
/>
<button onClick={handleFilterByUser}>Filter</button>
</div>
<div className=
"hero-right"
>
{selectedDocument ===
null
? (
<p></p>
) : selectedDocument.isForm ? (
<form onSubmit={handleSubmitForm}>
<h2>Add a Document</h2>
<label>Name:</label>
<input
type=
"text"
value={newDocument.name}
onChange={(e) =>
setNewDocument({
...newDocument,
name: e.target.value
})}
required
/>
<label>Created Date:</label>
<input
type=
"text"
value={newDocument.createdDate}
disabled
/>
<label>Created By:</label>
<input
type=
"text"
value={newDocument.createdBy}
disabled
/>
<label>File:</label>
<input
type=
"file"
onChange={handleFileChange}
accept=
".pdf,.doc,.docx"
required
/>
<button type=
"submit"
>Submit</button>
</form>
) : (
<div>
<h2>Document Details</h2>
{documents.map(doc => (
<div key={doc.id} className=
"document-details"
>
<p>ID: {doc.id}</p>
<p>Name: {doc.name}</p>
<p>Created Date: {doc.createdDate}</p>
<p>Created By: {doc.createdBy}</p>
<button
onClick={() => handleDeleteDocument(doc.id)}>
Delete
</button>
</div>
))}
</div>
)}
</div>
</div>
<div className=
"content"
>
<h2>Document List</h2>
<table>
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Created Date</th>
<th>Created By</th>
<th>Action</th>
</tr>
</thead>
<tbody>
{documents.map(doc => (
<tr key={doc.id}>
<td>{doc.id}</td>
<td>{doc.name}</td>
<td>{doc.createdDate}</td>
<td>{doc.createdBy}</td>
<td>
<button
onClick={() => handleDeleteDocument(doc.id)}>
Delete
</button>
</td>
</tr>
))}
</tbody>
</table>
</div>
</div>
);
}
export
default
DocumentList;