abcd / src /contexts /AuthContext.tsx
docs4you's picture
Upload 41 files
84121fd verified
import React, { createContext, useContext, useState, useEffect, ReactNode } from 'react'
import { authService } from '../services/authService'
interface AuthContextType {
isAuthenticated: boolean
isLoading: boolean
token: string | null
login: (code: string) => Promise<boolean>
logout: () => void
}
const AuthContext = createContext<AuthContextType | undefined>(undefined)
export function AuthProvider({ children }: { children: ReactNode }) {
const [isAuthenticated, setIsAuthenticated] = useState(false)
const [isLoading, setIsLoading] = useState(true)
const [token, setToken] = useState<string | null>(null)
useEffect(() => {
const savedToken = localStorage.getItem('daddytv_token')
if (savedToken) {
setToken(savedToken)
setIsAuthenticated(true)
}
setIsLoading(false)
}, [])
const login = async (code: string): Promise<boolean> => {
try {
const result = await authService.validateCode(code)
if (result.success) {
const userToken = result.token
setToken(userToken)
setIsAuthenticated(true)
localStorage.setItem('daddytv_token', userToken)
return true
}
return false
} catch (error) {
console.error('Login error:', error)
return false
}
}
const logout = () => {
setToken(null)
setIsAuthenticated(false)
localStorage.removeItem('daddytv_token')
localStorage.removeItem('daddytv_favorites')
localStorage.removeItem('daddytv_settings')
authService.logout()
}
return (
<AuthContext.Provider value={{
isAuthenticated,
isLoading,
token,
login,
logout
}}>
{children}
</AuthContext.Provider>
)
}
export function useAuth() {
const context = useContext(AuthContext)
if (context === undefined) {
throw new Error('useAuth must be used within an AuthProvider')
}
return context
}