import { useState } from "react"; import { Form, useNavigation } from "@remix-run/react"; import { Avatar, AvatarFallback, AvatarImage } from "~/components/ui/avatar"; import { Button } from "~/components/ui/button"; import { Input } from "~/components/ui/input"; import { Badge } from "~/components/ui/badge"; import { ModeToggle } from "~/components/ui/dark-mode-toggle"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from "~/components/ui/dropdown-menu"; import { Sheet, SheetContent, SheetTrigger } from "~/components/ui/sheet"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from "~/components/ui/alert-dialog"; import { Menu, Search, Bell, Sun, Moon, User, Settings, LogOut, ChevronDown, MoreHorizontal, PanelLeftClose, PanelLeft, Loader2 } from "lucide-react"; import { SessionData } from "~/sessions.server"; // Import SessionData type interface PengelolaHeaderProps { onMenuClick: () => void; sidebarCollapsed: boolean; isMobile: boolean; user: SessionData; // Add user prop } export function PengelolaHeader({ onMenuClick, sidebarCollapsed, isMobile, user // Add user prop }: PengelolaHeaderProps) { const [showLogoutDialog, setShowLogoutDialog] = useState(false); const navigation = useNavigation(); const isLoggingOut = navigation.formAction === "/action/logout"; // Get user initials for avatar fallback const getUserInitials = (name: string) => { return name .split(" ") .map((n) => n[0]) .join("") .toUpperCase() .slice(0, 2); }; return ( <>
{/* Mobile header */}
{/* Hamburger menu button */} {/* Mobile logo */}
LOGO
{/* Mobile more menu */}
{/* Desktop header actions */}
{/* Theme toggle */} {/* Notifications */}

Notifications 3 new

New user registered

2 minutes ago

System update available

1 hour ago

New message received

3 hours ago

{/* User menu */}
{user.phone || "User"}
{user.email || "user@example.com"}
Profile Settings setShowLogoutDialog(true)} > Sign out
{/* Logout Confirmation Dialog */} Konfirmasi Logout Apakah Anda yakin ingin keluar dari akun? Anda perlu login kembali untuk mengakses dashboard. Batal
{isLoggingOut ? ( <> Logging out... ) : ( "Ya, Logout" )}
); }