index.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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';
  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 } }) => ({
  46. isAuthenticated,
  47. });
  48. const mapDispatchToProps = dispatch => ({
  49. getUrlsList: bindActionCreators(getUrlsList, dispatch),
  50. });
  51. export default connect(
  52. mapStateToProps,
  53. mapDispatchToProps
  54. )(Homepage);