AllenYuan

auth - header

Apr 24th, 2020
537
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React from 'react';
  2. import {Link} from 'react-router';
  3.  
  4. // if the user is logged out display this header
  5. const LoggedOutView = (props) => {
  6.   if (!props.currentUser) {
  7.     return (
  8.       // list with navbar style (horizontal, spaced elements) pulled to the right
  9.       <ul className="nav navbar-nav pull-xs-right">
  10.         {/* nav item linking to home */}
  11.         <li className="nav-item">
  12.           <Link to="/" className="nav-link">
  13.             Home
  14.           </Link>
  15.         </li>
  16.         {/* nav item linking ot login */}
  17.         <li className="nav-item">
  18.           <Link to="login" className="nav-link">
  19.             Sign in
  20.           </Link>
  21.         </li>
  22.         {/* nav item linking to register */}
  23.         <li className="nav-item">
  24.           <Link to="register" className="nav-link">
  25.             Sign up
  26.           </Link>
  27.         </li>
  28.       </ul>
  29.     );
  30.   }
  31.   return null;
  32. };
  33.  
  34. // if the user is logged in display this header
  35. const LoggedInView = (props) => {
  36.   if (props.currentUser) {
  37.     return (
  38.       // ditto above
  39.       <ul className="nav navbar-nav pull-xs-right">
  40.         {/* nav item linking to home */}
  41.         <li className="nav-item">
  42.           <Link to="" className="nav-link">
  43.             Home
  44.           </Link>
  45.         </li>
  46.         {/* nav item linking to editor */}
  47.         <li className="nav-item">
  48.           <Link to="editor" className="nav-link">
  49.             {/* display writing icon followed by a space followed by 'New Post' */}
  50.             <i className="ion-compose" />
  51.             &nbsp;New Post
  52.           </Link>
  53.         </li>
  54.         {/* nav item linking to settings */}
  55.         <li className="nav-item">
  56.           <Link to="settings" className="nav-link">
  57.             <i className="ion-gear-a" />
  58.             &nbsp;Settings
  59.           </Link>
  60.         </li>
  61.         {/* link to current user's profile with user's avatar and username */}
  62.         <li className="nav-item">
  63.           <Link to={`@${props.currentUser.username}`} className="nav-link">
  64.             <img src={props.currentUser.image} className="user-pic" />
  65.             {props.currentUser.username}
  66.           </Link>
  67.         </li>
  68.       </ul>
  69.     );
  70.   }
  71.   return null;
  72. };
  73.  
  74. class Header extends React.Component {
  75.   render() {
  76.     return (
  77.       <nav className="navbar navbar-light">
  78.         <div className="container">
  79.           {/* logo links to homepage */}
  80.           <Link to="/" className="navbar-brand">
  81.             {this.props.appName.toLowerCase()}
  82.           </Link>
  83.           {/* render loggedin/loggedoutview */}
  84.           <LoggedOutView currentUser={this.props.currentUser} />
  85.           <LoggedInView currentUser={this.props.currentUser} />
  86.         </div>
  87.       </nav>
  88.     );
  89.   }
  90. }
  91.  
  92. export default Header;
Advertisement
Add Comment
Please, Sign In to add comment