Skip to content
This repository was archived by the owner on Sep 8, 2025. It is now read-only.

Commit f3f83cc

Browse files
committed
att
1 parent 74b69c8 commit f3f83cc

21 files changed

Lines changed: 1294 additions & 240 deletions

client/src/App.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const Resetpass = React.lazy(() => import("./views/pages/profile/resetpass"));
1717
const OTP = React.lazy(()=> import ("./views/pages/profile/OTP"));
1818
const TermsAccept = React.lazy(()=> import('./views/pages/LegalPanel/agreement/termandaccept'));
1919
const ComplainsExternalEmployees = React.lazy(() => import('./views/pages/LegalPanel/complains/employeesexternalcomplain'));
20+
const UploadIR = React.lazy(()=> import ('./views/pages/LegalPanel/uploadIncident'))
2021
const AppContent = () => {
2122
const { isColorModeSet, setColorMode } = useColorModes("coreui-free-react-admin-template-theme");
2223
const storedTheme = useSelector((state) => state.changeState.theme);
@@ -60,6 +61,7 @@ const AppContent = () => {
6061
<Route path="/resetpass/:id/:token" element={<Resetpass />} />
6162
<Route path="/termsaccept/:id/:token" element={<TermsAccept />} />
6263
<Route path="/employeesExternalComplain/:id/:token" element={<ComplainsExternalEmployees/>} />
64+
<Route path='/uploadIncident/:id/:token'element={<UploadIR/>}/>
6365
<Route path="/register" element={<Register />} />
6466
<Route path="/404" element={<Page404 />} />
6567
<Route path="/500" element={<Page500 />} />

client/src/_nav.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ import {
2222
faTruckRampBox,
2323
faChartDiagram,
2424
faTv,
25-
faPlus
25+
faPlus,
26+
faNewspaper
2627
} from '@fortawesome/free-solid-svg-icons';
2728
import { FaWatchmanMonitoring } from 'react-icons/fa';
2829
import { icon } from 'leaflet';
@@ -490,6 +491,12 @@ const _nav = () => {
490491
icon: <FontAwesomeIcon icon={faBullhorn} style={{ marginRight: '8px' }} />,
491492
to:'/complains'
492493
},
494+
{
495+
component: CNavItem,
496+
name:"Incident Reports",
497+
icon:<FontAwesomeIcon icon ={faNewspaper} style={{marginRight:"8px"}}/>,
498+
to:'/incidentreport'
499+
}
493500

494501

495502

client/src/routes.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ const Agreementsuccess = React.lazy(() => import('./views/pages/LegalPanel/agree
7979

8080
const Complains = React.lazy(() => import('./views/pages/LegalPanel/complains'));
8181
const ComplainsEmployees = React.lazy(() => import('./views/pages/LegalPanel/complains/employeescomplains'));
82+
const IncidentReport = React.lazy(()=> import ("./views/pages/LegalPanel/incidentreport"))
8283
const HrComplains = React.lazy(() => import('./views/pages/LegalPanel/complains/hrComplains'));
8384

8485
const routes = [
@@ -162,6 +163,7 @@ const routes = [
162163
{ path: '/complains', name: 'Complains', element: <ProtectedRoute><Complains /></ProtectedRoute> },
163164
{ path: '/employeescomplains', name: 'Complains', element: <ProtectedRoute><ComplainsEmployees /></ProtectedRoute> },
164165
{ path: '/hrcomplains', name: 'Complains', element: <ProtectedRoute><HrComplains /></ProtectedRoute> },
166+
{ path: '/incidentreport', name:'IncidentReport', element: <ProtectedRoute><IncidentReport/></ProtectedRoute>}
165167
];
166168

167169
export default routes;
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import React, { useEffect, useState } from 'react';
2+
import axiosInstance from '../../../utils/axiosInstance';
3+
4+
export default function IncidentReportUpload() {
5+
const [incidentReports, setIncidentReports] = useState([]);
6+
const [loading, setLoading] = useState(true);
7+
const [error, setError] = useState(null);
8+
9+
useEffect(() => {
10+
const fetchIncidentReports = async () => {
11+
try {
12+
const response = await axiosInstance.get('/incidentreport/incidentall');
13+
console.log('API Response:', response.data);
14+
15+
const data = Array.isArray(response.data)
16+
? response.data
17+
: Array.isArray(response.data?.data)
18+
? response.data.data
19+
: [];
20+
21+
setIncidentReports(data);
22+
} catch (err) {
23+
setError('Failed to fetch incident reports');
24+
} finally {
25+
setLoading(false);
26+
}
27+
};
28+
29+
fetchIncidentReports();
30+
}, []);
31+
32+
return (
33+
<div className="min-h-screen flex flex-col items-center justify-center bg-gray-100 p-4">
34+
<div className="bg-white rounded-2xl shadow-md p-8 max-w-4xl w-full">
35+
<h1 className="text-2xl font-bold mb-4 text-center">All Incident Reports</h1>
36+
37+
{loading && <p className="text-center text-gray-500">Loading...</p>}
38+
{error && <p className="text-center text-red-500">{error}</p>}
39+
40+
{!loading && !error && Array.isArray(incidentReports) && incidentReports.length === 0 && (
41+
<p className="text-center text-gray-500">No incident reports found.</p>
42+
)}
43+
44+
{!loading && !error && Array.isArray(incidentReports) && incidentReports.length > 0 && (
45+
<ul className="divide-y divide-gray-200">
46+
{incidentReports.map((report, index) => (
47+
<li key={index} className="py-4">
48+
<div className="text-lg font-semibold text-gray-800">{report.title || 'Untitled Report'}</div>
49+
<div className="text-sm text-gray-600">{report.description || 'No description provided.'}</div>
50+
<div className="text-sm text-gray-500 mt-1">
51+
<strong>Location:</strong> {report.location || 'N/A'} | <strong>Severity:</strong> {report.severity || 'N/A'} | <strong>Status:</strong> {report.status || 'N/A'}
52+
</div>
53+
<div className="text-sm text-gray-400">
54+
Reported On: {report.reportDate ? new Date(report.reportDate).toLocaleDateString() : 'Unknown'}
55+
</div>
56+
</li>
57+
))}
58+
</ul>
59+
)}
60+
</div>
61+
</div>
62+
);
63+
}

0 commit comments

Comments
 (0)