/* * Copyright (C) 2021 Red Hat, Inc. * SPDX-License-Identifier: LGPL-2.1-or-later */ import cockpit from "cockpit"; import React from "react"; import { Button } from "@patternfly/react-core/dist/esm/components/Button/index.js"; import { Dropdown, DropdownGroup, DropdownItem, DropdownList } from '@patternfly/react-core/dist/esm/components/Dropdown/index.js'; import { MenuToggle } from "@patternfly/react-core/dist/esm/components/MenuToggle"; import { Divider } from "@patternfly/react-core/dist/esm/components/Divider"; import { Masthead, MastheadContent } from "@patternfly/react-core/dist/esm/components/Masthead/index.js"; import { Spinner } from "@patternfly/react-core/dist/esm/components/Spinner/index.js"; import { ToggleGroup, ToggleGroupItem } from "@patternfly/react-core/dist/esm/components/ToggleGroup/index.js"; import { Toolbar, ToolbarContent, ToolbarItem } from "@patternfly/react-core/dist/esm/components/Toolbar/index.js"; import { CogIcon, ExternalLinkAltIcon, HelpIcon } from '@patternfly/react-icons'; import { Icon } from "@patternfly/react-core/dist/esm/components/Icon/index.js"; import { ShellState } from "./state"; import { ManifestDocs, ManifestParentSection } from "./manifests"; import { ActivePagesDialog } from "./active-pages-modal.jsx"; import { CredentialsModal } from './credentials.jsx'; import { AboutCockpitModal, LangModal, OopsModal } from "./shell-modals.jsx"; import { superuser_proxy, SuperuserProxy, SuperuserIndicator } from "superuser-dialogs"; import { read_os_release } from "os-release.js"; import { DialogsContext } from "dialogs.jsx"; const _ = cockpit.gettext; interface TopNavProps { state: ShellState; } interface TopNavState { docsOpened: boolean; menuOpened: boolean; showActivePages: boolean; osRelease: cockpit.JsonObject; theme: string; } export class TopNav extends React.Component { static contextType = DialogsContext; declare context: React.ContextType; props: TopNavProps; state: TopNavState; superuser_connection: cockpit.DBusClient | null = null; superuser: SuperuserProxy | null = null; handleClickOutside: () => void; constructor(props: TopNavProps) { super(props); this.props = props; this.state = { docsOpened: false, menuOpened: false, showActivePages: false, osRelease: {}, theme: localStorage.getItem('shell:style') || 'auto', }; this.handleClickOutside = () => this.setState({ menuOpened: false, docsOpened: false }); } componentDidMount() { read_os_release().then(os => this.setState({ osRelease: os || {} })); /* This is a HACK for catching lost clicks on the pages which live in iframes so as to close dropdown menus on the shell. * Note: Clicks on an