import { Link, usePage } from "@inertiajs/react"; import { useState, useEffect } from "react"; export default function MainLayout({ children }) { const [sidebarOpen, setSidebarOpen] = useState(false); const [isMobile, setIsMobile] = useState(false); const { url } = usePage(); const menus = [ { name: "Dashboard", href: "/", icon: "🏠" }, { name: "Buku", href: "/buku", icon: "📚" }, { name: "Kategori", href: "/kategori", icon: "🏷️" }, { name: "Anggota", href: "/anggota", icon: "👥" }, { 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 */}
{/* Hamburger Menu - hanya tampil di mobile/tablet */} {isMobile && ( )}

Sistem Perpustakaanku

Perpustakaanku

📅{" "} {new Date().toLocaleDateString("id-ID", { weekday: "long", year: "numeric", month: "long", day: "numeric", })} {/* Tanggal singkat untuk mobile */} 📅{" "} {new Date().toLocaleDateString("id-ID", { day: "numeric", month: "short", year: "numeric", })}
{/* Flash Message */} {/* Content */}
{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?.error && (
{flash.error}
)}
); }