Advertisement
Guest User

React component with CSS modules

a guest
Nov 21st, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, { Component } from 'react';
  2. import PropTypes from 'prop-types';
  3. import Icon from '../common/Icon';
  4. import NavigationSteps from './NavigationSteps';
  5.  
  6. // Import Styles
  7. import styles from './Header.css';
  8.  
  9. class Header extends Component {
  10.   constructor(props, context) {
  11.     super(props, context);
  12.  
  13.     this.state = {
  14.       isBackLinkHovered: false,
  15.     };
  16.  
  17.     this.onBackLinkMouseEnter = this.onBackLinkMouseEnter.bind(this);
  18.     this.onBackLinkAnimationEnd = this.onBackLinkAnimationEnd.bind(this);
  19.   }
  20.  
  21.   componentDidMount() {
  22.     this.backLink.addEventListener('animationend', this.onBackLinkAnimationEnd);
  23.     this.backLink.addEventListener('webkitAnimationEnd', this.onBackLinkAnimationEnd);
  24.     this.backLink.addEventListener('MSAnimationEnd', this.onBackLinkAnimationEnd);
  25.     this.backLink.addEventListener('oAnimationEnd', this.onBackLinkAnimationEnd);
  26.   }
  27.   componentWillUnmount() {
  28.     this.backLink.removeEventListener('animationend', this.onBackLinkAnimationEnd);
  29.     this.backLink.removeEventListener('webkitAnimationEnd', this.onBackLinkAnimationEnd);
  30.     this.backLink.removeEventListener('MSAnimationEnd', this.onBackLinkAnimationEnd);
  31.     this.backLink.removeEventListener('oAnimationEnd', this.onBackLinkAnimationEnd);
  32.   }
  33.  
  34.   onBackLinkMouseEnter() {
  35.     this.setState({ isBackLinkHovered: true });
  36.   }
  37.  
  38.   onBackLinkAnimationEnd() {
  39.     this.setState({ isBackLinkHovered: false });
  40.   }
  41.  
  42.   render() {
  43.     const { backText, backHref, logoText, logoHref } = this.props;
  44.  
  45.     return (
  46.       <header className={styles.header} role="banner">
  47.         <nav className={styles.navigation}>
  48.           <div className={styles['navigation-inner']}>
  49.             <div className={styles.menus}>
  50.               <ul className={styles.menu} role="menu">
  51.                 <li className={styles.back} role="menuitem">
  52.                   <a
  53.                     href={backHref}
  54.                     className={this.state.isBackLinkHovered ? 'is-hovered' : ''}
  55.                     onMouseEnter={this.onBackLinkMouseEnter}
  56.                     ref={(a) => { this.backLink = a; }}
  57.                   >
  58.                     <Icon type="pointer-left" />
  59.                     <span className={styles.text}>
  60.                       {backText}
  61.                     </span>
  62.                   </a>
  63.                 </li>
  64.               </ul>
  65.             </div>
  66.           </div>
  67.         </nav>
  68.         <div className={styles.logo}>
  69.           <h1>
  70.             <a href={logoHref}>
  71.               <span className={styles.text}>
  72.                 {logoText}
  73.               </span>
  74.               <Icon type="logo" />
  75.             </a>
  76.           </h1>
  77.         </div>
  78.         <NavigationSteps steps={this.props.steps} />
  79.       </header>
  80.     );
  81.   }
  82. }
  83.  
  84. Header.propTypes = {
  85.   steps: PropTypes.array.isRequired,
  86.   backText: PropTypes.string.isRequired,
  87.   backHref: PropTypes.string.isRequired,
  88.   logoText: PropTypes.string.isRequired,
  89.   logoHref: PropTypes.string.isRequired,
  90. };
  91.  
  92. export default Header;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement