import { useEffect, useState } from "react"; import { useJsonRpc } from "@/hooks/useJsonRpc"; import Card, { GridCard } from "@components/Card"; import { SectionHeader } from "@components/SectionHeader"; import { Button } from "../Button"; import { LuPower, LuTerminal, LuPlugZap } from "react-icons/lu"; import { ATXPowerControl } from "@components/extensions/ATXPowerControl"; import { DCPowerControl } from "@components/extensions/DCPowerControl"; import { SerialConsole } from "@components/extensions/SerialConsole"; import notifications from "../../notifications"; interface Extension { id: string; name: string; description: string; icon: any; } const AVAILABLE_EXTENSIONS: Extension[] = [ { id: "atx-power", name: "ATX Power Control", description: "Control your ATX Power extension", icon: LuPower, }, { id: "dc-power", name: "DC Power Control", description: "Control your DC Power extension", icon: LuPlugZap, }, { id: "serial-console", name: "Serial Console", description: "Access your serial console extension", icon: LuTerminal, }, ]; export default function ExtensionPopover() { const [send] = useJsonRpc(); const [activeExtension, setActiveExtension] = useState(null); // Load active extension on component mount useEffect(() => { send("getActiveExtension", {}, resp => { 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 => { if ("error" in resp) { notifications.error(`Failed to set active extension: ${resp.error.data || "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}

))}
)}
); }