import React, { useEffect, useState } from "react"; import { Redirect } from "react-router"; import { useLocation } from "react-router-dom"; import { Button, Checkbox, FormControlLabel, FormGroup, FormLabel, Radio, RadioGroup, TextField, } from "@material-ui/core"; import useStyles from "../../useStyles"; import { useFleetContext, FleetProvider } from "../../Contexts/FleetContext"; import { useStatusContext } from "../../Contexts/StatusContext"; import { useUserContext } from "../../Contexts/UserContext"; import { logger } from "../../../services/monitoring"; const MainForm = () => { const queries = new URLSearchParams(useLocation().search); const { fleet, getFleet, updateFleet, busy } = useFleetContext(); const { token: { idToken: { jwtToken: token }, }, } = useUserContext(); const { setMessage, setTitle, setSitePath } = useStatusContext(); const [redirect, setRedirect] = useState(null); const classes = useStyles(); const [name, setName] = useState(queries.get("name") ?? ""); const [oldName] = useState(name); const [selectedLogLevel, setSelectedLogLevel] = useState("info"); const [canbusEnabled, setCANBusEnabled] = useState(true); const [dataLoggerEnabled, setDataLoggerEnabled] = useState(false); const [maxMemBufferSize, setMaxMemBufferSize] = useState(0); const [maxDiskBufferSize, setMaxDiskBufferSize] = useState(0); useEffect(() => { setTitle("Update Fleet"); setSitePath([ { label: `Fleet ${name}`, link: "/fleets", }, { label: "Update Fleet", }, ]); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); useEffect(() => { (async () => { try { if (!name || !token) return; await getFleet(oldName, token); } catch (e) { setMessage(e.message); logger.warn(e.stack); } })(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [token]); useEffect(() => { setSelectedLogLevel(fleet.log_level ?? selectedLogLevel); if (fleet.canbus) { setCANBusEnabled(fleet.canbus.enabled ?? canbusEnabled); setDataLoggerEnabled( fleet.canbus.data_logger_enabled ?? dataLoggerEnabled ); setMaxMemBufferSize(fleet.canbus.max_mem_buffer_size ?? maxMemBufferSize); setMaxDiskBufferSize( fleet.canbus.max_disk_buffer_size ?? maxDiskBufferSize ); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [fleet]); const onNameChange = (event) => { setName(event.target.value); }; const onLogLevelChange = (event) => { setSelectedLogLevel(event.target.value); }; const onCANBusChange = (event) => { setCANBusEnabled(event.target.checked); }; const onDataLoggerChange = (event) => { setDataLoggerEnabled(event.target.checked); }; const onMaxMemBufferSizeChange = (event) => { setMaxMemBufferSize(event.target.value); }; const onMaxDiskBufferSizeChange = (event) => { setMaxDiskBufferSize(event.target.value); }; const onSubmit = async (event) => { try { event.preventDefault(); const formData = { name: name, log_level: selectedLogLevel, canbus: { enabled: canbusEnabled, data_logger_enabled: canbusEnabled ? dataLoggerEnabled : false, max_mem_buffer_size: canbusEnabled ? parseInt(maxMemBufferSize) : 0, max_disk_buffer_size: canbusEnabled && dataLoggerEnabled ? parseInt(maxDiskBufferSize) : 0, }, }; const result = await updateFleet(oldName, formData, token); if (!result || result.error) return; setMessage(`Updated ${result.name}`); setRedirect(`/fleet/${result.name}`); } catch (e) { setMessage(e.message); logger.warn(e.stack); } }; if (redirect && redirect.length > 0) { return ; } return (
Log Level } label="Trace" /> } label="Debug" /> } label="Info" /> } label="Warning" /> } label="Error" /> } label="Critical" /> CAN Bus } label="CAN Bus Enabled" /> } label="Data Logger Enabled" />
); }; const FleetUpdateForm = (props) => ( ); export default FleetUpdateForm;