pos-dashboard-v2/src/contexts/authContext.tsx

56 lines
1.4 KiB
TypeScript
Raw Normal View History

2025-08-05 12:35:40 +07:00
'use client'
import { createContext, useContext, useEffect, useState } from 'react'
import Loading from '../components/layout/shared/Loading'
2025-08-12 21:29:24 +07:00
import { User } from '../types/services/user'
2025-08-05 12:35:40 +07:00
type AuthContextType = {
isAuthenticated: boolean
token: string | null
2025-08-12 21:29:24 +07:00
currentUser: User | null
2025-08-05 12:35:40 +07:00
}
const AuthContext = createContext<AuthContextType>({
isAuthenticated: false,
token: null,
currentUser: null
})
export const AuthProvider = ({ children }: { children: React.ReactNode }) => {
const [token, setToken] = useState<string | null>(null)
2025-08-12 21:29:24 +07:00
const [currentUser, setCurrentUser] = useState<User | null>(null)
2025-08-05 12:35:40 +07:00
const [isInitialized, setIsInitialized] = useState(false)
useEffect(() => {
const savedToken = localStorage.getItem('authToken')
const savedUser = localStorage.getItem('user')
if (savedToken) setToken(savedToken)
2025-09-08 23:12:11 +07:00
if (savedUser) {
try {
setCurrentUser(JSON.parse(savedUser))
} catch (error) {
console.error('Failed to parse saved user data:', error)
// Clear invalid data
localStorage.removeItem('user')
}
}
2025-08-05 12:35:40 +07:00
setIsInitialized(true)
}, [])
if (!isInitialized) return <Loading />
return (
<AuthContext.Provider
value={{
isAuthenticated: !!token,
token,
currentUser
}}
>
{children}
</AuthContext.Provider>
)
}
export const useAuth = () => useContext(AuthContext)