import { BottomNavigation, BottomNavigationAction, Box, useTheme } from "@mui/material"; import { Dashboard as DevicesIcon, Home, MoreHoriz, Security, //SupervisedUserCircle, ShowChart as DemoIcon } from "@mui/icons-material"; import { usePrevious } from "hooks"; import BindaptIcon from "products/Bindapt/BindaptIcon"; import BinsIcon from "products/Bindapt/BinsIcon"; import { useGlobalState } from "providers"; import { useCallback, useEffect, useState } from "react"; import { useNavigate, useLocation } from "react-router-dom"; import { IsAdaptiveAgriculture, isBXT, IsMiVent, IsAdCon, IsOmniAir, IsMiPCA, IsIntellifarms } from "services/whiteLabel"; import FieldsIcon from "products/AgIcons/FieldsIcon"; import NexusSTIcon from "products/Construction/NexusSTIcon"; import OmniAirDeviceIcon from "products/AviationIcons/OmniAirDeviceIcon"; import AirportMapIcon from "products/AviationIcons/AirportMapIcon"; import PlaneIcon from "products/AviationIcons/PlaneIcon"; import JobsiteIcon from "products/Construction/JobSiteIcon"; import { useAuth0 } from "@auth0/auth0-react"; interface Props { sideIsOpen: boolean; setNavOpen: (value: React.SetStateAction) => void } export default function BottomNavigator(props: Props) { const theme = useTheme(); const { sideIsOpen, setNavOpen } = props; const navigate = useNavigate(); const location = useLocation(); const prevLocation = usePrevious(location); const { isAuthenticated } = useAuth0(); const [{ user }] = useGlobalState(); const [route, setRoute] = useState(sideIsOpen ? "side" : ""); const isAg = IsAdaptiveAgriculture(); const isIntel = IsIntellifarms(); const isMiVent = IsMiVent(); const isAdCon = IsAdCon(); const isOmni = IsOmniAir(); const isMiPCA = IsMiPCA(); const reRoute = useCallback( (path: string) => { if (path === "") { if (isAg || isIntel) { return "bins"; } if (isMiVent) { return "ventilation"; } return "devices"; } const deviceRoutes = ["groups", "devices", "demo"]; if (deviceRoutes.find(r => path === r) !== undefined) { return "devices"; } const moreRoutes = [ "firmware", "users", "docs", "tutorial", "hardware", "data", "team", "sandbox" ]; if (moreRoutes.find(r => path === r) !== undefined) { return "more"; } return path; }, [isAg, isMiVent, isIntel] ); const autoDetectRoute = useCallback(() => { let path = location.pathname.split("/")[1]; setRoute(reRoute(path)); }, [location.pathname, reRoute]); useEffect(() => { if (!prevLocation || location !== prevLocation) { autoDetectRoute(); } }, [location, prevLocation, autoDetectRoute]); const handleRouteChange = (newRoute: string) => { if (newRoute === "more") { setNavOpen(true); } else { navigate(`/${newRoute}`); setRoute(newRoute); setNavOpen(false) } }; const getType = () => { return theme.palette.mode === "light" ? "dark" : "light" } const authenticatedNavigation = () => { return ( handleRouteChange(newValue)}> {isAg || isIntel && ( } value="visualFarm" /> )} {isAg || isIntel && ( } value="bins" /> )} {isAdCon && ( } value="constructionMap" /> )} {(isOmni || isMiPCA) && ( } value="aviationMap" /> )} {(isOmni || isMiPCA) && ( } value="terminals" /> )} ) : isAdCon ? ( ) : (isOmni || isMiPCA) ? ( ) : ( ) } value="devices" /> {isAdCon && ( } value="jobsites" /> )} {/* {isMiVent && ( } value="ventilation" /> )} */} {isBXT() && user.hasFeature("security") && ( } value="security" /> )} } value="more" /> ); }; // BXT specific navigation const unauthenticatedNavigation = () => { return ( handleRouteChange(newValue)}> } /> } value="" /> } value="more" /> ); }; return ( {isAuthenticated ? authenticatedNavigation() : unauthenticatedNavigation()} ); }