'use strict'; import React from 'react'; import { Link } from 'react-router'; import Nav from 'react-bootstrap/lib/Nav'; import Navbar from 'react-bootstrap/lib/Navbar'; import MenuItem from 'react-bootstrap/lib/MenuItem'; import NavDropdown from 'react-bootstrap/lib/NavDropdown'; import NavItem from 'react-bootstrap/lib/NavItem'; import LinkContainer from 'react-router-bootstrap/lib/LinkContainer'; import PieceListStore from '../stores/piece_list_store'; import AclProxy from './acl_proxy'; import withContext from './context/with_context'; import HeaderNotifications from './header_notifications'; import HeaderNotificationDebug from './header_notification_debug'; import NavRoutesLinks from './nav_routes_links'; import { currentUserShape, whitelabelShape } from './prop_types'; import { constructHead } from '../utils/dom'; import { safeMerge } from '../utils/general'; import { getLangText } from '../utils/lang'; let Header = React.createClass({ propTypes: { routes: React.PropTypes.arrayOf(React.PropTypes.object).isRequired, // Injected through HOCs currentUser: currentUserShape.isRequired, // eslint-disable-line react/sort-prop-types isLoggedIn: React.PropTypes.bool.isRequired, // eslint-disable-line react/sort-prop-types whitelabel: whitelabelShape.isRequired // eslint-disable-line react/sort-prop-types }, getInitialState() { return safeMerge( PieceListStore.getState(), { expandedCollapse: false } ); }, componentDidMount() { // Listen to the piece list store, but don't fetch immediately to avoid // conflicts with routes that may need to wait to load the piece list PieceListStore.listen(this.onChange); }, componentWillUnmount() { PieceListStore.unlisten(this.onChange); }, onChange(state) { this.setState(state); }, collapseNav() { if (this.state.expandedCollapse) { this.onToggleCollapse(false); } }, onToggleCollapse(expandedCollapse) { this.setState({ expandedCollapse }); }, renderLogo() { const { whitelabel } = this.props; if (whitelabel.head) { constructHead(whitelabel.head); } if (whitelabel.subdomain && whitelabel.subdomain !== 'www' && whitelabel.logo) { return ( Whitelabel brand ); } else { return ( ); } }, renderPoweredBy() { return ( {getLangText('powered by')} ); }, render() { const { currentUser, isLoggedIn, routes, whitelabel } = this.props; const { unfilteredPieceListCount } = this.state; let account; let signup; let navRoutesLinks; if (isLoggedIn) { account = ( {getLangText('Account Settings')} {getLangText('Contract Settings')} {getLangText('Log out')} ); // Let's assume that if the piece list hasn't loaded yet (ie. when // unfilteredPieceListCount === -1) then the user has pieces. // FIXME: this doesn't work that well as the user may not load their piece list // until much later, so we would show the 'Collection' header as available until // they actually click on it and get redirected to piece registration. navRoutesLinks = ( ); } else { account = ( {getLangText('LOGIN')} ); signup = ( {getLangText('SIGNUP')} ); } return (
{this.renderLogo()} {this.renderPoweredBy()} {navRoutesLinks}

); } }); export default withContext(Header, 'currentUser', 'isLoggedIn', 'whitelabel');