pmtool / src /hooks /useAuth.tsx
devarshia5's picture
Upload 487 files
d97b8f9 verified
Raw
History Blame Contribute Delete
1.96 kB
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;