Spaces:
Sleeping
Sleeping
File size: 1,956 Bytes
d97b8f9 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | 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; |