diff --git a/db.json b/db.json index 5d86213..873cc9b 100644 --- a/db.json +++ b/db.json @@ -23,7 +23,7 @@ "email": "adminuser@example.com" } ], - "employee": [ + "employees": [ { "id": "1", "name": "Employee User", @@ -112,6 +112,16 @@ "email": "tejas001@gmail.com", "address": " Baner, Pune", "mobile": "8675493099" + }, + { + "id": "e539", + "firstname": "aaaa", + "lastname": "bbbb", + "age": "25", + "gender": "male", + "email": "aaaa@gmail.com", + "address": "pune", + "mobile": "7559393995" } ] } \ No newline at end of file diff --git a/src/App.jsx b/src/App.jsx index 961459c..b7fbf35 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -11,6 +11,7 @@ import CustomerMeasurements from './components/customer/CustomerMeasurements'; import { AuthProvider, AuthContext } from './contexts/AuthContext'; import EmployeeList from './components/admin/EmployeeList'; import AddEmployee from './components/admin/AddEmployee'; +import EmployeeProfile from './components/admin/EmployeeProfile'; const { Content } = Layout; @@ -33,6 +34,7 @@ const App = () => { } /> } /> } /> + } /> diff --git a/src/components/Auth/LoginPage.jsx b/src/components/Auth/LoginPage.jsx index cfe0942..55737b2 100644 --- a/src/components/Auth/LoginPage.jsx +++ b/src/components/Auth/LoginPage.jsx @@ -15,16 +15,16 @@ const LoginPage = () => { try { const response = await axiosInstance.get('http://localhost:5000/authlogin'); - const user = response.data.find(user => user.email === email && user.password === password); - + if (user) { + localStorage.setItem("loggedInUser", JSON.stringify(user)) if (user.role === 'admin') { navigate('/admin'); } else if (user.role === 'employee') { navigate('/employee'); } else { - setError('Invalid credentials'); + setError('Invalid role.'); } } else { setError('Invalid credentials'); diff --git a/src/components/Auth/ResetPasswordRequest.jsx b/src/components/Auth/ResetPasswordRequest.jsx new file mode 100644 index 0000000..cfeb171 --- /dev/null +++ b/src/components/Auth/ResetPasswordRequest.jsx @@ -0,0 +1,48 @@ +// import React, { useState } from 'react'; +// import axiosInstance from '../../api/axiosConfig'; +// import './ResetPasswordRequest.css'; + +// const ResetPasswordRequest = () => { +// const [email, setEmail] = useState(''); +// const [message, setMessage] = useState(''); + +// const handleResetRequest = async (e) => { +// e.preventDefault(); +// try { +// await axiosInstance.post('http://localhost:5000/auth/forgot-password', { email }); +// setMessage('Password reset email sent. Please check your inbox.'); +// } catch (error) { +// setMessage('Error sending password reset email. Please try again.'); +// } +// }; + +// return ( +//
+//
+//
+//

Reset Password

+//

Enter your email to receive password reset instructions.

+// {message &&

{message}

} +//
+// +// setEmail(e.target.value)} +// placeholder="Enter your email" +// required +// className="input-field" +// /> +// +//
+//
+//
+//
+// ); +// }; + +// export default ResetPasswordRequest; diff --git a/src/components/admin/AddEmployee.jsx b/src/components/admin/AddEmployee.jsx index 12ad1c9..0a0444a 100644 --- a/src/components/admin/AddEmployee.jsx +++ b/src/components/admin/AddEmployee.jsx @@ -39,7 +39,7 @@ const AddEmployee = () => {
-

Creating Employee Account

+

creating employee account

Skip for now
@@ -48,7 +48,7 @@ const AddEmployee = () => {
@@ -56,7 +56,7 @@ const AddEmployee = () => {
- + { />
- + { />
- + { />
- +
- + { />
- + { />
- + {
diff --git a/src/components/admin/EmployeeList.jsx b/src/components/admin/EmployeeList.jsx index a909bfc..fc72d77 100644 --- a/src/components/admin/EmployeeList.jsx +++ b/src/components/admin/EmployeeList.jsx @@ -25,12 +25,12 @@ const EmployeeList = ({ className = '' }) => { }; const handleAddEmployee = () => { - navigate('/add-employee'); - }; + navigate('/add-employee'); + }; -// const onEmployeeCardsClick = useCallback(() => { -// navigate('/employee-profile'); -// }, [navigate]); + const onEmployeeCardsClick = useCallback(() => { + navigate('/employee-profile'); + }, [navigate]); return (
@@ -38,12 +38,12 @@ const EmployeeList = ({ className = '' }) => {
-

Employees List

+

employees list

@@ -61,16 +61,16 @@ const EmployeeList = ({ className = '' }) => { d="M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z" /> - Filter + filter
-

Total Employees ({employees.length})

+

total employees ({employees.length})

- - - + + + @@ -82,9 +82,9 @@ const EmployeeList = ({ className = '' }) => { diff --git a/src/components/admin/EmployeeProfile.jsx b/src/components/admin/EmployeeProfile.jsx new file mode 100644 index 0000000..cee394f --- /dev/null +++ b/src/components/admin/EmployeeProfile.jsx @@ -0,0 +1,157 @@ +import React, { useCallback } from "react"; +import { useNavigate, useLocation } from "react-router-dom"; +import Sidebar from '../sidebar/Sidebar'; +import axiosInstance from '../../api/axiosConfig'; +// import ActionButtons from "../components/ActionButtons"; +// import Profile from "../components/Profile"; + +const EmployeeProfile = () => { + const navigate = useNavigate(); + const location = useLocation(); + const { employee } = location.state || {}; + + const onButtonLabelsContainerClick = useCallback(() => { + navigate("/adminemployee-account-delete"); + }, [navigate]); + + const onHomeIconClick = useCallback(() => { + navigate("/adminhome"); + }, [navigate]); + + const onHeadingContainerClick = useCallback(() => { + navigate("/adminemployee-list"); + }, [navigate]); + + if (!employee) { + return
Employee data not found
; + } + + return ( +
+
+
+ +
+
+
+ + + + + + + + +
+
+
+
+ +
+
+
+
+
+
+
+
+
+ + Employee List + + +
+
+ Employee Profile +
+
+
+
+ +
+
+ +
+
+
+ Employee Actions +
+
+ + Delete Account + +
+
+
+
+
+
+ ); +}; + +export default EmployeeProfile; diff --git a/src/components/customer/AddCustomer.jsx b/src/components/customer/AddCustomer.jsx index e1b2129..945b1ae 100644 --- a/src/components/customer/AddCustomer.jsx +++ b/src/components/customer/AddCustomer.jsx @@ -41,8 +41,8 @@ const AddCustomer = () => {
-

add customer

- skip for now +

add customer

+ skip for now
@@ -55,7 +55,7 @@ const AddCustomer = () => {
- +

customer information

diff --git a/src/components/customer/CustomerMeasurements.jsx b/src/components/customer/CustomerMeasurements.jsx index c5e26fe..bf020e6 100644 --- a/src/components/customer/CustomerMeasurements.jsx +++ b/src/components/customer/CustomerMeasurements.jsx @@ -68,9 +68,11 @@ const CustomerMeasurements = () => { - +
+ +
diff --git a/src/components/sidebar/Sidebar.jsx b/src/components/sidebar/Sidebar.jsx index 9747b8f..bc29413 100644 --- a/src/components/sidebar/Sidebar.jsx +++ b/src/components/sidebar/Sidebar.jsx @@ -1,12 +1,19 @@ -import React, { useContext } from 'react'; +import React, { useState, useEffect } from 'react'; import AdminSidebar from './AdminSidebar'; import EmployeeSidebar from './EmployeeSidebar'; -import { AuthContext } from '../../contexts/AuthContext'; const Sidebar = () => { - const { user } = useContext(AuthContext); + const [user, setUserData] = useState(null); - if (!user) return null; + useEffect(() => { + // Retrieve user data from localStorage + const storedUserData = localStorage.getItem('loggedInUser'); + if (storedUserData) { + setUserData(JSON.parse(storedUserData)); + } + }, []); + + if (!user) return null; // Ensure user is not null before accessing its properties return user.role === 'admin' ? : ; }; diff --git a/src/services/authService.js b/src/services/authService.js index f58f025..25e4a1e 100644 --- a/src/services/authService.js +++ b/src/services/authService.js @@ -1,17 +1,36 @@ const authService = { - login: async (username, password) => { - // Simulate login process - const userData = { username, role: username === 'admin' ? 'admin' : 'employee' }; + login: async (username, password) => { + try { + // Simulate login process with API call (replace with real API endpoint) + const response = await axiosInstance.post('/auth/login', { username, password }); + const userData = response.data; + + // Store user data and token in localStorage localStorage.setItem('user', JSON.stringify(userData)); + localStorage.setItem('token', userData.token); + return userData; - }, - logout: () => { - localStorage.removeItem('user'); - }, - getCurrentUser: () => { - return JSON.parse(localStorage.getItem('user')); + } catch (error) { + throw new Error('Login failed. Please check your credentials.'); } - }; - - export default authService; - \ No newline at end of file + }, + logout: () => { + localStorage.removeItem('user'); + localStorage.removeItem('token'); + }, + getCurrentUser: () => { + return JSON.parse(localStorage.getItem('user')); + }, + getToken: () => { + return localStorage.getItem('token'); + }, + isAuthenticated: () => { + return !!localStorage.getItem('token'); + }, + hasRole: (role) => { + const user = JSON.parse(localStorage.getItem('user')); + return user && user.role === role; + } +}; + +export default authService; diff --git a/src/services/server.js b/src/services/server.js new file mode 100644 index 0000000..d3cfbec --- /dev/null +++ b/src/services/server.js @@ -0,0 +1,61 @@ +// server.js +const express = require('express'); +const bodyParser = require('body-parser'); +const nodemailer = require('nodemailer'); +const crypto = require('crypto'); + +const app = express(); +const port = 5000; + +app.use(bodyParser.json()); + +let users = [ + // Example users + { email: 'admin@example.com', password: 'admin123', role: 'admin' }, + { email: 'employee@example.com', password: 'employee123', role: 'employee' }, +]; + +// Endpoint to handle password reset requests +app.post('/auth/forgot-password', (req, res) => { + const { email } = req.body; + const user = users.find(user => user.email === email); + + if (!user) { + return res.status(404).json({ message: 'User not found' }); + } + + const token = crypto.randomBytes(20).toString('hex'); + // Store token in a way that it can be verified later + user.resetPasswordToken = token; + user.resetPasswordExpires = Date.now() + 3600000; // 1 hour + + // Send email with reset link + const transporter = nodemailer.createTransport({ + service: 'Gmail', + auth: { + user: 'your-email@gmail.com', + pass: 'your-email-password', + }, + }); + + const mailOptions = { + to: user.email, + from: 'passwordreset@example.com', + subject: 'Password Reset', + text: `You are receiving this because you (or someone else) have requested the reset of the password for your account.\n\n + Please click on the following link, or paste this into your browser to complete the process:\n\n + http://localhost:3000/reset-password/${token}\n\n + If you did not request this, please ignore this email and your password will remain unchanged.\n`, + }; + + transporter.sendMail(mailOptions, (err) => { + if (err) { + return res.status(500).json({ message: 'Error sending email' }); + } + res.status(200).json({ message: 'Password reset email sent' }); + }); +}); + +app.listen(port, () => { + console.log(`Server is running on http://localhost:${port}`); +});
#Employee NameEmail AddressDetailsemployee nameemail addressdetails