import { Fragment, useCallback } from "react"; import { useNavigate } from "react-router-dom"; import { ArrowLeftEndOnRectangleIcon, ChevronDownIcon } from "@heroicons/react/16/solid"; import { Menu, MenuButton } from "@headlessui/react"; import { LuMonitorSmartphone } from "react-icons/lu"; import Container from "@/components/Container"; import Card from "@/components/Card"; import { cx } from "@/cva.config"; import { useHidStore, useRTCStore, useUserStore } from "@/hooks/stores"; import LogoBlueIcon from "@/assets/logo-blue.svg"; import LogoWhiteIcon from "@/assets/logo-white.svg"; import USBStateStatus from "@components/USBStateStatus"; import PeerConnectionStatusCard from "@components/PeerConnectionStatusCard"; import { CLOUD_API, DEVICE_API } from "@/ui.config"; import api from "../api"; import { isOnDevice } from "../main"; import { Button, LinkButton } from "./Button"; 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(state => state.usbState); return (