115 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import React, { PropTypes } from 'react';
 | |
| import {
 | |
|   Col,
 | |
|   CollapsibleNav,
 | |
|   Nav,
 | |
|   Navbar,
 | |
|   NavItem
 | |
| } from 'react-bootstrap';
 | |
| 
 | |
| import navLinks from './links.json';
 | |
| import FCCNavItem from './NavItem.jsx';
 | |
| 
 | |
| const fCClogo = 'https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg';
 | |
| const navElements = navLinks.map((navItem, index) => {
 | |
|   return (
 | |
|     <NavItem
 | |
|       eventKey={ index + 1 }
 | |
|       href={ navItem.link }
 | |
|       key={ index }>
 | |
|       { navItem.content }
 | |
|     </NavItem>
 | |
|   );
 | |
| });
 | |
| 
 | |
| const logoElement = (
 | |
|   <a href='/'>
 | |
|     <img
 | |
|       alt='learn to code javascript at Free Code Camp logo'
 | |
|       className='img-responsive nav-logo'
 | |
|       src={ fCClogo } />
 | |
|   </a>
 | |
| );
 | |
| 
 | |
| const toggleButton = (
 | |
|   <button className='hamburger'>
 | |
|     <Col xs={ 12 }>
 | |
|       <span className='hamburger-text'>Menu</span>
 | |
|     </Col>
 | |
|   </button>
 | |
| );
 | |
| 
 | |
| export default class extends React.Component {
 | |
|   constructor(props) {
 | |
|     super(props);
 | |
|   }
 | |
| 
 | |
|   static displayName = 'Nav'
 | |
|   static propTypes = {
 | |
|     points: PropTypes.number,
 | |
|     picture: PropTypes.string,
 | |
|     signedIn: PropTypes.bool,
 | |
|     username: PropTypes.string
 | |
|   }
 | |
| 
 | |
|   renderPoints(username, points) {
 | |
|     if (!username) {
 | |
|       return null;
 | |
|     }
 | |
|     return (
 | |
|       <NavItem
 | |
|         href={ '/' + username }>
 | |
|         [ { points } ]
 | |
|       </NavItem>
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   renderSignin(username, picture) {
 | |
|     if (username) {
 | |
|       return (
 | |
|         <div
 | |
|           className='hidden-xs hidden-sm'
 | |
|           eventKey={ 2 }>
 | |
|           <a href={ '/' + username }>
 | |
|             <img
 | |
|               className='profile-picture float-right'
 | |
|               src={ picture } />
 | |
|           </a>
 | |
|         </div>
 | |
|       );
 | |
|     } else {
 | |
|       return (
 | |
|         <FCCNavItem
 | |
|           className='btn signup-btn signup-btn-nav'
 | |
|           eventKey={ 2 }
 | |
|           href='/login'>
 | |
|           Sign In
 | |
|         </FCCNavItem>
 | |
|       );
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   render() {
 | |
|     const { username, points, picture } = this.props;
 | |
|     return (
 | |
|       <Navbar
 | |
|         brand={ logoElement }
 | |
|         className='nav-height'
 | |
|         fixedTop={ true }
 | |
|         toggleButton={ toggleButton }
 | |
|         toggleNavKey={ 0 }>
 | |
|         <CollapsibleNav eventKey={ 0 }>
 | |
|           <Nav
 | |
|             className='hamburger-dropdown'
 | |
|             navbar={ true }
 | |
|             right={ true }>
 | |
|             { navElements }
 | |
|             { this.renderPoints(username, points)}
 | |
|             { this.renderSignin(username, picture) }
 | |
|           </Nav>
 | |
|         </CollapsibleNav>
 | |
|       </Navbar>
 | |
|     );
 | |
|   }
 | |
| }
 |