import { SidebarSection } from "@components/UI/Sidebar/SidebarSection.js"; import { SidebarButton } from "@components/UI/Sidebar/sidebarButton.js"; import { Subtle } from "@components/UI/Typography/Subtle.js"; import { useDevice } from "@core/stores/deviceStore.js"; import type { Page } from "@core/stores/deviceStore.js"; import { EditIcon, LayersIcon, LucideIcon, MapIcon, MessageSquareIcon, SettingsIcon, UsersIcon, ZapIcon, BatteryMediumIcon } from "lucide-react"; export interface SidebarProps { children?: React.ReactNode; } export const Sidebar = ({ children }: SidebarProps): JSX.Element => { const { hardware, nodes } = useDevice(); const myNode = nodes.get(hardware.myNodeNum); const { activePage, setActivePage, setDialogOpen } = useDevice(); interface NavLink { name: string; icon: LucideIcon; page: Page; } const pages: NavLink[] = [ { name: "Messages", icon: MessageSquareIcon, page: "messages", }, { name: "Map", icon: MapIcon, page: "map", }, { name: "Config", icon: SettingsIcon, page: "config", }, { name: "Channels", icon: LayersIcon, page: "channels", }, { name: "Nodes", icon: UsersIcon, page: "nodes", }, ]; return (
{myNode?.user?.shortName ?? "UNK"} {myNode?.user?.longName ?? "UNK"}
{myNode?.deviceMetrics?.batteryLevel ?? "UNK"}%
{myNode?.deviceMetrics?.voltage.toPrecision(3) ?? "UNK"} volts
{pages.map((link) => ( { setActivePage(link.page); }} active={link.page === activePage} /> ))} {children}
); };