78 lines
2.4 KiB
TypeScript
78 lines
2.4 KiB
TypeScript
"use client";
|
|
|
|
import { QuoteCard } from "@/components/quote-card";
|
|
import { Calendar } from "@/components/calendar";
|
|
import { News } from "@/components/news";
|
|
import { Duties } from "@/components/flow";
|
|
import { Email } from "@/components/email";
|
|
import { Parole } from "@/components/parole";
|
|
import { useSession } from "next-auth/react";
|
|
import { useEffect, useState } from "react";
|
|
|
|
export default function Home() {
|
|
const { data: session, status } = useSession();
|
|
const [isLoading, setIsLoading] = useState(true);
|
|
|
|
useEffect(() => {
|
|
// Check if logout is in progress - if so, redirect immediately
|
|
const justLoggedOut = sessionStorage.getItem('just_logged_out') === 'true';
|
|
const logoutCookie = document.cookie.split(';').some(c => c.trim().startsWith('logout_in_progress=true'));
|
|
|
|
if (justLoggedOut || logoutCookie) {
|
|
// Clear the flags and redirect
|
|
sessionStorage.removeItem('just_logged_out');
|
|
document.cookie = 'logout_in_progress=; path=/; expires=Thu, 01 Jan 1970 00:00:00 UTC';
|
|
window.location.href = '/signin?logout=true';
|
|
return;
|
|
}
|
|
|
|
if (status !== "loading") {
|
|
setIsLoading(false);
|
|
}
|
|
}, [status]);
|
|
|
|
// Don't render widgets if logout is in progress
|
|
const justLoggedOut = sessionStorage.getItem('just_logged_out') === 'true';
|
|
const logoutCookie = document.cookie.split(';').some(c => c.trim().startsWith('logout_in_progress=true'));
|
|
|
|
if (isLoading || justLoggedOut || logoutCookie) {
|
|
return (
|
|
<main className="h-screen flex items-center justify-center">
|
|
<div className="animate-spin rounded-full h-32 w-32 border-t-2 border-b-2 border-gray-900"></div>
|
|
</main>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<main className="h-screen overflow-auto">
|
|
<div className="container mx-auto p-4 mt-12">
|
|
{/* First row */}
|
|
<div className="grid grid-cols-12 gap-4 mb-4">
|
|
<div className="col-span-3">
|
|
<QuoteCard />
|
|
</div>
|
|
<div className="col-span-3">
|
|
<Calendar />
|
|
</div>
|
|
<div className="col-span-3">
|
|
<News />
|
|
</div>
|
|
<div className="col-span-3">
|
|
<Duties />
|
|
</div>
|
|
</div>
|
|
|
|
{/* Second row */}
|
|
<div className="grid grid-cols-12 gap-4">
|
|
<div className="col-span-6">
|
|
<Email />
|
|
</div>
|
|
<div className="col-span-6">
|
|
<Parole />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</main>
|
|
);
|
|
}
|