import { MenuItem, Select, SelectChangeEvent } from "@mui/material"; import { DeviceRelay } from "../api/DeviceApi"; import { RelayApi, RelayStatus, SetRelayForcedState } from "../api/RelayApi"; import { TimeWidget } from "./TimeWidget"; import { useLoadingMessage } from "../hooks/context_providers/LoadingMessageProvider"; import { useAlert } from "../hooks/context_providers/AlertDialogProvider"; import { useSnackbar } from "../hooks/context_providers/SnackbarProvider"; import React from "react"; import { SelectForcedStateDurationDialog } from "../dialogs/SelectForcedStateDurationDialog"; export function RelayForcedState(p: { relay: DeviceRelay; state: RelayStatus; onUpdated: () => void; }): React.ReactElement { const loadingMessage = useLoadingMessage(); const alert = useAlert(); const snackbar = useSnackbar(); const [futureStateType, setFutureStateType] = React.useState< string | undefined >(); const handleChange = (event: SelectChangeEvent) => { if (event.target.value == "None") { submitChange({ type: "None" }); } else { setFutureStateType(event.target.value); } }; const submitChange = async (state: SetRelayForcedState) => { try { loadingMessage.show("Setting forced state..."); await RelayApi.SetForcedState(p.relay, state); p.onUpdated(); snackbar("Forced state successfully updated!"); } catch (e) { console.error(`Failed to set relay forced state! ${e}`); alert(`Failed to set loading state for relay! ${e}`); } finally { loadingMessage.hide(); } }; return ( <> {p.state.forced_state.type !== "None" && ( <> left )} {futureStateType !== undefined && ( setFutureStateType(undefined)} onSubmit={(d) => submitChange({ type: futureStateType as any, for_secs: d, }) } /> )} ); }