From 27590da78fe748f3e58120c9c9f6372741c55ce5 Mon Sep 17 00:00:00 2001 From: csawatzky Date: Tue, 23 Dec 2025 10:16:31 -0600 Subject: [PATCH 01/50] changed the component used in the bin and component settings to the grain selector and split out the form into another component that handles just the form and passing up a grainSettings object from its fields --- src/bin/BinSettings.tsx | 4 +- src/bin/BinVisualizerV2.tsx | 4 +- src/component/ComponentForm.tsx | 4 +- src/grain/CustomGrainForm.tsx | 172 +++++------------------------- src/grain/CustomGrainSelector.tsx | 155 +++++++++++++++++++++++++++ src/navigation/Router.tsx | 2 + src/pages/Grains.tsx | 35 ++++++ 7 files changed, 225 insertions(+), 151 deletions(-) create mode 100644 src/grain/CustomGrainSelector.tsx create mode 100644 src/pages/Grains.tsx diff --git a/src/bin/BinSettings.tsx b/src/bin/BinSettings.tsx index 69e0510..4192974 100644 --- a/src/bin/BinSettings.tsx +++ b/src/bin/BinSettings.tsx @@ -65,7 +65,7 @@ import { getDistanceUnit, or, getTemperatureUnit, getGrainUnit } from "utils"; import { makeStyles } from "@mui/styles"; import { useNavigate } from "react-router-dom"; import BinSelector from "./BinSelector"; -import CustomGrainForm from "grain/CustomGrainForm"; +import CustomGrainSelector from "grain/CustomGrainSelector"; // import BinSelector from "./BinSelector"; const useStyles = makeStyles((theme: Theme) => { @@ -1054,7 +1054,7 @@ export default function BinSettings(props: Props) { : - {setCustomGrain(newGrainSettings)}}/> + {setCustomGrain(newGrainSettings)}}/> } diff --git a/src/bin/BinVisualizerV2.tsx b/src/bin/BinVisualizerV2.tsx index 3895a13..be26827 100644 --- a/src/bin/BinVisualizerV2.tsx +++ b/src/bin/BinVisualizerV2.tsx @@ -70,7 +70,7 @@ import Edit from "@mui/icons-material/Edit"; import { makeStyles } from "@mui/styles"; import ButtonGroup from "common/ButtonGroup"; import ModeChangeDialog from "./conditioning/modeChangeDialog"; -import CustomGrainForm from "grain/CustomGrainForm"; +import CustomGrainSelector from "grain/CustomGrainSelector"; const useStyles = makeStyles((theme: Theme) => { return ({ @@ -861,7 +861,7 @@ export default function BinVisualizer(props: Props) { className={classes.bottomSpacing} /> )} */} - {setNewGrainSettings(settings)}}/> + {setNewGrainSettings(settings)}}/> ) : ( { return ({ @@ -654,7 +654,7 @@ export default function ComponentForm(props: Props) { /> {useCustomGrain ? - + : void + grainSettings?: pond.GrainSettings + onGrainSettingsChange: (settings: pond.GrainSettings, formValid: boolean) => void } export default function CustomGrainForm(props: Props) { - const {initialGrain, onGrainSettingsChange} = props - const grainAPI = useGrainAPI() - const [{as}] = useGlobalState() - const [name, setName] = useState(initialGrain ? initialGrain.name : "") - const [group, setGroup] = useState(initialGrain ? initialGrain.group : "") - const [equation, setEquation] = useState(initialGrain ? initialGrain.equation : pond.MoistureEquation.MOISTURE_EQUATION_NONE) - const [constantA, setConstantA] = useState(initialGrain ? initialGrain.a.toString() : "0") - const [constantB, setConstantB] = useState(initialGrain ? initialGrain.b.toString() : "0") - const [constantC, setConstantC] = useState(initialGrain ? initialGrain.c.toString() : "0") - const [kgPerBushel, setKgPerBushel] = useState(initialGrain ? initialGrain.kgPerBushel.toString() : "0") - const [bushelsPerTonne, setBushelsPerTonne] = useState(initialGrain ? initialGrain.bushelsPerTonne.toString() : "0") - const [newGrainSettings, setNewGrainSettings] = useState(initialGrain ?? pond.GrainSettings.create()) - const [grainMap, setGrainMap] = useState>( - initialGrain ? - new Map([ - ["Active", pond.GrainObject.create({key: "Active", name: initialGrain.name, settings: initialGrain})] - ]) - : - new Map()) - const [grainOptions, setGrainOptions] = useState( - initialGrain ? - [ - { - label: initialGrain.name, - value: "Active", - group: "Active" - } - ] - : - [] - ) - const [isNew, setIsNew] = useState(false) - const [selectedOption, setSelectedOption] = useState