mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
119 lines
4.1 KiB
JavaScript
119 lines
4.1 KiB
JavaScript
'use client'
|
|
// src/components/Layout.js
|
|
import React, { useState, useEffect } from 'react';
|
|
import DropdownMenu from '@/components/DropdownMenu';
|
|
import { useRouter } from 'next/navigation'; // Ajout de l'importation
|
|
import { User, MessageSquare, LogOut, Settings, Home } from 'lucide-react'; // Ajout de l'importation de l'icône Home
|
|
import Logo from '@/components/Logo'; // Ajout de l'importation du composant Logo
|
|
import { FE_PARENTS_HOME_URL,FE_PARENTS_MESSAGERIE_URL,FE_PARENTS_SETTINGS_URL } from '@/utils/Url'; // Ajout de l'importation de l'URL de la page d'accueil parent
|
|
import useLocalStorage from '@/hooks/useLocalStorage';
|
|
import { fetchMessages } from '@/app/actions/messagerieAction';
|
|
import ProtectedRoute from '@/components/ProtectedRoute';
|
|
import { SessionProvider } from 'next-auth/react';
|
|
import { disconnect } from '@/app/actions/authAction';
|
|
import Popup from '@/components/Popup';
|
|
|
|
export default function Layout({
|
|
children,
|
|
}) {
|
|
|
|
const router = useRouter(); // Définition de router
|
|
const [messages, setMessages] = useState([]);
|
|
const [userId, setUserId] = useLocalStorage("userId", '') ;
|
|
const [isLoading, setIsLoading] = useState(true);
|
|
const [isPopupVisible, setIsPopupVisible] = useState(false);
|
|
|
|
const handleDisconnect = () => {
|
|
setIsPopupVisible(true);
|
|
};
|
|
|
|
const confirmDisconnect = () => {
|
|
setIsPopupVisible(false);
|
|
disconnect();
|
|
};
|
|
|
|
useEffect(() => {
|
|
setIsLoading(true);
|
|
setUserId(userId)
|
|
fetchMessages(userId)
|
|
.then(data => {
|
|
if (data) {
|
|
setMessages(data);
|
|
}
|
|
console.log('Success :', data);
|
|
})
|
|
.catch(error => {
|
|
console.error('Error fetching data:', error);
|
|
})
|
|
.finally(() => {
|
|
setIsLoading(false);
|
|
});
|
|
}, [userId]);
|
|
|
|
if (isLoading) {
|
|
return <div>Loading...</div>;
|
|
}
|
|
|
|
return (
|
|
<SessionProvider>
|
|
<ProtectedRoute>
|
|
<div className="flex flex-col min-h-screen bg-gray-50">
|
|
{/* Entête */}
|
|
<header className="bg-white border-b border-gray-200 px-8 py-4 flex items-center justify-between fixed top-0 left-0 right-0 z-10">
|
|
<div className="flex items-center space-x-2">
|
|
<Logo className="h-8 w-8" /> {/* Utilisation du composant Logo */}
|
|
|
|
<div className="text-xl font-semibold">Accueil</div>
|
|
</div>
|
|
<div className="flex items-center space-x-4">
|
|
<button
|
|
className="p-2 rounded-full hover:bg-gray-200"
|
|
onClick={() => { router.push(FE_PARENTS_HOME_URL); }} // Utilisation de router pour revenir à l'accueil parent
|
|
>
|
|
<Home />
|
|
</button>
|
|
|
|
|
|
<div className="relative">
|
|
<button
|
|
className="p-2 rounded-full hover:bg-gray-200"
|
|
onClick={() => { router.push(FE_PARENTS_MESSAGERIE_URL); }} // Utilisation de router
|
|
>
|
|
<MessageSquare />
|
|
|
|
</button>
|
|
{messages.length > 0 && (
|
|
<span className="absolute top-0 right-0 block h-2 w-2 rounded-full bg-emerald-600"></span>
|
|
)}
|
|
</div>
|
|
<DropdownMenu
|
|
buttonContent={<User />}
|
|
items={[
|
|
{ label: 'Se déconnecter', icon: LogOut, onClick: handleDisconnect },
|
|
{ label: 'Settings', icon: Settings , onClick: () => { router.push(FE_PARENTS_SETTINGS_URL); } }
|
|
]}
|
|
buttonClassName="p-2 rounded-full hover:bg-gray-200"
|
|
menuClassName="absolute right-0 mt-2 w-48 bg-white border border-gray-200 rounded-md shadow-lg"
|
|
|
|
/>
|
|
</div>
|
|
</header>
|
|
|
|
{/* Content */}
|
|
<div className="pt-20 p-8 flex-1"> {/* Ajout de flex-1 pour utiliser toute la hauteur disponible */}
|
|
{children}
|
|
</div>
|
|
</div>
|
|
<Popup
|
|
visible={isPopupVisible}
|
|
message="Êtes-vous sûr(e) de vouloir vous déconnecter ?"
|
|
onConfirm={confirmDisconnect}
|
|
onCancel={() => setIsPopupVisible(false)}
|
|
/>
|
|
</ProtectedRoute>
|
|
</SessionProvider>
|
|
);
|
|
}
|
|
|
|
|