| /* |
| * |
| * Copyright 2016 RIFT.IO Inc |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| */ |
| |
| import React from 'react'; |
| import './header.scss'; |
| import Crouton from 'react-crouton'; |
| import HeaderStore from './headerStore.js'; |
| import ScreenLoader from '../screen-loader/screenLoader.jsx'; |
| export default class AppHeader extends React.Component { |
| constructor(props) { |
| super(props); |
| this.state = {}; |
| this.state.validateErrorEvent = 0; |
| this.state.validateErrorMsg = ''; |
| } |
| componentDidMount() { |
| HeaderStore.listen(this.storeListener); |
| } |
| componentWillUnmount(){ |
| HeaderStore.unlisten(this.storeListener); |
| } |
| closeError() { |
| LaunchpadFleetActions.validateReset() |
| } |
| storeListener = (state) => { |
| this.setState(state); |
| } |
| render() { |
| let html; |
| let navItems = this.props.nav.map(function(nav, i) { |
| if (nav.href || nav.onClick) { |
| return <li key={i}><a {...nav}>{nav.name}</a></li> |
| } else { |
| return <li key={i}><span className="current"> {nav.name} </span></li> |
| } |
| }); |
| let errorMessage = <Crouton |
| id={Date.now()} |
| message={this.state.validateErrorMsg} |
| type={"error"} |
| hidden={!(this.state.validateErrorEvent && this.state.validateErrorMsg)} |
| onDismiss={HeaderStore.validateReset} |
| /> |
| |
| // html = ( |
| // <header className="header-app-component"> |
| // {errorMessage} |
| // <ScreenLoader show={this.props.isLoading}/> |
| // <div className="header-app-main"> |
| // <h1>{this.props.title}</h1> |
| // <CommonLinks></CommonLinks> |
| // </div> |
| // <div className="header-app-nav"> |
| // <ul> |
| // {navItems} |
| // </ul> |
| // </div> |
| // </header> |
| // ); |
| |
| html = ( |
| <header className="header-app-component"> |
| {errorMessage} |
| <ScreenLoader show={this.props.isLoading}/> |
| <div className="header-app-nav"> |
| <ul> |
| {navItems} |
| </ul> |
| </div> |
| </header> |
| ); |
| |
| return html; |
| } |
| } |
| export class CommonLinks extends React.Component { |
| constructor(props) { |
| super(props); |
| } |
| openAbout() { |
| generateRefPage(); |
| navigateTo('about') |
| } |
| openDebug() { |
| generateRefPage(); |
| navigateTo('debug'); |
| } |
| render() { |
| let links = []; |
| setContext(); |
| links.push(<li key={'about'} onClick={this.openAbout}><a>About</a></li>); |
| links.push(<li key={'debug'} onClick={this.openDebug}><a>Debug</a></li>); |
| let html; |
| html = ( |
| <nav> |
| <ul> |
| {links} |
| </ul> |
| </nav> |
| ); |
| return html; |
| } |
| } |
| AppHeader.defaultProps = { |
| nav: [], |
| isLoading: false |
| } |
| function generateRefPage() { |
| let applicationContext = window.sessionStorage.getItem('applicationContext') || 'launchpad'; |
| let hash = window.location.hash.split('/'); |
| let pageTitle = 'Dashboard'; |
| if (applicationContext === 'launchpad') { |
| hash = '#/launchpad/' + hash[2]; |
| } else { |
| hash = "#/" |
| } |
| let refPage = { |
| 'hash': hash, |
| 'title': pageTitle |
| }; |
| window.sessionStorage.setItem('refPage', JSON.stringify(refPage)); |
| return refPage; |
| } |
| function navigateTo(loc) { |
| window.location.hash = '#/' + loc; |
| } |
| function setContext() { |
| let applicationContext; |
| let hashOne = window.location.hash.split('/')[1]; |
| if(hashOne == "launchpad") { |
| applicationContext = "launchpad"; |
| } else { |
| applicationContext = "missioncontrol"; |
| } |
| if(hashOne != 'about' && hashOne != 'debug'){ |
| window.sessionStorage.setItem('applicationContext', applicationContext);} |
| } |