diff --git a/resources/js/Layouts/MainLayout.jsx b/resources/js/Layouts/MainLayout.jsx index 7b1a4c3..c4e2fc1 100644 --- a/resources/js/Layouts/MainLayout.jsx +++ b/resources/js/Layouts/MainLayout.jsx @@ -1,8 +1,9 @@ import { Link, usePage } from "@inertiajs/react"; -import { useState } from "react"; +import { useState, useEffect } from "react"; export default function MainLayout({ children }) { - const [sidebarOpen, setSidebarOpen] = useState(true); + const [sidebarOpen, setSidebarOpen] = useState(false); + const [isMobile, setIsMobile] = useState(false); const { url } = usePage(); const menus = [ @@ -13,51 +14,144 @@ export default function MainLayout({ children }) { { name: "Peminjaman", href: "/peminjaman", icon: "📋" }, ]; + // Deteksi ukuran layar + useEffect(() => { + const checkScreen = () => { + const mobile = window.innerWidth < 1024; + setIsMobile(mobile); + // Sidebar terbuka default di desktop, tertutup di mobile/tablet + if (!mobile) { + setSidebarOpen(true); + } else { + setSidebarOpen(false); + } + }; + + checkScreen(); + window.addEventListener("resize", checkScreen); + return () => window.removeEventListener("resize", checkScreen); + }, []); + + // Tutup sidebar saat navigasi di mobile + const handleMenuClick = () => { + if (isMobile) setSidebarOpen(false); + }; + return ( -
+
+ {/* Overlay untuk mobile/tablet */} + {isMobile && sidebarOpen && ( +
setSidebarOpen(false)} + /> + )} + {/* Sidebar */} {/* Main Content */} -
+
{/* Header */} -
-

- Sistem Perpustakaanku -

- +
+
+ {/* Hamburger Menu - hanya tampil di mobile/tablet */} + {isMobile && ( + + )} +

+ Sistem Perpustakaanku +

+

+ Perpustakaanku +

+
+ + 📅{" "} {new Date().toLocaleDateString("id-ID", { weekday: "long", @@ -66,35 +160,98 @@ export default function MainLayout({ children }) { day: "numeric", })} + + {/* Tanggal singkat untuk mobile */} + + 📅{" "} + {new Date().toLocaleDateString("id-ID", { + day: "numeric", + month: "short", + year: "numeric", + })} +
{/* Flash Message */} {/* Content */} -
{children}
+
+ {children} +
+ + {/* Bottom Navigation Bar - Khusus Mobile */} + {isMobile && ( + + )}
); } function FlashMessage() { const { flash } = usePage().props; + const [visible, setVisible] = useState(true); + // Auto hide setelah 4 detik + useEffect(() => { + if (flash?.success || flash?.error) { + setVisible(true); + const timer = setTimeout(() => setVisible(false), 4000); + return () => clearTimeout(timer); + } + }, [flash]); + + if (!visible) return null; if (!flash?.success && !flash?.error) return null; return ( -
+
{flash?.success && ( -
- - {flash.success} +
+
+ + {flash.success} +
+
)} {flash?.error && ( -
- - {flash.error} +
+
+ + {flash.error} +
+
)}