import { useCallback } from "react"; import { useNavigate } from "react-router"; import { ArrowLeftEndOnRectangleIcon, ChevronDownIcon } from "@heroicons/react/16/solid"; import { Button, Menu, MenuButton, MenuItem, MenuItems } from "@headlessui/react"; import { LuMonitorSmartphone } from "react-icons/lu"; import LogoBlueIcon from "@assets/logo-blue.svg"; import LogoWhiteIcon from "@assets/logo-white.svg"; import { useHidStore, useRTCStore, useUserStore } from "@hooks/stores"; import Card from "@components/Card"; import Container from "@components/Container"; import { LinkButton } from "@components/Button"; import PeerConnectionStatusCard from "@components/PeerConnectionStatusCard"; import USBStateStatus from "@components/USBStateStatus"; import { CLOUD_API, DEVICE_API } from "@/ui.config"; import api from "@/api"; import { isOnDevice } from "@/main"; import { m } from "@localizations/messages.js"; interface NavbarProps { isLoggedIn: boolean; primaryLinks?: { title: string; to: string }[]; userEmail?: string; showConnectionStatus?: boolean; picture?: string; kvmName?: string; } export default function DashboardNavbar({ primaryLinks = [], isLoggedIn, showConnectionStatus, userEmail, picture, kvmName, }: NavbarProps) { const peerConnectionState = useRTCStore(state => state.peerConnectionState); const setUser = useUserStore(state => state.setUser); const navigate = useNavigate(); const onLogout = useCallback(async () => { const logoutUrl = isOnDevice ? `${DEVICE_API}/auth/logout` : `${CLOUD_API}/logout`; const res = await api.POST(logoutUrl); if (!res.ok) return; setUser(null); // The root route will redirect to appropriate login page, be it the local one or the cloud one navigate("/"); }, [navigate, setUser]); const { usbState } = useHidStore(); // for testing //userEmail = "user@example.org"; //picture = "https://placehold.co/32x32" return (