Spaces:
Runtime error
Runtime error
| import React, { createContext, useContext, useEffect, useState } from "react"; | |
| import { Session, User } from "@supabase/supabase-js"; | |
| import { supabase } from "../lib/supabase"; | |
| interface AuthContextType { | |
| session: Session | null; | |
| user: User | null; | |
| isLoading: boolean; | |
| signOut: () => Promise<void>; | |
| } | |
| const AuthContext = createContext<AuthContextType | undefined>(undefined); | |
| export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { | |
| const [session, setSession] = useState<Session | null>(null); | |
| const [user, setUser] = useState<User | null>(null); | |
| const [isLoading, setIsLoading] = useState(true); | |
| useEffect(() => { | |
| supabase.auth.getSession().then(({ data: { session } }) => { | |
| setSession(session); | |
| setUser(session?.user ?? null); | |
| setIsLoading(false); | |
| }); | |
| const { | |
| data: { subscription }, | |
| } = supabase.auth.onAuthStateChange((_event, session) => { | |
| setSession(session); | |
| setUser(session?.user ?? null); | |
| setIsLoading(false); | |
| }); | |
| return () => subscription.unsubscribe(); | |
| }, []); | |
| const signOut = async () => { | |
| await supabase.auth.signOut(); | |
| }; | |
| return ( | |
| <AuthContext.Provider value={{ session, user, isLoading, signOut }}> | |
| {children} | |
| </AuthContext.Provider> | |
| ); | |
| }; | |
| export const useAuth = () => { | |
| const context = useContext(AuthContext); | |
| if (context === undefined) { | |
| throw new Error("useAuth must be used within an AuthProvider"); | |
| } | |
| return context; | |
| }; | |