Spaces:
Sleeping
Sleeping
| import { useState, useEffect, useContext, createContext } from 'react'; | |
| // Define the user data type | |
| interface UserData { | |
| userId?: number; | |
| username?: string; | |
| employeeId?: number; | |
| firstName?: string; | |
| lastName?: string; | |
| email?: string; | |
| role?: string; | |
| } | |
| // Define the auth context type | |
| interface AuthContextType { | |
| isAuthenticated: boolean; | |
| userData: UserData | null; | |
| login: (user: UserData) => void; | |
| logout: () => void; | |
| } | |
| // Create the auth context with default values | |
| const AuthContext = createContext<AuthContextType>({ | |
| isAuthenticated: false, | |
| userData: null, | |
| login: () => {}, | |
| logout: () => {} | |
| }); | |
| // Auth provider component | |
| export const AuthProvider = ({ children }: { children: React.ReactNode }) => { | |
| const [isAuthenticated, setIsAuthenticated] = useState(false); | |
| const [userData, setUserData] = useState<UserData | null>(null); | |
| // Check for existing auth on mount | |
| useEffect(() => { | |
| const storedUser = localStorage.getItem('user'); | |
| if (storedUser) { | |
| try { | |
| const parsedUser = JSON.parse(storedUser); | |
| setUserData(parsedUser); | |
| setIsAuthenticated(true); | |
| } catch (error) { | |
| console.error('Error parsing stored user data:', error); | |
| localStorage.removeItem('user'); | |
| } | |
| } | |
| }, []); | |
| // Login function | |
| const login = (user: UserData) => { | |
| setUserData(user); | |
| setIsAuthenticated(true); | |
| localStorage.setItem('user', JSON.stringify(user)); | |
| }; | |
| // Logout function | |
| const logout = () => { | |
| setUserData(null); | |
| setIsAuthenticated(false); | |
| localStorage.removeItem('user'); | |
| }; | |
| return ( | |
| <AuthContext.Provider value={{ isAuthenticated, userData, login, logout }}> | |
| {children} | |
| </AuthContext.Provider> | |
| ); | |
| }; | |
| // Custom hook to use the auth context | |
| export const useAuth = () => { | |
| return useContext(AuthContext); | |
| }; | |
| export default useAuth; |