hooked up the mode change stuff for the new summary
This commit is contained in:
parent
f54d4b5375
commit
0f4d706e76
4 changed files with 107 additions and 13 deletions
|
|
@ -21,9 +21,11 @@ interface Props {
|
||||||
permissions: pond.Permission[]
|
permissions: pond.Permission[]
|
||||||
componentDevices: Map<string, number>
|
componentDevices: Map<string, number>
|
||||||
componentMap: Map<string, Component>
|
componentMap: Map<string, Component>
|
||||||
|
binPrefs?: Map<string, pond.BinComponentPreferences>
|
||||||
|
updateBinCallback?: (bin: Bin) => void
|
||||||
}
|
}
|
||||||
export default function BinSummary(props: Props){
|
export default function BinSummary(props: Props){
|
||||||
const {bin, devices, fans, heaters, permissions, componentDevices, componentMap} = props
|
const {bin, devices, fans, heaters, permissions, componentDevices, componentMap, binPrefs, updateBinCallback} = props
|
||||||
const [currentDevice, setCurrentDevice] = useState<Device | undefined>(undefined)
|
const [currentDevice, setCurrentDevice] = useState<Device | undefined>(undefined)
|
||||||
const isMobile = useMobile()
|
const isMobile = useMobile()
|
||||||
|
|
||||||
|
|
@ -155,7 +157,17 @@ export default function BinSummary(props: Props){
|
||||||
<Grid2 container spacing={2}>
|
<Grid2 container spacing={2}>
|
||||||
<Grid2 size={isMobile ? 12 : 7}>
|
<Grid2 size={isMobile ? 12 : 7}>
|
||||||
<Card raised>
|
<Card raised>
|
||||||
<Bin3dVisualizer bin={bin} fans={fans} heaters={heaters} permissions={permissions} devices={devices} componentDevices={componentDevices} componentMap={componentMap}/>
|
<Bin3dVisualizer
|
||||||
|
bin={bin}
|
||||||
|
fans={fans}
|
||||||
|
heaters={heaters}
|
||||||
|
permissions={permissions}
|
||||||
|
devices={devices}
|
||||||
|
componentDevices={componentDevices}
|
||||||
|
componentMap={componentMap}
|
||||||
|
binPrefs={binPrefs}
|
||||||
|
updateBinCallback={updateBinCallback}
|
||||||
|
/>
|
||||||
</Card>
|
</Card>
|
||||||
</Grid2>
|
</Grid2>
|
||||||
<Grid2 size={isMobile ? 12 : 5}>
|
<Grid2 size={isMobile ? 12 : 5}>
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@ import { useState } from "react";
|
||||||
import NodeControls from "./nodeControls";
|
import NodeControls from "./nodeControls";
|
||||||
import { NodeData } from "bin/3dView/Data/BuildNodeData";
|
import { NodeData } from "bin/3dView/Data/BuildNodeData";
|
||||||
import { CableData } from "bin/3dView/Data/BuildCableData";
|
import { CableData } from "bin/3dView/Data/BuildCableData";
|
||||||
|
import ModeChangeDialog from "bin/conditioning/modeChangeDialog";
|
||||||
|
import { cloneDeep } from "lodash";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
bin: Bin
|
bin: Bin
|
||||||
|
|
@ -18,23 +20,27 @@ interface Props {
|
||||||
permissions: pond.Permission[]
|
permissions: pond.Permission[]
|
||||||
componentDevices: Map<string, number>
|
componentDevices: Map<string, number>
|
||||||
componentMap: Map<string, Component>
|
componentMap: Map<string, Component>
|
||||||
|
binPrefs?: Map<string, pond.BinComponentPreferences>
|
||||||
|
updateBinCallback?: (bin: Bin) => void
|
||||||
}
|
}
|
||||||
export default function bin3dVisualizer(props: Props){
|
export default function bin3dVisualizer(props: Props){
|
||||||
const {bin, fans, heaters, permissions, devices, componentDevices, componentMap} = props
|
const {bin, fans, heaters, permissions, devices, componentDevices, componentMap, binPrefs, updateBinCallback} = props
|
||||||
const [showHeatmap, setShowHeatmap] = useState(true)
|
const [showHeatmap, setShowHeatmap] = useState(true)
|
||||||
const [showHotspots, setShowHotspots] = useState(false)
|
// const [showHotspots, setShowHotspots] = useState(false)
|
||||||
const [showFill, setShowFill] = useState(false)
|
// const [showFill, setShowFill] = useState(false)
|
||||||
const [showTemp, setShowTemp] = useState(true)
|
const [showTemp, setShowTemp] = useState(true)
|
||||||
const [showMoisture, setShowMoisture] = useState(false)
|
const [showMoisture, setShowMoisture] = useState(false)
|
||||||
const [showMoistureHeatmap, setShowMoistureHeatmap] = useState(false)
|
const [showMoistureHeatmap, setShowMoistureHeatmap] = useState(false)
|
||||||
const [binDisplay, setBinDisplay] = useState<string>("temp")
|
const [binDisplay, setBinDisplay] = useState<string>("temp")
|
||||||
const [binMode, setBinMode] = useState<pond.BinMode>(pond.BinMode.BIN_MODE_NONE)
|
const [binMode, setBinMode] = useState<pond.BinMode>(pond.BinMode.BIN_MODE_NONE)
|
||||||
|
const [openModeChange, setOpenModeChange] = useState(false)
|
||||||
const [selectedCable, setSelectedCable] = useState<CableData | undefined>(undefined)
|
const [selectedCable, setSelectedCable] = useState<CableData | undefined>(undefined)
|
||||||
const [selectedNode, setSelectedNode] = useState<NodeData | undefined>(undefined)
|
const [selectedNode, setSelectedNode] = useState<NodeData | undefined>(undefined)
|
||||||
const [selectedCableDevice, setSelectedCableDevice] = useState(Device.create()) //this is the device that the cable that has the node that was clicked on belongs to
|
const [selectedCableDevice, setSelectedCableDevice] = useState(Device.create()) //this is the device that the cable that has the node that was clicked on belongs to
|
||||||
const [filteredComponents, setFilteredComponents] = useState<Component[]>([]) //components that are filtered to only include ones on the same device
|
const [filteredComponents, setFilteredComponents] = useState<Component[]>([]) //components that are filtered to only include ones on the same device
|
||||||
const [openNodeControls, setOpenNodeControls] = useState(false)
|
const [openNodeControls, setOpenNodeControls] = useState(false)
|
||||||
const [devMap, setDevMap] = useState<Map<number, Device>>(new Map())
|
const [devMap, setDevMap] = useState<Map<number, Device>>(new Map())
|
||||||
|
const [modeChangeInProgress, setModeChangeInProgress] = useState(false)
|
||||||
|
|
||||||
useEffect(()=>{
|
useEffect(()=>{
|
||||||
let newMap: Map<number, Device> = new Map()
|
let newMap: Map<number, Device> = new Map()
|
||||||
|
|
@ -48,6 +54,14 @@ export default function bin3dVisualizer(props: Props){
|
||||||
setBinMode(bin.settings.mode)
|
setBinMode(bin.settings.mode)
|
||||||
},[bin])
|
},[bin])
|
||||||
|
|
||||||
|
const updateBin = () => {
|
||||||
|
if(updateBinCallback){
|
||||||
|
let clone = cloneDeep(bin)
|
||||||
|
clone.settings.mode = binMode
|
||||||
|
updateBinCallback(clone)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const binModeControl = () => {
|
const binModeControl = () => {
|
||||||
return (
|
return (
|
||||||
<Box>
|
<Box>
|
||||||
|
|
@ -55,6 +69,7 @@ export default function bin3dVisualizer(props: Props){
|
||||||
<FormControl fullWidth>
|
<FormControl fullWidth>
|
||||||
<Select
|
<Select
|
||||||
value={binMode}
|
value={binMode}
|
||||||
|
disabled={modeChangeInProgress}
|
||||||
sx={{
|
sx={{
|
||||||
borderRadius: 1,
|
borderRadius: 1,
|
||||||
bgcolor: 'rgba(255,255,255,0.08)',
|
bgcolor: 'rgba(255,255,255,0.08)',
|
||||||
|
|
@ -68,6 +83,7 @@ export default function bin3dVisualizer(props: Props){
|
||||||
onChange={event => {
|
onChange={event => {
|
||||||
console.log("change bin mode")
|
console.log("change bin mode")
|
||||||
setBinMode(event.target.value as pond.BinMode)
|
setBinMode(event.target.value as pond.BinMode)
|
||||||
|
setOpenModeChange(true)
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<MenuItem value={pond.BinMode.BIN_MODE_STORAGE}>Storage</MenuItem>
|
<MenuItem value={pond.BinMode.BIN_MODE_STORAGE}>Storage</MenuItem>
|
||||||
|
|
@ -227,14 +243,47 @@ export default function bin3dVisualizer(props: Props){
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
|
<ModeChangeDialog
|
||||||
|
binKey={bin.key()}
|
||||||
|
binMode={binMode}
|
||||||
|
grain={bin.settings.inventory?.grainType}
|
||||||
|
devices={devices}
|
||||||
|
open={openModeChange}
|
||||||
|
compDevMap={componentDevices}
|
||||||
|
preferences={binPrefs}
|
||||||
|
onClose={(refresh) => {
|
||||||
|
setOpenModeChange(false)
|
||||||
|
if(refresh) {
|
||||||
|
updateBin()
|
||||||
|
}else{
|
||||||
|
setBinMode(bin.settings.mode)
|
||||||
|
};
|
||||||
|
}}
|
||||||
|
defaultTargetMoisture={bin.settings.inventory?.initialMoisture}
|
||||||
|
// defaultOutdoorTemp={outdoorTemp}
|
||||||
|
// defaultOutdoorHumidity={outdoorHumidity}
|
||||||
|
// changeTargetMoisture={newMoisture => {
|
||||||
|
// setTargetMoisture(newMoisture)
|
||||||
|
// }}
|
||||||
|
// changeOutdoorTemp={newTemp => {
|
||||||
|
// setOutdoorTemp(newTemp)
|
||||||
|
// }}
|
||||||
|
// changeOutdoorHumidity={newHumidity => {
|
||||||
|
// setOutdoorHumidity(newHumidity)
|
||||||
|
// }}
|
||||||
|
startChange={() => {
|
||||||
|
setModeChangeInProgress(true)
|
||||||
|
}}
|
||||||
|
changeComplete={() => {
|
||||||
|
setModeChangeInProgress(false)
|
||||||
|
}}
|
||||||
|
|
||||||
|
/>
|
||||||
<Box position={"relative"} height={600}>
|
<Box position={"relative"} height={600}>
|
||||||
<Bin3dView
|
<Bin3dView
|
||||||
bin={bin}
|
bin={bin}
|
||||||
// cables={cables}
|
|
||||||
fillPercent={bin.fillPercent()/100}//expects a decimal between 0 and 1
|
fillPercent={bin.fillPercent()/100}//expects a decimal between 0 and 1
|
||||||
nodeClick={(node, cable) => {
|
nodeClick={(node, cable) => {
|
||||||
// console.log(node)
|
|
||||||
// console.log(cable)
|
|
||||||
//this will be how to control the dialog to update the top nodes and node exclusion etc (make new component called NodeControls for this)
|
//this will be how to control the dialog to update the top nodes and node exclusion etc (make new component called NodeControls for this)
|
||||||
//use the cable data to get the device it belongs to
|
//use the cable data to get the device it belongs to
|
||||||
let d = devMap.get(cable.grainCable.device)
|
let d = devMap.get(cable.grainCable.device)
|
||||||
|
|
@ -273,8 +322,8 @@ export default function bin3dVisualizer(props: Props){
|
||||||
showMoistureHeatmap={showMoistureHeatmap}
|
showMoistureHeatmap={showMoistureHeatmap}
|
||||||
showTemp={showTemp}
|
showTemp={showTemp}
|
||||||
showMoisture={showMoisture}
|
showMoisture={showMoisture}
|
||||||
showGrain={showFill}
|
// showGrain={showFill}
|
||||||
showHotspots={showHotspots}
|
// showHotspots={showHotspots}
|
||||||
xOffset={-150}
|
xOffset={-150}
|
||||||
/>
|
/>
|
||||||
<Box position={"absolute"} top={20} left={30} height={"80%"} width={"30%"} padding={2}>
|
<Box position={"absolute"} top={20} left={30} height={"80%"} width={"30%"} padding={2}>
|
||||||
|
|
|
||||||
17
src/bin/binSummary/components/binDetails.tsx
Normal file
17
src/bin/binSummary/components/binDetails.tsx
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
import { Box } from "@mui/material";
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function BinDetails (props: Props) {
|
||||||
|
|
||||||
|
|
||||||
|
//this is where we will have the tabs abd tab panels for the table view, alerts, interactions, and analysis
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Box>
|
||||||
|
|
||||||
|
</Box>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
@ -3,7 +3,7 @@ import PageContainer from "./PageContainer";
|
||||||
import { DevicePreset } from "models/DevicePreset";
|
import { DevicePreset } from "models/DevicePreset";
|
||||||
import { Controller } from "models/Controller";
|
import { Controller } from "models/Controller";
|
||||||
import { useNavigate, useParams } from "react-router-dom";
|
import { useNavigate, useParams } from "react-router-dom";
|
||||||
import { useMobile } from "hooks";
|
import { useMobile, useSnackbar } from "hooks";
|
||||||
import { Component, Device, Bin as IBin, Interaction } from "models";
|
import { Component, Device, Bin as IBin, Interaction } from "models";
|
||||||
import { useBinAPI, useGlobalState } from "providers";
|
import { useBinAPI, useGlobalState } from "providers";
|
||||||
import { pond } from "protobuf-ts/pond";
|
import { pond } from "protobuf-ts/pond";
|
||||||
|
|
@ -69,6 +69,7 @@ export default function BinV2(){
|
||||||
const [pressures, setPressures] = useState<Pressure[]>([]);
|
const [pressures, setPressures] = useState<Pressure[]>([]);
|
||||||
const [headspaceCO2, setHeadspaceCO2] = useState<CO2[]>([]);
|
const [headspaceCO2, setHeadspaceCO2] = useState<CO2[]>([]);
|
||||||
const [heaters, setHeaters] = useState<Controller[]>([]);
|
const [heaters, setHeaters] = useState<Controller[]>([]);
|
||||||
|
const {openSnack} = useSnackbar()
|
||||||
const [fans, setFans] = useState<Controller[]>([]);
|
const [fans, setFans] = useState<Controller[]>([]);
|
||||||
const [compositionNameMap, setCompositionNameMap] = useState<Map<string, string>>(new Map());
|
const [compositionNameMap, setCompositionNameMap] = useState<Map<string, string>>(new Map());
|
||||||
const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);
|
const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);
|
||||||
|
|
@ -432,7 +433,22 @@ export default function BinV2(){
|
||||||
return (
|
return (
|
||||||
<PageContainer>
|
<PageContainer>
|
||||||
{pageHeader()}
|
{pageHeader()}
|
||||||
<BinSummary bin={bin} devices={devices} fans={fans} heaters={heaters} permissions={permissions} componentDevices={componentDevices} componentMap={components}/>
|
<BinSummary
|
||||||
|
bin={bin}
|
||||||
|
devices={devices}
|
||||||
|
fans={fans}
|
||||||
|
heaters={heaters}
|
||||||
|
permissions={permissions}
|
||||||
|
componentDevices={componentDevices}
|
||||||
|
componentMap={components}
|
||||||
|
binPrefs={preferences}
|
||||||
|
updateBinCallback={(bin) => {
|
||||||
|
setBin(bin)
|
||||||
|
binAPI.updateBin(bin.key(), bin.settings).then(resp => {
|
||||||
|
openSnack("Bin has Been Updated")
|
||||||
|
})
|
||||||
|
}}
|
||||||
|
/>
|
||||||
{/* render drawers */}
|
{/* render drawers */}
|
||||||
{noteDrawer()}
|
{noteDrawer()}
|
||||||
{taskDrawer()}
|
{taskDrawer()}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue