feat: Fermeture automatique de la barre latérale au clic en dehors - Ajout d'un gestionnaire de clic en dehors dans ClientLayout - Ajout des identifiants sur la sidebar et le bouton toggle
This commit is contained in:
@@ -1,13 +1,38 @@
|
||||
"use client";
|
||||
|
||||
import { ThemeProvider } from "next-themes";
|
||||
import { useState } from "react";
|
||||
import { useState, useEffect } from "react";
|
||||
import { Header } from "@/components/layout/Header";
|
||||
import { Sidebar } from "@/components/layout/Sidebar";
|
||||
|
||||
export default function ClientLayout({ children }: { children: React.ReactNode }) {
|
||||
const [isSidebarOpen, setIsSidebarOpen] = useState(false);
|
||||
|
||||
// Gestionnaire pour fermer la barre latérale lors d'un clic en dehors
|
||||
useEffect(() => {
|
||||
const handleClickOutside = (event: MouseEvent) => {
|
||||
const sidebar = document.getElementById("sidebar");
|
||||
const toggleButton = document.getElementById("sidebar-toggle");
|
||||
|
||||
if (
|
||||
sidebar &&
|
||||
!sidebar.contains(event.target as Node) &&
|
||||
toggleButton &&
|
||||
!toggleButton.contains(event.target as Node)
|
||||
) {
|
||||
setIsSidebarOpen(false);
|
||||
}
|
||||
};
|
||||
|
||||
if (isSidebarOpen) {
|
||||
document.addEventListener("mousedown", handleClickOutside);
|
||||
}
|
||||
|
||||
return () => {
|
||||
document.removeEventListener("mousedown", handleClickOutside);
|
||||
};
|
||||
}, [isSidebarOpen]);
|
||||
|
||||
return (
|
||||
<ThemeProvider attribute="class" defaultTheme="system" enableSystem>
|
||||
<div className="relative min-h-screen">
|
||||
|
||||
Reference in New Issue
Block a user