import { useEffect, useState } from "react"; import { LuPower, LuTerminal, LuPlugZap } from "react-icons/lu"; import { m } from "@localizations/messages.js"; import { JsonRpcResponse, useJsonRpc } from "@hooks/useJsonRpc"; import Card, { GridCard } from "@components/Card"; import { SettingsPageHeader } from "@components/SettingsPageheader"; import { ATXPowerControl } from "@components/extensions/ATXPowerControl"; import { DCPowerControl } from "@components/extensions/DCPowerControl"; import { SerialConsole } from "@components/extensions/SerialConsole"; import { Button } from "@components/Button"; import notifications from "@/notifications"; interface Extension { id: string; name: string; description: string; icon: React.ElementType; } const AVAILABLE_EXTENSIONS: Extension[] = [ { id: "atx-power", name: m.extensions_atx_power_control(), description: m.extensions_atx_power_control_description(), icon: LuPower, }, { id: "dc-power", name: m.extensions_dc_power_control(), description: m.extensions_dc_power_control(), icon: LuPlugZap, }, { id: "serial-console", name: m.extension_serial_console(), description: m.extension_serial_console_description(), icon: LuTerminal, }, ]; export default function ExtensionPopover() { const { send } = useJsonRpc(); const [activeExtension, setActiveExtension] = useState(null); // Load active extension on component mount useEffect(() => { send("getActiveExtension", {}, (resp: JsonRpcResponse) => { if ("error" in resp) return; const extensionId = resp.result as string; if (extensionId) { const extension = AVAILABLE_EXTENSIONS.find(ext => ext.id === extensionId); if (extension) { setActiveExtension(extension); } } }); }, [send]); const handleSetActiveExtension = (extension: Extension | null) => { send("setActiveExtension", { extensionId: extension?.id || "" }, (resp: JsonRpcResponse) => { if ("error" in resp) { notifications.error( m.extension_popover_set_error_notification({ error: resp.error.data || m.unknown_error() }), ); return; } setActiveExtension(extension); }); }; const renderActiveExtension = () => { switch (activeExtension?.id) { case "atx-power": return ; case "dc-power": return ; case "serial-console": return ; default: return null; } }; return (
{activeExtension ? ( // Extension Control View
{renderActiveExtension()}
) : ( // Extensions List View
{AVAILABLE_EXTENSIONS.map(extension => (

{extension.name}

{extension.description}

))}
)}
); }