Dataset/JS/ReactNavbar/navbar.js (118 lines of code) (raw):

import React, { PropTypes } from 'react'; import { Link } from 'react-router'; import { Nav, NavItem, Navbar, NavDropdown, MenuItem, } from 'react-bootstrap'; import Gravatar from './gravatar'; import Icon from './icon'; class NavBar extends React.Component { constructor(props) { super(props); this.state = { expanded: false }; this.handleSelected = this.handleSelected.bind(this); this.handleToggle = this.handleToggle.bind(this); this.handleOpenAddChannelForm = this.handleOpenAddChannelForm.bind(this); } handleToggle() { this.setState({ expanded: !this.state.expanded }); } handleSelected() { this.setState({ expanded: false }); } handleOpenAddChannelForm(event) { this.props.onOpenAddChannelForm(event); this.handleSelected(); } render() { const { isLoggedIn, name, email } = this.props.auth; const { createHref, isActive } = this.props.router; const dropdownTitle = isLoggedIn ? <span><Gravatar email={email} /> {name}</span> : ''; return ( <Navbar fixedTop expanded={this.state.expanded} onToggle={this.handleToggle} > <Navbar.Header> <Navbar.Brand> <Link style={{ fontFamily: 'GoodDog' }} to="/"><Icon icon="headphones" /> PodBaby</Link> </Navbar.Brand> <Navbar.Toggle /> </Navbar.Header> <Navbar.Collapse> <Nav pullLeft> <NavItem active={isActive('/new/')} href={createHref('/new/')} onClick={this.handleSelected} ><Icon icon="flash" /> New episodes </NavItem> <NavItem active={isActive('/browse/')} href={createHref('/browse/')} onClick={this.handleSelected} ><Icon icon="list" /> Browse </NavItem> <NavItem active={isActive('/search/')} href={createHref('/search/')} onClick={this.handleSelected} ><Icon icon="search" /> Search </NavItem> <NavItem active={isActive('/recommendations/')} href={createHref('/recommendations/')} onClick={this.handleSelected} ><Icon icon="thumbs-up" /> Recommended </NavItem> </Nav> {isLoggedIn ? <Nav pullLeft> <NavItem onClick={this.handleOpenAddChannelForm} href="#" ><Icon icon="rss" /> Add new feed </NavItem> </Nav> : ''} {isLoggedIn ? <Nav pullRight> <NavDropdown title={dropdownTitle} id="user-dropdown"> <MenuItem href={createHref('/member/subscriptions/')} onClick={this.handleSelected} ><Icon icon="folder" /> Subscriptions </MenuItem> <MenuItem href={createHref('/member/bookmarks/')} onClick={this.handleSelected} ><Icon icon="bookmark" /> Bookmarks </MenuItem> <MenuItem href={createHref('/member/recent/')} onClick={this.handleSelected} ><Icon icon="history" /> Recent </MenuItem> <MenuItem href={createHref('/user/')} onClick={this.handleSelected} ><Icon icon="cog" /> Settings </MenuItem> <MenuItem href="#" onClick={this.props.onLogout}> <Icon icon="sign-out" /> Logout </MenuItem> </NavDropdown> </Nav> : <Nav pullRight> <NavItem active={isActive('/login/')} href={createHref('/login/')} onClick={this.handleSelected} ><Icon icon="sign-in" /> Login </NavItem> <NavItem active={isActive('/signup/')} href={createHref('/signup/')} onClick={this.handleSelected} ><Icon icon="sign-in" /> Signup </NavItem> </Nav>} </Navbar.Collapse> </Navbar> ); } } NavBar.propTypes = { onOpenAddChannelForm: PropTypes.func.isRequired, onLogout: PropTypes.func.isRequired, auth: PropTypes.object.isRequired, router: PropTypes.object.isRequired, }; export default NavBar;