import styles from './styles.module.scss'; import Icons from '../icons'; import React, { useRef, useState } from 'react'; import classnames from 'classnames'; import colorVariables from '../../variables/colors.json'; // Context and components for app navbar menu export const NavbarMenuContext = React.createContext({} as any); function NavbarMenu({ header, children, }: { header: React.ReactNode, children: React.ReactNode, }) { const [opened, setOpened] = useState(false); const selectBoxValueRef = useRef(null); return (
setOpened(true)} onBlur={() => setOpened(false)} onMouseDown={(e) => { if (opened) { e.preventDefault(); selectBoxValueRef.current?.blur(); setOpened(false); } }} > {header}
); } function NavbarMenuItem({ path, text, icon, selected, onClick, }: { path: string; text: string; icon: React.ReactNode; selected: boolean; onClick?: React.MouseEventHandler }) { return ( {(context) => ( {icon} {text} )} ); } // Component for top-level app navbar item export function NavbarItem({ selected, icon, path = undefined, text = undefined, style = {}, onClick = undefined, targetBlank = false, beta = false, }: { selected: boolean; icon: React.ReactNode; path?: string; text?: string | undefined; style?: React.CSSProperties; onClick?: React.MouseEventHandler; targetBlank?: boolean; beta?: boolean }) { return (
  • {icon ? {icon} : null} {text ? {text} : null} {beta &&
    Beta
    }
  • ); } // Define the real app navbar here export default function Navbar({ path, showPortfolio, showOpenArea, showAdminMenu, showDevTools, showSensorList, showOrganizationSettings, onPrem = false, impersonate = null, environmentSwitcher = null, portfolioHost = 'https://portfolio.density.io', dashboardHost = 'https://dashboard.density.io', displayHost = 'https://safe.density.io', openAreaHost = 'https://oa.density.io', supportUrl = 'https://support.density.io/hc', logoutUrl = 'https://densityio.auth0.com/v2/logout?returnTo=https%3A%2F%2Fdashboard.density.io%2F%23%2Flogout', onClickLogout = () => null, }: { path: string, showPortfolio: boolean, showOpenArea: boolean, showAdminMenu: boolean, showDevTools: boolean, showSensorList: boolean, showOrganizationSettings: boolean, onPrem?: boolean, impersonate?: React.ReactNode, environmentSwitcher?: React.ReactNode, portfolioHost?: string, dashboardHost?: string, displayHost?: string, openAreaHost?: string, supportUrl?: string, logoutUrl?: string, onClickLogout?: React.MouseEventHandler, }) { // Path definitions for each navbar link const navbarPaths = { portfolio: portfolioHost, spaces: `${dashboardHost}/#/spaces`, analytics: `${dashboardHost}/#/analytics`, dashboards: `${dashboardHost}/#/dashboards`, live: `${dashboardHost}/#/spaces/live`, display: displayHost, openArea: openAreaHost, support: supportUrl, admin: `${dashboardHost}/#/admin`, adminLocations: `${dashboardHost}/#/admin/locations`, adminUserManagement: `${dashboardHost}/#/admin/user-management`, adminIntegrations: `${dashboardHost}/#/admin/integrations`, adminDeveloper: `${dashboardHost}/#/admin/developer`, adminOrganizationSettings: `${dashboardHost}/#/admin/organization-settings`, adminSensorStatus: `${dashboardHost}/#/admin/device-status`, account: `${dashboardHost}/#/account`, } return (
      {Boolean(showPortfolio) && ( } text="Portfolio" /> )} } text="Spaces" /> } text="Analytics" /> } text="Dashboards" /> } text="Live" /> } text="Displays" /> {Boolean(showOpenArea) && ( } text={`Open\u00A0Area`} beta={true} /> )}
      {environmentSwitcher} {impersonate} {/* Support link (opens in new tab) */} {!onPrem ? ( } /> ) : null} {/* Desktop menus */} {showAdminMenu ? ( } /> } > } selected={path.startsWith(navbarPaths.adminLocations)} /> } selected={path.startsWith(navbarPaths.adminUserManagement)} /> {showDevTools && !onPrem ? ( } selected={path.startsWith(navbarPaths.adminIntegrations)} /> ) : null} {showDevTools ? ( } selected={path.startsWith(navbarPaths.adminDeveloper)} /> ) : null} {showOrganizationSettings ? ( } selected={path.startsWith(navbarPaths.adminOrganizationSettings)} /> ) : null} {showSensorList ? ( } selected={path.startsWith(navbarPaths.adminSensorStatus)} /> ) : null} ) : null} } /> } > } selected={path.startsWith(navbarPaths.account)} /> } selected={false} onClick={onClickLogout} />
    ); }