File size: 1,432 Bytes
295ae46 2ab1980 de6a95b 2ab1980 de6a95b 2ab1980 de6a95b 2ab1980 de6a95b 2ab1980 de6a95b 2ab1980 de6a95b 2ab1980 de6a95b | 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 | import React, { useState, createContext, useContext } from 'react';
import { User } from '@repo/shared-types';
const SESSION_KEY = 'edtech_admin_token';
const USER_KEY = 'edtech_admin_user';
interface AuthContextType {
token: string | null;
user: User | null;
login: (token: string, user: User) => void;
logout: () => void;
}
export const AuthContext = createContext<AuthContextType>({
token: null,
user: null,
login: () => {},
logout: () => {}
});
export function AuthProvider({ children }: { children: React.ReactNode }) {
const [token, setToken] = useState<string | null>(() => sessionStorage.getItem(SESSION_KEY));
const [user, setUser] = useState<User | null>(() => {
const saved = sessionStorage.getItem(USER_KEY);
return saved ? JSON.parse(saved) : null;
});
const login = (t: string, u: User) => {
sessionStorage.setItem(SESSION_KEY, t);
sessionStorage.setItem(USER_KEY, JSON.stringify(u));
setToken(t);
setUser(u);
};
const logout = () => {
sessionStorage.removeItem(SESSION_KEY);
sessionStorage.removeItem(USER_KEY);
setToken(null);
setUser(null);
};
return (
<AuthContext.Provider value={{ token, user, login, logout }}>
{children}
</AuthContext.Provider>
);
}
export const useAuth = () => useContext(AuthContext);
|