import NavigateBeforeIcon from "@mui/icons-material/NavigateBefore"; import NavigateNextIcon from "@mui/icons-material/NavigateNext"; import RefreshIcon from "@mui/icons-material/Refresh"; import { IconButton, Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Tooltip, Typography, } from "@mui/material"; import { DatePicker } from "@mui/x-date-pickers"; import dayjs from "dayjs"; import React from "react"; import { LogEntry, LogsAPI } from "../api/LogsAPI"; import { AsyncWidget } from "../widgets/AsyncWidget"; import { SolarEnergyRouteContainer } from "../widgets/SolarEnergyRouteContainer"; export function LogsRoute(): React.ReactElement { const loadKey = React.useRef(1); const [currDate, setCurrDate] = React.useState(dayjs()); const [logs, setLogs] = React.useState(); const load = async () => { const logs = await LogsAPI.GetLogs(currDate); logs.reverse(); setLogs(logs); }; const reload = () => { setLogs(undefined); loadKey.current += 1; }; return ( } >
setCurrDate(currDate.add(-1, "day"))}> setCurrDate(d === null ? currDate : d)} /> setCurrDate(currDate.add(1, "day"))}>
} />
); } function LogsView(p: { logs: LogEntry[] }): React.ReactElement { if (p.logs.length == 0) { return ( There was no log recorded on this day. ); } return ( Device ID Time Severity Message {p.logs.map((row, id) => ( {row.device_id ?? "Backend"} {new Date(row.time * 1000).toLocaleTimeString()} {row.severity} {row.message} ))}
); }