28 lines
653 B
TypeScript
28 lines
653 B
TypeScript
"use client";
|
|
|
|
import { useRouter } from "next/navigation";
|
|
import { useEffect } from "react";
|
|
import { useAuth } from "@/context/AuthContext";
|
|
import LoadingSpinner from "./LoadingSpinner";
|
|
|
|
export default function ProtectedRoute({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode;
|
|
}) {
|
|
const { authState } = useAuth();
|
|
const router = useRouter();
|
|
|
|
useEffect(() => {
|
|
if (!authState.isLoading && !authState.isAuthenticated) {
|
|
router.push("/login");
|
|
}
|
|
}, [authState.isAuthenticated, authState.isLoading, router]);
|
|
|
|
if (authState.isLoading) {
|
|
return <LoadingSpinner />;
|
|
}
|
|
|
|
return authState.isAuthenticated ? children : null;
|
|
}
|