dishplanner/frontend-old/app/context/AuthContext.tsx

41 lines
No EOL
1.1 KiB
TypeScript

import React, { createContext, useContext, useEffect, useState } from 'react';
interface AuthContextProps {
isAuthenticated: boolean;
login: () => void;
logout: () => void;
}
const AuthContext = createContext<AuthContextProps>({
isAuthenticated: false,
login: () => {},
logout: () => {},
});
export const AuthProvider = ({ children }: { children: React.ReactNode }) => {
// Start with false during SSR, will be updated on client
const [isAuthenticated, setIsAuthenticated] = useState<boolean>(false);
useEffect(() => {
// Check token on client after mount
const token = localStorage.getItem('token');
setIsAuthenticated(!!token);
}, []);
const login = () => {
setIsAuthenticated(true);
};
const logout = () => {
setIsAuthenticated(false);
localStorage.removeItem('token');
};
return (
<AuthContext.Provider value={{ isAuthenticated, login, logout }}>
{children}
</AuthContext.Provider>
);
};
export const useAuth = () => useContext(AuthContext);