import { Tooltip, IconButton, Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, } from "@mui/material"; import React from "react"; import { Device, DeviceApi } from "../api/DeviceApi"; import { AsyncWidget } from "../widgets/AsyncWidget"; import { SolarEnergyRouteContainer } from "../widgets/SolarEnergyRouteContainer"; import RefreshIcon from "@mui/icons-material/Refresh"; import { TimeWidget } from "../widgets/TimeWidget"; import DeleteIcon from "@mui/icons-material/Delete"; import { useAlert } from "../hooks/context_providers/AlertDialogProvider"; import { useConfirm } from "../hooks/context_providers/ConfirmDialogProvider"; import { useLoadingMessage } from "../hooks/context_providers/LoadingMessageProvider"; import { useSnackbar } from "../hooks/context_providers/SnackbarProvider"; export function DevicesRoute(): React.ReactElement { const loadKey = React.useRef(1); const [list, setList] = React.useState(); const load = async () => { setList(await DeviceApi.ValidatedList()); }; const reload = () => { loadKey.current += 1; setList(undefined); }; return ( } > } /> ); } function ValidatedDevicesList(p: { list: Device[]; onReload: () => void; }): React.ReactElement { const alert = useAlert(); const confirm = useConfirm(); const snackbar = useSnackbar(); const loadingMessage = useLoadingMessage(); const deleteDevice = async (d: Device) => { try { if ( !(await confirm( `Do you really want to delete the device ${d.id}? The operation cannot be reverted!` )) ) return; loadingMessage.show("Deleting device..."); await DeviceApi.Delete(d); snackbar("The device has been successfully deleted!"); p.onReload(); } catch (e) { console.error(`Failed to delete device! ${e})`); alert("Failed to delete device!"); } finally { loadingMessage.hide(); } }; if (p.list.length === 0) { return

There is no device validated yet.

; } return ( # Model Version Max number of relays Created Updated {p.list.map((dev) => ( {dev.id} {dev.info.reference} {dev.info.version} {dev.info.max_relays} deleteDevice(dev)}> ))}
); }