import { useCallback, useEffect, useState } from "react"; import { LuPower } from "react-icons/lu"; import { m } from "@localizations/messages.js"; import { JsonRpcResponse, useJsonRpc } from "@/hooks/useJsonRpc"; import { Button } from "@components/Button"; import Card from "@components/Card"; import { SettingsPageHeader } from "@components/SettingsPageheader"; import FieldLabel from "@components/FieldLabel"; import LoadingSpinner from "@components/LoadingSpinner"; import {SelectMenuBasic} from "@components/SelectMenuBasic"; import notifications from "@/notifications"; interface DCPowerState { isOn: boolean; voltage: number; current: number; power: number; restoreState: number; } export function DCPowerControl() { const { send } = useJsonRpc(); const [powerState, setPowerState] = useState(null); const getDCPowerState = useCallback(() => { send("getDCPowerState", {}, (resp: JsonRpcResponse) => { if ("error" in resp) { notifications.error(m.dc_power_control_get_state_error({ error: resp.error.data || m.unknown_error() })); return; } setPowerState(resp.result as DCPowerState); }); }, [send]); const handlePowerToggle = (enabled: boolean) => { send("setDCPowerState", { enabled }, (resp: JsonRpcResponse) => { if ("error" in resp) { notifications.error(m.dc_power_control_set_power_state_error({ enabled: enabled, error: resp.error.data || m.unknown_error() })); return; } getDCPowerState(); // Refresh state after change }); }; const handleRestoreChange = (state: number) => { // const state = powerState?.restoreState === 0 ? 1 : powerState?.restoreState === 1 ? 2 : 0; send("setDCRestoreState", { state }, (resp: JsonRpcResponse) => { if ("error" in resp) { notifications.error(m.dc_power_control_set_restore_state_error({ state: state, error: resp.error.data || m.unknown_error() })); return; } getDCPowerState(); // Refresh state after change }); }; useEffect(() => { getDCPowerState(); // Set up polling interval to update status const interval = setInterval(getDCPowerState, 1000); return () => clearInterval(interval); }, [getDCPowerState]); return (
{powerState === null ? ( ) : (
{/* Power Controls */}
{powerState.restoreState > -1 ? (
handleRestoreChange(parseInt(e.target.value))} options={[ { value: '0', label: m.dc_power_control_power_off_state()}, { value: '1', label: m.dc_power_control_power_on_state()}, { value: '2', label: m.dc_power_control_restore_last_state()}, ]} />
) : null}
{/* Status Display */}

{powerState.voltage.toFixed(1)} {m.dc_power_control_voltage_unit()}

{powerState.current.toFixed(1)} {m.dc_power_control_current_unit()}

{powerState.power.toFixed(1)} {m.dc_power_control_power_unit()}

)}
); }