| import React, { createContext, useState, useEffect } from 'react' | |
| import { authAPI } from '../services/api' | |
| import toast from 'react-hot-toast' | |
| export const AuthContext = createContext(null) | |
| export const AuthProvider = ({ children }) => { | |
| const [user, setUser] = useState(null) | |
| const [loading, setLoading] = useState(true) | |
| useEffect(() => { | |
| checkAuth() | |
| }, []) | |
| const checkAuth = async () => { | |
| try { | |
| const response = await authAPI.getCurrentUser() | |
| setUser(response.data) | |
| } catch (error) { | |
| setUser(null) | |
| } finally { | |
| setLoading(false) | |
| } | |
| } | |
| const login = async (credentials) => { | |
| try { | |
| const response = await authAPI.login(credentials) | |
| setUser(response.data) | |
| toast.success('Welcome back!') | |
| return response.data | |
| } catch (error) { | |
| throw error | |
| } | |
| } | |
| const register = async (userData) => { | |
| try { | |
| const response = await authAPI.register(userData) | |
| setUser(response.data) | |
| toast.success('Account created successfully!') | |
| return response.data | |
| } catch (error) { | |
| throw error | |
| } | |
| } | |
| const logout = async () => { | |
| try { | |
| await authAPI.logout() | |
| setUser(null) | |
| toast.success('Logged out successfully') | |
| } catch (error) { | |
| console.error('Logout error:', error) | |
| } | |
| } | |
| return ( | |
| <AuthContext.Provider value={{ user, login, register, logout, loading }}> | |
| {children} | |
| </AuthContext.Provider> | |
| ) | |
| } |