'use client' import { createContext, useContext, useEffect, useState } from 'react' import { Session, createBrowserSupabaseClient } from '@supabase/auth-helpers-nextjs' import { useRouter } from 'next/navigation' import type { SupabaseClient } from '@supabase/auth-helpers-nextjs' type MaybeSession = Session | null type SupabaseContext = { supabase: SupabaseClient session: MaybeSession } const Context = createContext(undefined) export default function SupabaseProvider({ children, session, }: { children: React.ReactNode session: MaybeSession }) { const [supabase] = useState(() => createBrowserSupabaseClient()) const router = useRouter() useEffect(() => { const { data: { subscription }, } = supabase.auth.onAuthStateChange(() => { router.refresh() }) return () => { subscription.unsubscribe() } }, [router, supabase]) return ( <>{children} ) } export const useSupabase = () => { const context = useContext(Context) if (context === undefined) { throw new Error('useSupabase must be used inside SupabaseProvider') } return context }