to do calendar view
This commit is contained in:
47
context/UserContext.tsx
Normal file
47
context/UserContext.tsx
Normal file
@@ -0,0 +1,47 @@
|
||||
'use client'
|
||||
import { useSession } from 'next-auth/react'
|
||||
import React, { createContext, useEffect, useState } from 'react'
|
||||
|
||||
type UserContextType = {
|
||||
currentUser: User | null
|
||||
loading: boolean
|
||||
}
|
||||
|
||||
export const UserContext = createContext<UserContextType>({
|
||||
currentUser: null,
|
||||
loading: true
|
||||
});
|
||||
|
||||
export const UserContextProvider = ({ children }: { children: React.ReactNode }) => {
|
||||
const { data: session, status } = useSession();
|
||||
const [currentUser, setCurrentUser] = useState<User | null>(null);
|
||||
const [loading, setLoading] = useState(true);
|
||||
|
||||
useEffect(() => {
|
||||
async function fetchUser() {
|
||||
try {
|
||||
const res = await fetch('api/users/current-user')
|
||||
if (!res.ok) throw new Error('User not found')
|
||||
|
||||
const data: User = await res.json()
|
||||
setCurrentUser(data)
|
||||
} catch (err) {
|
||||
console.error('Failed to fetch current user:', err)
|
||||
} finally {
|
||||
setLoading(false)
|
||||
}
|
||||
}
|
||||
|
||||
if (status === 'authenticated' && session?.user?.id) {
|
||||
fetchUser()
|
||||
} else if (status === 'unauthenticated') {
|
||||
setLoading(false)
|
||||
}
|
||||
}, [session?.user.id, status])
|
||||
|
||||
return (
|
||||
<UserContext.Provider value={{ currentUser, loading }}>
|
||||
{children}
|
||||
</UserContext.Provider>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user