NEXUS / components /AuthGuard.tsx
dimensionalpulsar's picture
Upload 34 files
d3ab8d1 verified
"use client";
import { useEffect, useState } from "react";
import { auth } from "@/lib/firebase";
import { onAuthStateChanged } from "firebase/auth";
import { useRouter, usePathname } from "next/navigation";
import { motion, AnimatePresence } from "framer-motion";
export default function AuthGuard({ children }: { children: React.ReactNode }) {
const [loading, setLoading] = useState(true);
const [user, setUser] = useState<any>(null);
const router = useRouter();
const pathname = usePathname();
useEffect(() => {
const unsubscribe = onAuthStateChanged(auth, (user) => {
setUser(user);
setLoading(false);
if (!user && pathname !== "/login") {
router.push("/login");
}
});
return () => unsubscribe();
}, [pathname, router]);
if (loading) {
return (
<div className="fixed inset-0 bg-[#0f172a] flex items-center justify-center z-[200]">
<motion.div
animate={{ rotate: 360 }}
transition={{ duration: 1, repeat: Infinity, ease: "linear" }}
className="w-12 h-12 border-4 border-blue-500 border-t-transparent rounded-full shadow-lg shadow-blue-500/20"
/>
</div>
);
}
// If not logged in and not on login page, don't show children (redirecting)
if (!user && pathname !== "/login") {
return null;
}
return <>{children}</>;
}