import React, { PropTypes } from 'react'; import ReactDOM from 'react-dom'; import { LinkContainer } from 'react-router-bootstrap'; import { Col, MenuItem, Nav, NavDropdown, NavItem, Navbar, NavbarBrand } from 'react-bootstrap'; import noop from 'lodash/noop'; import navLinks from './links.json'; import AvatarPointsNavItem from './Avatar-Points-Nav-Item.jsx'; const fCClogo = 'https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg'; const toggleButtonChild = ( Menu ); function handleNavLinkEvent(content) { this.props.trackEvent({ category: 'Nav', action: 'clicked', label: `${content} link` }); } const propTypes = { closeDropdown: PropTypes.func.isRequired, isNavDropdownOpen: PropTypes.bool, loadCurrentChallenge: PropTypes.func.isRequired, openDropdown: PropTypes.func.isRequired, picture: PropTypes.string, points: PropTypes.number, showLoading: PropTypes.bool, signedIn: PropTypes.bool, trackEvent: PropTypes.func.isRequired, updateNavHeight: PropTypes.func, username: PropTypes.string }; export default class FCCNav extends React.Component { constructor(...props) { super(...props); this.handleMapClickOnMap = this.handleMapClickOnMap.bind(this); this.handleLogoClick = this.handleLogoClick.bind(this); navLinks.forEach(({ content }) => { this[`handle${content}Click`] = handleNavLinkEvent.bind(this, content); }); } componentDidMount() { const navBar = ReactDOM.findDOMNode(this); this.props.updateNavHeight(navBar.clientHeight); } handleMapClickOnMap(e) { e.preventDefault(); this.props.trackEvent({ category: 'Nav', action: 'clicked', label: 'map clicked while on map' }); } handleNavClick() { this.props.trackEvent({ category: 'Nav', action: 'clicked', label: 'map clicked while on map' }); } handleLogoClick(e) { e.preventDefault(); this.props.loadCurrentChallenge(); } renderLink(isNavItem, { isReact, isDropdown, content, link, links, target }) { const Component = isNavItem ? NavItem : MenuItem; const { isNavDropdownOpen, openDropdown, closeDropdown } = this.props; if (isDropdown) { // adding a noop to NavDropdown to disable false warning // about controlled component return ( { links.map(this.renderLink.bind(this, false)) } ); } if (isReact) { return ( { content } ); } return ( { content } ); } renderSignIn(username, points, picture, showLoading) { if (showLoading) { return null; } if (username) { return ( ); } else { return ( Sign Up ); } } render() { const { username, points, picture, showLoading } = this.props; return ( learn to code javascript at freeCodeCamp logo ); } } FCCNav.displayName = 'FCCNav'; FCCNav.propTypes = propTypes;