import React, { useEffect, useState } from 'react'; import { supabase } from '../lib/supabase'; import type { User } from '@supabase/supabase-js'; import { Loader2 } from 'lucide-react'; interface ProtectedRouteProps { children: React.ReactNode; } export function ProtectedRoute({ children }: ProtectedRouteProps) { const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { // Get initial session supabase.auth.getSession().then(({ data: { session } }) => { setUser(session?.user ?? null); setLoading(false); }); // Listen for auth changes const { data: { subscription } } = supabase.auth.onAuthStateChange( (event, session) => { setUser(session?.user ?? null); setLoading(false); } ); return () => subscription.unsubscribe(); }, []); if (loading) { return (
Loading...
); } if (!user) { // Redirect to login if not authenticated if (typeof window !== 'undefined') { window.location.href = '/login'; } return null; } return <>{children}; }