"use client"; import type { SupabaseClient } from "@supabase/auth-helpers-nextjs"; import { createBrowserSupabaseClient, Session, } from "@supabase/auth-helpers-nextjs"; import { useRouter } from "next/navigation"; import { createContext, useContext, useEffect, useState } from "react"; type MaybeSession = Session | null; export type SupabaseContext = { supabase: SupabaseClient; session: MaybeSession; }; const Context = createContext(undefined); export const SupabaseProvider = ({ children, session, }: { children: React.ReactNode; session: MaybeSession; }): JSX.Element => { 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 = (): SupabaseContext => { const context = useContext(Context); if (context === undefined) { throw new Error("useSupabase must be used inside SupabaseProvider"); } return context; };