import React, { Fragment } from 'react'; <<<<<<< HEAD import { I18nProvider, I18n } from '@lingui/react'; import { t } from '@lingui/macro'; ======= import { ConfigContext } from './context'; >>>>>>> Implement React Context API import { Redirect, Switch, withRouter } from 'react-router-dom'; import { BackgroundImage, BackgroundImageSrc, Nav, NavList, Page, PageHeader, PageSidebar, Toolbar, ToolbarGroup, ToolbarItem } from '@patternfly/react-core'; import { global_breakpoint_md as breakpointMd } from '@patternfly/react-tokens'; import api from './api'; import { API_LOGOUT, API_CONFIG } from './endpoints'; import HelpDropdown from './components/HelpDropdown'; import LogoutButton from './components/LogoutButton'; import TowerLogo from './components/TowerLogo'; import ConditionalRedirect from './components/ConditionalRedirect'; import NavExpandableGroup from './components/NavExpandableGroup'; import Applications from './pages/Applications'; import Credentials from './pages/Credentials'; import CredentialTypes from './pages/CredentialTypes'; import Dashboard from './pages/Dashboard'; import InstanceGroups from './pages/InstanceGroups'; import Inventories from './pages/Inventories'; import InventoryScripts from './pages/InventoryScripts'; import Jobs from './pages/Jobs'; import Login from './pages/Login'; import ManagementJobs from './pages/ManagementJobs'; import NotificationTemplates from './pages/NotificationTemplates'; import Organizations from './pages/Organizations'; import Portal from './pages/Portal'; import Projects from './pages/Projects'; import Schedules from './pages/Schedules'; import AuthSettings from './pages/AuthSettings'; import JobsSettings from './pages/JobsSettings'; import SystemSettings from './pages/SystemSettings'; import UISettings from './pages/UISettings'; import License from './pages/License'; import Teams from './pages/Teams'; import Templates from './pages/Templates'; import Users from './pages/Users'; import ja from '../build/locales/ja/messages'; import en from '../build/locales/en/messages'; const catalogs = { en, ja }; // This spits out the language and the region. Example: es-US const language = (navigator.languages && navigator.languages[0]) || navigator.language || navigator.userLanguage; const languageWithoutRegionCode = language.toLowerCase().split(/[_-]+/)[0]; class App extends React.Component { constructor(props) { super(props); const isNavOpen = typeof window !== 'undefined' && window.innerWidth >= parseInt(breakpointMd.value, 10); this.state = { isNavOpen, config: {}, error: false, }; } onNavToggle = () => { this.setState(({ isNavOpen }) => ({ isNavOpen: !isNavOpen })); }; onDevLogout = async () => { await api.get(API_LOGOUT); this.setState({ activeGroup: 'views_group', activeItem: 'views_group_dashboard' }); } async componentDidMount() { // Grab our config data from the API and store in state try { const { data } = await api.get(API_CONFIG); this.setState({ config: data }); } catch (error) { this.setState({ error }); } } render() { const { isNavOpen, config } = this.state; const { logo, loginInfo, history } = this.props; const PageToolbar = ( this.onDevLogout()} /> ); return ( api.isAuthenticated()} redirectPath="/" path="/login" component={() => } /> } toolbar={PageToolbar} showNavToggle onNavToggle={this.onNavToggle} /> )} sidebar={( )} /> )} useCondensed > !api.isAuthenticated()} redirectPath="/login" exact path="/" component={() => ()} /> !api.isAuthenticated()} redirectPath="/login" path="/home" component={Dashboard} /> !api.isAuthenticated()} redirectPath="/login" path="/jobs" component={Jobs} /> !api.isAuthenticated()} redirectPath="/login" path="/schedules" component={Schedules} /> !api.isAuthenticated()} redirectPath="/login" path="/portal" component={Portal} /> !api.isAuthenticated()} redirectPath="/login" path="/templates" component={Templates} /> !api.isAuthenticated()} redirectPath="/login" path="/credentials" component={Credentials} /> !api.isAuthenticated()} redirectPath="/login" path="/projects" component={Projects} /> !api.isAuthenticated()} redirectPath="/login" path="/inventories" component={Inventories} /> !api.isAuthenticated()} redirectPath="/login" path="/inventory_scripts" component={InventoryScripts} /> !api.isAuthenticated()} redirectPath="/login" path="/organizations" component={Organizations} /> !api.isAuthenticated()} redirectPath="/login" path="/users" component={Users} /> !api.isAuthenticated()} redirectPath="/login" path="/teams" component={Teams} /> !api.isAuthenticated()} redirectPath="/login" path="/credential_types" component={CredentialTypes} /> !api.isAuthenticated()} redirectPath="/login" path="/notification_templates" component={NotificationTemplates} /> !api.isAuthenticated()} redirectPath="/login" path="/management_jobs" component={ManagementJobs} /> !api.isAuthenticated()} redirectPath="/login" path="/instance_groups" component={InstanceGroups} /> !api.isAuthenticated()} redirectPath="/login" path="/applications" component={Applications} /> !api.isAuthenticated()} redirectPath="/login" path="/auth_settings" component={AuthSettings} /> !api.isAuthenticated()} redirectPath="/login" path="/jobs_settings" component={JobsSettings} /> !api.isAuthenticated()} redirectPath="/login" path="/system_settings" component={SystemSettings} /> !api.isAuthenticated()} redirectPath="/login" path="/ui_settings" component={UISettings} /> !api.isAuthenticated()} redirectPath="/login" path="/license" component={License} /> ); } } export default withRouter(App);