index.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import React, { Component } from 'react';
  2. import PropTypes from 'prop-types';
  3. import { connect } from 'react-redux';
  4. import { bindActionCreators } from 'redux';
  5. import BodyWrapper from '../components/BodyWrapper';
  6. import Shortener from '../components/Shortener';
  7. import Features from '../components/Features';
  8. import Table from '../components/Table';
  9. import NeedToLogin from '../components/NeedToLogin';
  10. import Footer from '../components/Footer/Footer';
  11. import { authUser, getUrlsList } from '../actions';
  12. class Homepage extends Component {
  13. static getInitialProps({ req, reduxStore }) {
  14. const token = req && req.cookies && req.cookies.token;
  15. if (token && reduxStore) reduxStore.dispatch(authUser(token));
  16. return {};
  17. }
  18. componentDidMount() {
  19. if (this.props.isAuthenticated) this.props.getUrlsList();
  20. }
  21. shouldComponentUpdate(nextProps) {
  22. return this.props.isAuthenticated !== nextProps.isAuthenticated;
  23. }
  24. render() {
  25. const { isAuthenticated } = this.props;
  26. const needToLogin = !isAuthenticated && <NeedToLogin />;
  27. const table = isAuthenticated && <Table />;
  28. return (
  29. <BodyWrapper>
  30. <Shortener />
  31. {needToLogin}
  32. {table}
  33. <Features />
  34. <Footer />
  35. </BodyWrapper>
  36. );
  37. }
  38. }
  39. Homepage.propTypes = {
  40. isAuthenticated: PropTypes.bool.isRequired,
  41. getUrlsList: PropTypes.func.isRequired,
  42. };
  43. const mapStateToProps = ({ auth: { isAuthenticated } }) => ({ isAuthenticated });
  44. const mapDispatchToProps = dispatch => ({
  45. getUrlsList: bindActionCreators(getUrlsList, dispatch),
  46. });
  47. export default connect(mapStateToProps, mapDispatchToProps)(Homepage);