import React from 'react'; import PropTypes from 'prop-types'; import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; import styled from 'styled-components'; import cookie from 'js-cookie'; import Header from '../Header'; import PageLoading from '../PageLoading'; import { renewAuthUser, hidePageLoading } from '../../actions'; import { initGA, logPageView } from '../../helpers/analytics'; const Wrapper = styled.div` position: relative; min-height: 100vh; display: flex; flex-direction: column; align-items: center; box-sizing: border-box; * { box-sizing: border-box; } *::-moz-focus-inner { border: none; } @media only screen and (max-width: 448px) { font-size: 14px; } `; const ContentWrapper = styled.div` min-height: 100vh; width: 100%; flex: 0 0 auto; display: flex; align-items: center; flex-direction: column; box-sizing: border-box; `; class BodyWrapper extends React.Component { componentDidMount() { if (process.env.GOOGLE_ANALYTICS_ID) { if (!window.GA_INITIALIZED) { initGA(); window.GA_INITIALIZED = true; } logPageView(); } const token = cookie.get('token'); this.props.hidePageLoading(); if (!token || this.props.norenew) return null; return this.props.renewAuthUser(token); } render() { const { children, pageLoading } = this.props; const content = pageLoading ? : children; return (
{content} ); } } BodyWrapper.propTypes = { children: PropTypes.node.isRequired, hidePageLoading: PropTypes.func.isRequired, norenew: PropTypes.bool, pageLoading: PropTypes.bool.isRequired, renewAuthUser: PropTypes.func.isRequired, }; BodyWrapper.defaultProps = { norenew: false, }; const mapStateToProps = ({ loading: { page: pageLoading } }) => ({ pageLoading }); const mapDispatchToProps = dispatch => ({ hidePageLoading: bindActionCreators(hidePageLoading, dispatch), renewAuthUser: bindActionCreators(renewAuthUser, dispatch), }); export default connect( mapStateToProps, mapDispatchToProps )(BodyWrapper);