index.js 1.7 KB

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