import { cn } from "@core/utils/cn.ts"; import { CpuIcon, Languages, type LucideIcon, Palette, PenLine, Search as SearchIcon, ZapIcon, } from "lucide-react"; import BatteryStatus from "./BatteryStatus.tsx"; import { Subtle } from "./UI/Typography/Subtle.tsx"; import { Avatar } from "./UI/Avatar.tsx"; import type { DeviceMetrics } from "./types.ts"; import { Button } from "./UI/Button.tsx"; import React, { Fragment } from "react"; import { useTranslation } from "react-i18next"; import ThemeSwitcher from "./ThemeSwitcher.tsx"; import LanguageSwitcher from "./LanguageSwitcher.tsx"; interface DeviceInfoPanelProps { isCollapsed: boolean; deviceMetrics: DeviceMetrics; firmwareVersion: string; user: { shortName: string; longName: string; }; setDialogOpen: () => void; setCommandPaletteOpen: () => void; disableHover?: boolean; } interface InfoDisplayItem { id: string; label: string; icon?: LucideIcon; customComponent?: React.ReactNode; value?: string | number | null; } interface ActionButtonConfig { id: string; label: string; icon: LucideIcon; onClick?: () => void; render?: () => React.ReactNode; } export const DeviceInfoPanel = ({ deviceMetrics, firmwareVersion, user, isCollapsed, setDialogOpen, setCommandPaletteOpen, disableHover = false, }: DeviceInfoPanelProps) => { const { t } = useTranslation(); const { batteryLevel, voltage } = deviceMetrics; const deviceInfoItems: InfoDisplayItem[] = [ { id: "battery", label: t("batteryStatus.title"), customComponent: , value: batteryLevel !== undefined ? `${batteryLevel}%` : "N/A", }, { id: "voltage", label: t("batteryVoltage.title"), icon: ZapIcon, value: voltage !== undefined ? `${voltage?.toPrecision(3)} V` : t("unknown.notAvailable", "N/A"), }, { id: "firmware", label: t("sidebar.deviceInfo.firmware.title"), icon: CpuIcon, value: firmwareVersion ?? t("unknown.notAvailable", "N/A"), }, ]; const actionButtons: ActionButtonConfig[] = [ { id: "changeName", label: t("sidebar.deviceInfo.deviceName.changeName"), icon: PenLine, onClick: setDialogOpen, }, { id: "commandMenu", label: t("page.title", { ns: "commandPalette" }), icon: SearchIcon, onClick: setCommandPaletteOpen, }, { id: "theme", label: t("theme.changeTheme"), icon: Palette, render: () => , }, { id: "language", label: t("language.changeLanguage"), icon: Languages, render: () => , }, ]; return ( <>
{!isCollapsed && (

{user.longName}

)}
{!isCollapsed && (
)}
{deviceInfoItems.map((item) => { const IconComponent = item.icon; return (
{IconComponent && ( )} {item.customComponent} {item.id !== "battery" && ( {item.label}: {item.value} )}
); })}
{!isCollapsed && (
)}
{actionButtons.map((buttonItem) => { const Icon = buttonItem.icon; if (buttonItem.render) { return ( {buttonItem.render()} ); } return ( ); })}
); };