Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions techforgood/build/asset-manifest.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
{
"files": {
"main.css": "/static/css/main.94d3a9b7.css",
"main.js": "/static/js/main.8d564318.js",
"main.js": "/static/js/main.c4fc4305.js",
"index.html": "/index.html",
"main.94d3a9b7.css.map": "/static/css/main.94d3a9b7.css.map",
"main.8d564318.js.map": "/static/js/main.8d564318.js.map"
"main.c4fc4305.js.map": "/static/js/main.c4fc4305.js.map"
},
"entrypoints": [
"static/css/main.94d3a9b7.css",
"static/js/main.8d564318.js"
"static/js/main.c4fc4305.js"
]
}
2 changes: 1 addition & 1 deletion techforgood/build/index.html
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>React App</title><script defer="defer" src="/static/js/main.8d564318.js"></script><link href="/static/css/main.94d3a9b7.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>React App</title><script defer="defer" src="/static/js/main.c4fc4305.js"></script><link href="/static/css/main.94d3a9b7.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
2 changes: 1 addition & 1 deletion techforgood/build/static/css/main.94d3a9b7.css.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

34 changes: 34 additions & 0 deletions techforgood/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions techforgood/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"react": "^19.0.0",
"react-dom": "^19.0.0",
"react-hook-form": "^7.54.2",
"react-modal": "^3.16.3",
"react-router-dom": "^7.1.5",
"react-scripts": "5.0.1"
},
Expand Down
88 changes: 72 additions & 16 deletions techforgood/src/pages/request/Requests.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { useEffect, useState } from 'react';
import getRequests from '../../features/firebase/auth/getRequests';
import deleteRequest from '../../features/firebase/auth/deleteRequest';
import { useAuth } from '../../features/firebase/AuthProvider';
import UpdateRequestModal from './UpdateRequestModal'; // Import the modal component

const UserRequests = () => {
const { user, loading: authLoading } = useAuth();
Expand All @@ -10,6 +11,10 @@ const UserRequests = () => {
const [error, setError] = useState(null);
const [currentPage, setCurrentPage] = useState(1);
const resultsPerPage = 5;
const [isModalOpen, setIsModalOpen] = useState(false);
const [selectedRequest, setSelectedRequest] = useState(null);
const [successMessage, setSuccessMessage] = useState(''); // State for success message
const [fadeOut, setFadeOut] = useState(false); // State for fade-out effect

useEffect(() => {
const fetchRequests = async () => {
Expand Down Expand Up @@ -45,6 +50,16 @@ const UserRequests = () => {
}
};

const handleEdit = (request) => {
setSelectedRequest(request);
setIsModalOpen(true);
};

const closeModal = () => {
setIsModalOpen(false);
setSelectedRequest(null);
};

const handleNextPage = () => {
setCurrentPage(prevPage => prevPage + 1);
};
Expand All @@ -64,37 +79,79 @@ const UserRequests = () => {
return (
<div>
<h1>Requests your or your org have made</h1>
{successMessage && (
<p
style={{
color: 'green',
marginBottom: '10px',
opacity: fadeOut ? 0 : 1, // Apply fade-out effect
transition: 'opacity 1s ease-in-out', // Smooth transition
}}
>
{successMessage}
</p>
)}
<table className="request-table" style={styles.requestTable}>
<thead>
<tr className="table-header-row" style={styles.tableHeaderRow}>
<th className="request-table-header" style={styles.requestTableHeader} scope='col'>Title</th>
<th className="request-table-header" style={styles.requestTableHeader} scope='col'>Description</th>
<th className="request-table-header" style={styles.requestTableHeader} scope='col'>Keywords</th>
<th className="request-table-header" style={styles.requestTableHeader} scope='col'>Date Created</th>
<th className="request-table-header" style={styles.requestTableHeader} scope='col'>Actions</th>
</tr>
</thead>
<tbody>
{/* looking in to createPortal. Without using react strap, we can create a modal to open to
might be better to display lengthy information like request descrition this way */}
{currentResults.map((request) => (
<tr key={request.id}>
<th scope='row' className='requestTitleHeader' style={styles.requestTitleHeader}>{request.title}</th>
<td>{request.description}</td>
<td>{new Date(request.created).toLocaleDateString()}</td>
<td className='actionsStyling' style={styles.actionsStyling}>
<button >Edit</button>
{/* onClick={() => handleEdit(request.id)} */}
<button onClick={() => handleDelete(request.id)}>Delete</button>
</td>
</tr>
))}
{currentResults.map((request) => (
<tr key={request.id}>
<th scope='row' className='requestTitleHeader' style={styles.requestTitleHeader}>{request.title}</th>
<td>
{request.description.length > 100 ? (
<span
style={{ cursor: 'pointer', color: 'blue', textDecoration: 'underline' }}
onClick={() => handleEdit(request)}
>
{request.description.substring(0, 100)}...
</span>
) : (
request.description
)}
</td>
<td>{request.keywords ? request.keywords.join(', ') : 'N/A'}</td>
<td>{new Date(request.created).toLocaleDateString()}</td>
<td className='actionsStyling' style={styles.actionsStyling}>
<button onClick={() => handleEdit(request)}>Edit</button>
<button onClick={() => handleDelete(request.id)}>Delete</button>
</td>
</tr>
))}
</tbody>
</table>
<div>
<p>Page {currentPage}</p>
{currentPage > 1 && <button onClick={handlePreviousPage}>Previous</button>}
{indexOfLastResult < requests.length && <button onClick={handleNextPage}>Next</button>}
</div>
{isModalOpen && (
<UpdateRequestModal
isOpen={isModalOpen}
onRequestClose={closeModal}
modalContent={selectedRequest} // Ensure selectedRequest is passed here
onSubmit={(updatedRequest) => {
setRequests((prevRequests) =>
prevRequests.map((request) =>
request.id === updatedRequest.id ? updatedRequest : request
)
);
setSuccessMessage('Your request has been updated'); // Set success message
console.log('Request updated successfully'); // Log message to console
setFadeOut(false); // Reset fade-out state
setTimeout(() => setFadeOut(true), 9000); // Start fade-out after 9 seconds
setTimeout(() => setSuccessMessage(''), 10000); // Clear the message after 10 seconds
closeModal();
}}
/>
)}
</div>
);
};
Expand Down Expand Up @@ -122,8 +179,7 @@ const styles = {
fontWeight: 'bold',
},
actionsStyling: {
display: 'flex',
justifyContent: 'center',

gap: '5px',
padding: '5px',
},
Expand Down
Loading