import AddIcon from "@mui/icons-material/Add"; import DeleteIcon from "@mui/icons-material/Delete"; import EditIcon from "@mui/icons-material/Edit"; import { IconButton, ListItem, ListItemText, Tooltip, Typography, } from "@mui/material"; import React from "react"; import { Device, DeviceRelay } from "../../api/DeviceApi"; import { EditDeviceRelaysDialog } from "../../dialogs/EditDeviceRelaysDialog"; import { DeviceRouteCard } from "./DeviceRouteCard"; import { useConfirm } from "../../hooks/context_providers/ConfirmDialogProvider"; import { useLoadingMessage } from "../../hooks/context_providers/LoadingMessageProvider"; import { RelayApi, RelayStatus } from "../../api/RelayApi"; import { useSnackbar } from "../../hooks/context_providers/SnackbarProvider"; import { useAlert } from "../../hooks/context_providers/AlertDialogProvider"; import { AsyncWidget } from "../../widgets/AsyncWidget"; import { TimeWidget } from "../../widgets/TimeWidget"; import { BoolText } from "../../widgets/BoolText"; export function DeviceRelays(p: { device: Device; onReload: () => void; }): React.ReactElement { const confirm = useConfirm(); const loadingMessage = useLoadingMessage(); const snackbar = useSnackbar(); const alert = useAlert(); const [dialogOpen, setDialogOpen] = React.useState(false); const [currRelay, setCurrRelay] = React.useState(); const createNewRelay = () => { setDialogOpen(true); setCurrRelay(undefined); }; const updateRelay = async (r: DeviceRelay) => { setDialogOpen(true); setCurrRelay(r); }; const deleteRelay = async (r: DeviceRelay) => { if ( !(await confirm("Do you really want to delete this relay configuration?")) ) return; try { await RelayApi.Delete(r); p.onReload(); snackbar("The relay configuration was successfully deleted!"); } catch (e) { console.error("Failed to delete relay!", e); alert(`Failed to delete device relay configuration! ${e}`); } finally { loadingMessage.hide(); } }; return ( <> {dialogOpen && ( setDialogOpen(false)} relay={currRelay} onUpdated={() => { setDialogOpen(false); p.onReload(); }} /> )} = p.device.info.max_relays} > } > {p.device.relays.length === 0 ? ( No relay configured yet. ) : ( <> )} {p.device.relays.map((r, i) => ( updateRelay(r)}> {i === p.device.relays.length - 1 && ( deleteRelay(r)}> )} } > } /> ))} ); } function RelayEntryStatus( p: Readonly<{ relay: DeviceRelay }> ): React.ReactElement { const [state, setState] = React.useState(); const load = async () => { setState(await RelayApi.SingleStatus(p.relay)); }; return ( ( <> for{" "} )} /> ); }