import { Accordion, AccordionDetails, AccordionSummary, AppBar, Box, Button, Checkbox, Collapse, DialogActions, DialogContent, DialogContentText, DialogTitle, FormControl, FormControlLabel, FormHelperText, FormLabel, Grid2 as Grid, IconButton, InputAdornment, MobileStepper, Radio, RadioGroup, Step, StepLabel, Stepper, Switch, Tab, Tabs, TextField, Theme, Toolbar, Tooltip, Typography, useTheme } from "@mui/material"; import { Close, ExpandMore, Info, KeyboardArrowLeft, KeyboardArrowRight } from "@mui/icons-material"; // import { getBinModel } from "common/DataImports/BinCables/BinCableImporter"; //import { jsonBin } from "common/DataImports/BinCables/BinCableImporter"; import DeleteButton from "common/DeleteButton"; import OutlinedBox from "common/OutlinedBox"; import ResponsiveDialog from "common/ResponsiveDialog"; import SearchSelect, { Option } from "common/SearchSelect"; import { ConeVolume, CylinderVolume, RadiansToDegrees, TriangleOppositeLength } from "common/TrigFunctions"; import FanPicker from "fans/fanPicker"; import { GrainOptions, ToGrainOption } from "grain"; import GrainDescriber from "grain/GrainDescriber"; import GrainTransaction from "grain/GrainTransaction"; import { GetGrainUseOptions, ToGrainUseOption } from "grain/GrainUse"; import { useMobile, useSnackbar } from "hooks"; import { clone, cloneDeep } from "lodash"; import { Bin } from "models"; import moment from "moment"; import { GetBinShapeDescribers } from "pbHelpers/Bin"; import { pond } from "protobuf-ts/pond"; import { useBinAPI, useBinYardAPI, useGlobalState, useLibraCartProxyAPI } from "providers"; import React, { useCallback, useEffect, useState } from "react"; // import { useHistory } from "react-router"; import { or } from "utils"; import { makeStyles } from "@mui/styles"; import { useNavigate } from "react-router-dom"; import BinSelector from "./BinSelector"; import CustomGrainSelector from "grain/CustomGrainSelector"; // import BinSelector from "./BinSelector"; const useStyles = makeStyles((theme: Theme) => { return ({ stepper: { padding: theme.spacing(0.5) }, secondaryColor: { color: theme.palette.secondary.main }, textSecondaryColor: { color: theme.palette.text.secondary }, bottomSpacing: { marginBottom: theme.spacing(1) }, tabs: { width: "100%", boxSizing: "border-box", flexShrink: 1 }, tabSmall: { width: "100%", boxSizing: "border-box", flexShrink: 1, minWidth: "48px" } }) }); type Mode = "add" | "update" | "remove"; interface Props { open: boolean; onClose: (refresh?: boolean) => void; mode?: Mode; bin?: Bin; canEdit: boolean; openedBinYard?: string; userID: string; coords?: { longitude: number; latitude: number }; binYards?: pond.BinYardSettings[]; } interface BinStep { label: string; } const getSteps = (): BinStep[] => { return [{ label: "General" }, { label: "Fan" }, { label: "Inventory" }, { label: "Thresholds" }]; }; interface BinFormExtension { capacity: string; height: string; topConeHeight: string; sidewallHeight: string; hopperHeight: string; diameter: string; grainBushels: string; grainWeight: string; grainType: Option | null; grainUse: Option | null; grainSubtype: string; customTypeName: string; highTemp: number; lowTemp: number; tempTarget: number; } export default function BinSettings(props: Props) { const classes = useStyles(); //the conversion constant to convert cubic feet to bushels const conversionConstantFT = 0.7786; const isMobile = useMobile(); const theme = useTheme(); // const history = useHistory(); const navigate = useNavigate(); const binAPI = useBinAPI(); const binYardAPI = useBinYardAPI(); const { openSnack } = useSnackbar(); const { open, bin, onClose, mode, canEdit, openedBinYard, userID, coords } = props; const steps = getSteps(); const [activeStep, setActiveStep] = useState(0); const [form, setForm] = useState(pond.BinSettings.create()); const [formExtension, setFormExtension] = useState({ capacity: "", height: "", topConeHeight: "", sidewallHeight: "", hopperHeight: "", diameter: "", grainBushels: "", grainWeight: "", grainType: null, grainUse: null, grainSubtype: "", customTypeName: "", highTemp: 20, lowTemp: 10, tempTarget: 15 }); const [initialized, setInitialized] = useState(false); const [removeIsOpen, setRemoveIsOpen] = useState(false); const [binYardOptions, setBinYardOptions] = useState(null); const [selectedBinYard, setSelectedBinYard] = useState