import { useAuth } from "@/hooks/useAuth"; import { Avatar, AvatarFallback } from "@/components/ui/avatar"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { useIsMobile } from "@/hooks/use-mobile"; import { Sheet, SheetContent, SheetTrigger } from "@/components/ui/sheet"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { useState, type ReactNode } from "react"; import { useLocation, useNavigate } from "react-router"; import { LayoutDashboard, Map, Users, Church, ClipboardCheck, Settings, Shield, LogOut, Menu, ChevronLeft, ChevronRight, MapPinHouse, } from "lucide-react"; const menuItems = [ { icon: LayoutDashboard, label: "Dashboard", path: "/" }, { icon: Map, label: "Peta GIS", path: "/map" }, { icon: Users, label: "Penerima Bantuan", path: "/recipients" }, { icon: MapPinHouse, label: "Rumah Ibadah", path: "/places" }, { icon: ClipboardCheck, label: "Verifikasi", path: "/verification", roles: ["admin", "officer"], }, { icon: Shield, label: "Pengguna", path: "/users", roles: ["admin"] }, { icon: Settings, label: "Pengaturan", path: "/settings", roles: ["admin"] }, ]; export default function AppLayout({ children }: { children: ReactNode }) { const { user, logout } = useAuth(); const location = useLocation(); const navigate = useNavigate(); const isMobile = useIsMobile(); const [collapsed, setCollapsed] = useState(false); const [mobileOpen, setMobileOpen] = useState(false); const activeItem = menuItems.find((item) => item.path === location.pathname); const filteredItems = menuItems.filter( (item) => !item.roles || (user?.role && item.roles.includes(user.role)) ); const sidebarWidth = collapsed ? 72 : 260; const renderSidebar = () => (
{/* Header */}
{!collapsed && (

WebGIS Poverty

Mapping System

)}
{/* Navigation */} {/* Footer - User */}
{user?.name} {user?.email} navigate("/settings")}> Pengaturan Keluar {/* Collapse toggle */} {!isMobile && ( )}
); return (
{/* Sidebar - Desktop */} {!isMobile && (
{renderSidebar()}
)} {/* Sidebar - Mobile */} {isMobile && (
{renderSidebar()}
)} {/* Main Content */}
{/* Mobile Header */} {isMobile && (
{activeItem?.label || "WebGIS"}
)} {/* Desktop Header */} {!isMobile && (

{activeItem?.label || ""}

{user?.role}
)} {/* Page Content */}
{children}
); }