diff --git a/src/bin/BinControllerDisplay.tsx b/src/bin/BinControllerDisplay.tsx index 9744ad2..32cbd94 100644 --- a/src/bin/BinControllerDisplay.tsx +++ b/src/bin/BinControllerDisplay.tsx @@ -4,7 +4,7 @@ import { makeStyles } from "@mui/styles"; import { Box, Button, DialogActions, DialogContent, DialogTitle, Typography } from "@mui/material"; import AerationFanIcon from "products/AgIcons/AerationFanIcon"; import { quack } from "protobuf-ts/quack"; -import { useComponentAPI, useMobile } from "hooks"; +import { useComponentAPI, useMobile, useSnackbar } from "hooks"; import ButtonGroup from "common/ButtonGroup"; import ObjectHeaterIcon from "products/Construction/ObjectHeaterIcon"; import ResponsiveDialog from "common/ResponsiveDialog"; @@ -13,6 +13,7 @@ import ResponsiveDialog from "common/ResponsiveDialog"; interface Props { deviceID: number component: Component + currentState?: boolean } const useStyles = makeStyles(() => { @@ -27,10 +28,11 @@ const useStyles = makeStyles(() => { }) export default function BinControllerDisplay(props: Props) { - const {component, deviceID} = props + const {component, deviceID, currentState} = props const [controllerState, setControllerState] = useState(0) const [openDialog, setOpenDialog] = useState(false) const [newOutputState, setNewOutputState] = useState(0) + const {openSnack} = useSnackbar() const componentAPI = useComponentAPI() const isMobile = useMobile() const classes = useStyles() @@ -51,6 +53,14 @@ export default function BinControllerDisplay(props: Props) { const setController = () => { let newSettings = component.settings newSettings.defaultOutputState = newOutputState + componentAPI.update(deviceID, newSettings).then(resp => { + openSnack("Updated controllers output state") + setControllerState(newOutputState) + }).catch(err => { + openSnack("There was a problem updating the controller") + }).finally(() => { + setOpenDialog(false) + }) } const controllerDialog = () => { @@ -62,39 +72,47 @@ export default function BinControllerDisplay(props: Props) { - + ) } const componentOn = () => { - let state = false - console.log(component.status) - component.status.lastGoodMeasurement.forEach(um => { - if(um.type === quack.MeasurementType.MEASUREMENT_TYPE_BOOLEAN){ - if(um.values.length > 0){ - let readings = um.values - if(readings[readings.length-1].values.length > 0){ - let nodes = readings[readings.length-1].values - if (nodes[nodes.length -1] === 1){ - state = true + if(currentState){ + return currentState + }else{ + let state = false + component.status.lastGoodMeasurement.forEach(um => { + if(um.type === quack.MeasurementType.MEASUREMENT_TYPE_BOOLEAN){ + if(um.values.length > 0){ + let readings = um.values + if(readings[readings.length-1].values.length > 0){ + let nodes = readings[readings.length-1].values + if (nodes[nodes.length -1] === 1){ + state = true + } } - //um.values[um.values.length-1].values[um.values[um.values.length-1].values.length-1] } } - } - }) - return state + }) + return state + } } return ( - + + {controllerDialog()} + - {controllerIcon()} + + {controllerIcon()} + + {componentOn() ? "ON" : "OFF"} + + ) } \ No newline at end of file diff --git a/src/bin/BinVisualizerV2.tsx b/src/bin/BinVisualizerV2.tsx index cfdff05..c51908a 100644 --- a/src/bin/BinVisualizerV2.tsx +++ b/src/bin/BinVisualizerV2.tsx @@ -1556,7 +1556,7 @@ export default function BinVisualizer(props: Props) { let device = componentDevices.get(fan.key) if(fanComp && device){ return ( - + ) } })} @@ -1565,7 +1565,7 @@ export default function BinVisualizer(props: Props) { let device = componentDevices.get(heater.key) if(heaterComp && device){ return ( - + ) } })}