"use client" import type {ReactNode} from "react" import {Loader2} from "lucide-react" import {ErrorPage} from "@/components/layout/error" import {useUser} from "@/contexts/user-context" type RequireAuthProps = { children: ReactNode fallback?: ReactNode minHeightClassName?: string } /** * Guards page content until the session user is available. * Redirect to login is handled by the parent layout; this only covers the content slot. */ export function RequireAuth({ children, fallback, minHeightClassName = "min-h-[400px]", }: RequireAuthProps) { const {user, loading} = useUser() if (loading) { return fallback ?? (
) } if (!user) { return null } return <>{children} } type RequireAdminAuthProps = { children: ReactNode } /** Guards admin routes after the shared shell has rendered. */ export function RequireAdminAuth({children}: RequireAdminAuthProps) { const {user, loading} = useUser() if (loading) { return (
) } if (!user?.is_admin) { return ( ) } return <>{children} }