import React, { Component, Fragment } from 'react'; import { global_breakpoint_md } from '@patternfly/react-tokens'; import { Nav, NavList, Page, PageHeader, PageSidebar, Button } from '@patternfly/react-core'; import { I18n } from '@lingui/react'; import { t } from '@lingui/macro'; import { RootDialog } from './contexts/RootDialog'; import { withNetwork } from './contexts/Network'; import { Config } from './contexts/Config'; import AlertModal from './components/AlertModal'; import About from './components/About'; import NavExpandableGroup from './components/NavExpandableGroup'; import TowerLogo from './components/TowerLogo'; import PageHeaderToolbar from './components/PageHeaderToolbar'; class App extends Component { constructor (props) { super(props); // initialize with a closed navbar if window size is small const isNavOpen = typeof window !== 'undefined' && window.innerWidth >= parseInt(global_breakpoint_md.value, 10); this.state = { isAboutModalOpen: false, isNavOpen }; this.onLogout = this.onLogout.bind(this); this.onAboutModalClose = this.onAboutModalClose.bind(this); this.onAboutModalOpen = this.onAboutModalOpen.bind(this); this.onNavToggle = this.onNavToggle.bind(this); } async onLogout () { const { api, handleHttpError } = this.props; try { await api.logout(); window.location.replace('/#/login'); } catch (err) { handleHttpError(err); } } onAboutModalOpen () { this.setState({ isAboutModalOpen: true }); } onAboutModalClose () { this.setState({ isAboutModalOpen: false }); } onNavToggle () { this.setState(({ isNavOpen }) => ({ isNavOpen: !isNavOpen })); } render () { const { isAboutModalOpen, isNavOpen } = this.state; const { render, routeGroups = [], navLabel = '', } = this.props; return ( {({ ansible_version, version }) => ( {({ i18n }) => ( {({ title, bodyText, variant = 'info', clearRootDialogMessage }) => ( {(title || bodyText) && ( {i18n._(t`Close`)} ]} > {bodyText} )} } toolbar={( )} /> )} sidebar={( {routeGroups.map(({ groupId, groupTitle, routes }) => ( ))} )} /> )} > {render && render({ routeGroups })} )} )} )} ); } } export { App as _App }; export default withNetwork(App);