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);