import {
Box,
IconButton,
Theme,
Grid2 as Grid,
DialogTitle,
DialogContent,
DialogContentText,
DialogActions,
Button,
Tooltip,
Drawer,
Menu,
MenuItem,
ListItemIcon,
ListItemText,
Tab,
Tabs,
Card,
Accordion,
AccordionSummary,
AccordionDetails,
Typography,
} from "@mui/material";
import BinActions from "bin/BinActions";
import BinHistory from "bin/BinHistory";
import { useComponentAPI, useMobile } from "hooks";
import { Bin as IBin, binScope } from "models";
import { pond, quack } from "protobuf-ts/pond";
import { useBinAPI, useGlobalState } from "providers";
import React, { useCallback, useEffect, useRef, useState } from "react";
import PageContainer from "./PageContainer";
import { Component, Device, Interaction } from "models";
import BinLightIcon from "assets/products/bindapt/binLight.png";
import BinDarkIcon from "assets/products/bindapt/binDark.png";
import NotesIcon from "@mui/icons-material/Notes";
import ResponsiveDialog from "common/ResponsiveDialog";
import ObjectTeams from "teams/ObjectTeams";
import BindaptIcon from "products/Bindapt/BindaptIcon";
import Close from "@mui/icons-material/Close";
import Chat from "chat/Chat";
import TasksIcon from "products/Construction/TasksIcon";
import FieldsIcon from "products/AgIcons/FieldsIcon";
import BinComponentTypes from "bin/BinComponentTypes";
import { Plenum } from "models/Plenum";
import { GrainCable } from "models/GrainCable";
// import { Controller } from "models/Controller";
import { Pressure } from "models/Pressure";
import { CheckCircle, ExpandMore, Warning } from "@mui/icons-material";
import BinGraphs from "bin/graphs/BinGraphs";
import BinTour from "bin/BinTour";
import { getBinModel } from "common/DataImports/BinCables/BinCableImporter";
import DevicePresetController from "device/presets/devicePresetController";
import { DevicePreset } from "models/DevicePreset";
import BinVisualizerV2 from "bin/BinVisualizerV2";
import { Ambient } from "models/Ambient";
import moment from "moment";
import BinStorageConditions from "bin/BinStorageConditions";
import BinConditioningCard from "bin/BinConditioningCard";
import { makeStyles } from "@mui/styles";
import { useNavigate, useParams } from "react-router-dom";
import { Controller } from "models/Controller";
import TaskViewer from "tasks/TaskViewer";
import ButtonGroup from "common/ButtonGroup";
import BinTransactions from "bin/BinTransactions";
import { CO2 } from "models/CO2";
import ObjectInteractions from "objects/objectInteractions/ObjectInteractions";
interface TabPanelProps {
children?: React.ReactNode;
index: any;
value: any;
}
function TabPanelMine(props: TabPanelProps) {
const { children, value, index, ...other } = props;
return (
{value === index && {children}}
);
}
const useStyles = makeStyles((theme: Theme) => {
const themeType = theme.palette.mode;
const activeBG = theme.palette.secondary.main;
return ({
cardContent: {
padding: theme.spacing(1),
height: "100%",
display: "flex",
flexDirection: "column",
flexGrow: 1
},
boxContent: {
display: "flex",
flexDirection: "column",
flexGrow: 2
},
img: {
height: "28px",
width: "auto !important",
margin: "auto"
},
spacer: {
width: "32px",
height: "32px",
padding: "auto",
display: "flex",
justifyContent: "center",
alignItems: "center"
},
icon: {
border: "1px solid grey",
marginBottom: "0.75rem",
marginRight: "0.5rem"
},
avatar: {
color: themeType === "light" ? theme.palette.common.black : theme.palette.common.white,
backgroundColor: "transparent",
width: theme.spacing(5),
height: theme.spacing(5),
border: "1px solid",
borderColor: theme.palette.divider
},
active: {
color: theme.palette.getContrastText(activeBG),
backgroundColor: "gold",
width: theme.spacing(5),
height: theme.spacing(5),
border: 0,
"&:hover": {
backgroundColor: "gold"
}
},
customIcon: {
padding: theme.spacing(0.5)
},
drawerPaper: {
height: "100%",
width: "30%"
},
menuPaper: {
borderRadius: "20px"
},
tab: {}
});
});
interface Props {
binKey?: string;
displayMobile?: boolean;
fromMap?: boolean;
}
export default function Bin(props: Props) {
const { binKey, displayMobile, fromMap } = props;
const warningThreshold = 6;
const isMobile = useMobile();
const classes = useStyles();
// const match = useRouteMatch();
// const binID = binKey ?? match.params.binID;
const binID = binKey ?? useParams<{ binID: string }>()?.binID ?? "";
const binAPI = useBinAPI();
const [{ user, as }] = useGlobalState();
const [binLoading, setBinLoading] = useState(false);
const loadRef = useRef(false);
const [bin, setBin] = useState(IBin.create());
const [tab, setTab] = useState("Bin");
const [value, setValue] = React.useState(0);
const [devices, setDevices] = useState([]);
const [components, setComponents] = useState