From aa346a6a5a03694820af59935ec5a375b39dd7e2 Mon Sep 17 00:00:00 2001 From: csawatzky Date: Fri, 10 Jul 2026 15:27:47 -0600 Subject: [PATCH] set up the bones for the humidity mode --- src/bin/binModes/BinModeController.tsx | 14 +- src/bin/binModes/DryingMode.tsx | 11 +- src/bin/binModes/HydratingMode.tsx | 401 ++++++++++++++++++++++++- 3 files changed, 415 insertions(+), 11 deletions(-) diff --git a/src/bin/binModes/BinModeController.tsx b/src/bin/binModes/BinModeController.tsx index 32dd6af..6c4fead 100644 --- a/src/bin/binModes/BinModeController.tsx +++ b/src/bin/binModes/BinModeController.tsx @@ -194,6 +194,7 @@ export default function BinModeController(props: Props) { //setNumSteps(DryingStepCount) return case pond.BinMode.BIN_MODE_HYDRATING: - return + return { + buildStages(deviceData) + setShowProgress(true) + }} + /> case pond.BinMode.BIN_MODE_COOLDOWN: return default: diff --git a/src/bin/binModes/DryingMode.tsx b/src/bin/binModes/DryingMode.tsx index d0f7bb0..716e726 100644 --- a/src/bin/binModes/DryingMode.tsx +++ b/src/bin/binModes/DryingMode.tsx @@ -1,5 +1,4 @@ -import { ArrowBack, ArrowForward } from "@mui/icons-material"; -import { Box, Theme, Stepper, Step, StepLabel, Typography, RadioGroup, Radio, FormControlLabel, Grid2, Button, Autocomplete, TextField, DialogTitle, DialogContent, DialogActions, CircularProgress } from "@mui/material"; +import { Box, Theme, Stepper, Step, StepLabel, Typography, RadioGroup, Radio, FormControlLabel, Button, Autocomplete, TextField, DialogTitle, DialogContent, DialogActions, CircularProgress } from "@mui/material"; import { makeStyles } from "@mui/styles"; import ConditioningSelector from "bin/conditioning/conditioningSelector"; import { Component, Device, Interaction } from "models"; @@ -7,7 +6,7 @@ import { Ambient } from "models/Ambient"; import { Controller } from "models/Controller"; import { Plenum } from "models/Plenum"; import { pond, quack } from "protobuf-ts/pond"; -import { useEffect, useMemo, useState } from "react"; +import { useEffect, useState } from "react"; import { ComponentSet } from "bin/conditioning/pickComponentSet" import { componentIDToString, sameComponentID } from "pbHelpers/Component"; import moment from "moment"; @@ -15,7 +14,6 @@ import { lowerCase } from "lodash"; import { GetGrainExtensionMap } from "grain"; import { describeMeasurement } from "pbHelpers/MeasurementDescriber"; import { useGlobalState, useInteractionsAPI } from "providers"; -import BinConditioningInteraction from "bin/BinConditioningInteraction"; import ConditionDisplay from "./conditionDisplay"; import React from "react"; import { DeviceChangeData } from "./BinModeController"; @@ -46,6 +44,7 @@ interface Props { deviceComponents: Map binPrefs?: Map grain?: pond.Grain + customGrain?: pond.GrainSettings cancel: () => void confirm: (deviceData: DeviceChangeData[]) => void } @@ -54,7 +53,7 @@ const steps = [{label: "Style"}, {label: "Device"}, {label: "Interaction"}] //this is our simple drying mode the way it currently works, just building the dialog to be a little more trnasparent and customizable as to what the interaction is doing export default function DryingMode(props: Props){ - const {devices, deviceComponents, binPrefs, grain, cancel, confirm} = props + const {devices, deviceComponents, binPrefs, grain, customGrain, cancel, confirm} = props const grainExtensionMap = GetGrainExtensionMap(); const classes = useStyles() const [{user}] = useGlobalState() @@ -478,6 +477,8 @@ export default function DryingMode(props: Props){ if(sink && source){ return ( { + return ({ + stepper: { + padding: theme.spacing(0.5) + }, + }) +}); + +interface Step { + label: string; + completed?: boolean; +} + +interface Option { + label: string; + device: Device; + icon?: string; + } + +interface Props { + devices: Device[] + deviceComponents: Map + binPrefs?: Map + grain?: pond.Grain + customGrain?: pond.GrainSettings + cancel: () => void + confirm: (deviceData: DeviceChangeData[]) => void +} + +const steps = [{label: "Style"}, {label: "Device"}, {label: "Interaction"}] + +//this is our simple drying mode the way it currently works, just building the dialog to be a little more trnasparent and customizable as to what the interaction is doing +export default function DryingMode(props: Props){ + const {devices, deviceComponents, binPrefs, grain, customGrain, cancel, confirm} = props + const grainExtensionMap = GetGrainExtensionMap(); + const classes = useStyles() + const [{user}] = useGlobalState() + const interactionAPI = useInteractionsAPI() + const [options, setOptions] = useState([]) + const [deviceOption, setDeviceOption] = useState