Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; import smoothscroll from 'smoothscroll-polyfill'; import ReactGA from 'react-ga'; import { withScrolling } from '../../lib/ScrollContext'; import ScrollUpIcon from '../Icons/ScrollUpIcon'; import styles from './TOCButton.scss'; smoothscroll.polyfill(); class TOCButton extends PureComponent { static propTypes = { scrollTop: PropTypes.number.isRequired, }; constructor(props) { super(props); this.state = { display: false, }; } componentDidMount() { this.timer = setInterval(() => { this.updateDisplay(); }, 30); } updateDisplay = () => { const { display } = this.state; const { scrollTop } = this.props; const scrolled = scrollTop !== 0; if (scrolled !== display) { this.setState({ display: scrolled, }); } } handleScrollToTop = (event) => { event.preventDefault(); window.scrollTo({ top: 0, left: 0, behavior: 'smooth', }); const cookiesAccepted = localStorage ? localStorage.getItem('cookiesAccepted') : false; if (!cookiesAccepted) { return; } ReactGA.event({ category: 'Click', action: 'TOC', label: 'Top of Content', }); } render() { const { display } = this.state; return ( <div className={`${styles.button}${display ? ` ${styles['button--visible']}` : ''}`} > <button className={styles.button__button} onClick={this.handleScrollToTop} type="button" > <ScrollUpIcon className={styles.button__icon} /> </button> </div> ); } } export default withScrolling(TOCButton); |