File size: 1,467 Bytes
25732fb | 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 51 52 53 54 55 56 57 58 59 60 61 62 63 | 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>
)
} |