import { Autocomplete, Box, Button, DialogActions, DialogContent, DialogContentText, DialogTitle, TextField, Stepper, Step, StepLabel, InputAdornment, Typography, useTheme } from "@mui/material"; import ResponsiveDialog from "common/ResponsiveDialog"; import { useComponentAPI, useInteractionsAPI } from "hooks"; import { Component, Device, Interaction } from "models"; import { Ambient } from "models/Ambient"; import { Controller } from "models/Controller"; import { DevicePreset } from "models/DevicePreset"; import { GrainCable } from "models/GrainCable"; import { Plenum } from "models/Plenum"; import { pond } from "protobuf-ts/pond"; import { quack } from "protobuf-ts/quack"; import { useGlobalState } from "providers"; import React from "react"; import { useEffect, useState } from "react"; import ConditioningSelector from "./conditioningSelector"; import CableTopNodeSummary from "bin/CableTopNodeSummary"; import { ComponentSet } from "./pickComponentSet"; import { sameComponentID } from "pbHelpers/Component"; import moment from "moment"; import { lowerCase } from "lodash"; import { describeMeasurement } from "pbHelpers/MeasurementDescriber"; import { GetGrainExtensionMap } from "grain"; import { PromiseProgress, Stage, Step as PromiseStep } from "common/PromiseProgress"; interface Props { open: boolean onClose: (refresh: boolean) => void binKey: string; devices: Device[]; binMode: pond.BinMode; grain?: pond.Grain; preferences?: Map; binCables?: GrainCable[]; compDevMap?: Map; presets?: DevicePreset[]; startChange: () => void; changeComplete: () => void; defaultTargetMoisture?: number; changeTargetMoisture?: (newTarget: number) => void defaultOutdoorTemp?: number; changeOutdoorTemp?: (newTemp: number) => void defaultOutdoorHumidity?: number; changeOutdoorHumidity?: (newHumidity: number) => void } interface Option { label: string; device: Device; icon?: string; } interface DialogStep { label: string; completed?: boolean; } export default function ModeChangeDialog(props: Props){ const { open, onClose, binMode, devices, binKey, preferences, binCables, compDevMap, grain, startChange, changeComplete, defaultTargetMoisture, defaultOutdoorTemp, defaultOutdoorHumidity, changeTargetMoisture, changeOutdoorTemp, changeOutdoorHumidity, presets } = props const [{as, user}] = useGlobalState() const [componentSets, setComponentSets] = useState([]) const interactionAPI = useInteractionsAPI() const componentAPI = useComponentAPI(); const [selectedDevice, setSelectedDevice] = useState() const [existingInteractions, setExistingInteractions] = useState([]) const [loading, setLoading] = useState(false) const [options, setOptions] = useState([]) const [deviceComponents, setDeviceComponents] = useState>( new Map() ); const [plenums, setPlenums] = useState([]) const [ambients, setAmbients] = useState([]) const [heaters, setHeaters] = useState([]) const [fans, setFans] = useState([]) const grainExtensionMap = GetGrainExtensionMap(); const [conflictingSetInteractions, setConflictingSetInteractions] = useState([]) const [interactionsToAdd, setInteractionsToAdd] = useState() const [promiseStages, setPromiseStages] = useState([]) const [dialogSteps, setDialogSteps] = useState([]) const [currentStep, setCurrentStep] = useState(0) const theme = useTheme() //the state variables for the moisture const [moistureInput, setMoistureInput] = useState("") const [outdoorTempInput, setOutdoorTempInput] = useState("") const [outdoorHumidityInput, setOutdoorHumidityInput] = useState("") const [deviceOption, setDeviceOption] = useState