import React from 'react' import PropTypes from 'prop-types' import { Motion, spring } from 'react-motion' import { Switch, Route, Link, withRouter } from 'react-router-dom' import WindowSize from './WindowSize' import About from './About' import Stats from './Stats' import Home from './Home' class Layout extends React.Component { static propTypes = { location: PropTypes.object, children: PropTypes.node } state = { underlineLeft: 0, underlineWidth: 0, useSpring: false, stats: null } adjustUnderline = (useSpring = false) => { let itemIndex switch (this.props.location.pathname) { case '/stats': itemIndex = 1 break case '/about': itemIndex = 2 break case '/': default: itemIndex = 0 } const itemNodes = this.listNode.querySelectorAll('li') const currentNode = itemNodes[itemIndex] this.setState({ underlineLeft: currentNode.offsetLeft, underlineWidth: currentNode.offsetWidth, useSpring }) } componentDidMount() { this.adjustUnderline() fetch('/_stats/last-month') .then(res => res.json()) .then(stats => this.setState({ stats })) } componentDidUpdate(prevProps) { if (prevProps.location.pathname !== this.props.location.pathname) this.adjustUnderline(true) } render() { const { underlineLeft, underlineWidth, useSpring } = this.state const style = { left: useSpring ? spring(underlineLeft, { stiffness: 220 }) : underlineLeft, width: useSpring ? spring(underlineWidth) : underlineWidth } return (

unpkg

}/>
) } } export default withRouter(Layout)