| import { createContext, useContext, useState, useEffect } from "react"; |
| import { login, logout, signup } from "../api/client.js"; |
|
|
| const AuthContext = createContext(null); |
|
|
| export function AuthProvider({ children }) { |
| const [user, setUser] = useState(null); |
| const [loading, setLoading] = useState(true); |
|
|
| |
| useEffect(() => { |
| const storedUser = localStorage.getItem("intelli_user"); |
| if (storedUser) { |
| try { |
| setUser(JSON.parse(storedUser)); |
| } catch (e) { |
| localStorage.removeItem("intelli_user"); |
| } |
| } |
| setLoading(false); |
| }, []); |
|
|
| const handleLogin = async (email, password) => { |
| const data = await login(email, password); |
| const userData = { email: data.user.email, id: data.user.id }; |
| setUser(userData); |
| localStorage.setItem("intelli_user", JSON.stringify(userData)); |
| |
| if (data.session?.access_token) { |
| localStorage.setItem("intelli_token", data.session.access_token); |
| } |
| }; |
|
|
| const handleSignup = async (email, password) => { |
| const data = await signup(email, password); |
| const userData = { email: data.user.email, id: data.user.id }; |
| setUser(userData); |
| localStorage.setItem("intelli_user", JSON.stringify(userData)); |
| if (data.session?.access_token) { |
| localStorage.setItem("intelli_token", data.session.access_token); |
| } |
| }; |
|
|
| const handleLogout = async () => { |
| try { |
| await logout(); |
| } catch (e) { |
| console.error("Logout API error", e); |
| } |
| setUser(null); |
| localStorage.removeItem("intelli_user"); |
| localStorage.removeItem("intelli_token"); |
| }; |
|
|
| return ( |
| <AuthContext.Provider value={{ user, loading, login: handleLogin, signup: handleSignup, logout: handleLogout }}> |
| {children} |
| </AuthContext.Provider> |
| ); |
| } |
|
|
| export function useAuth() { |
| const ctx = useContext(AuthContext); |
| if (!ctx) throw new Error("useAuth must be used within AuthProvider"); |
| return ctx; |
| } |
|
|