import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; import { Grid, Row, Col, Button } from '@freecodecamp/react-bootstrap'; import Helmet from 'react-helmet'; import { Loader, Spacer } from '../components/helpers'; import CurrentChallengeLink from '../components/helpers/CurrentChallengeLink'; import Supporters from '../components/Supporters'; import { userSelector, userFetchStateSelector, isSignedInSelector, activeDonationsSelector } from '../redux'; import { randomQuote } from '../utils/get-words'; import createRedirect from '../components/createRedirect'; import RedirectHome from '../components/RedirectHome'; import './welcome.css'; const propTypes = { activeDonations: PropTypes.number, fetchState: PropTypes.shape({ pending: PropTypes.bool, complete: PropTypes.bool, errored: PropTypes.bool }), isSignedIn: PropTypes.bool, user: PropTypes.shape({ acceptedPrivacyTerms: PropTypes.bool, completedCertCount: PropTypes.number, completedChallengeCount: PropTypes.number, completedLegacyCertCount: PropTypes.number, completedProjectCount: PropTypes.number, isDonating: PropTypes.bool, name: PropTypes.string, username: PropTypes.string }) }; const mapStateToProps = createSelector( userFetchStateSelector, isSignedInSelector, userSelector, activeDonationsSelector, (fetchState, isSignedIn, user, activeDonations) => ({ activeDonations, fetchState, isSignedIn, user }) ); const mapDispatchToProps = dispatch => bindActionCreators({}, dispatch); const RedirectAcceptPrivacyTerm = createRedirect('/accept-privacy-terms'); function Welcome({ fetchState: { pending, complete }, isSignedIn, user: { acceptedPrivacyTerms, name = '', completedChallengeCount: completedChallenges = 0, completedProjectCount = 0, completedCertCount = 0, completedLegacyCertCount: completedLegacyCerts = 0, isDonating }, activeDonations }) { if (pending && !complete) { return ; } if (!isSignedIn) { return ; } if (isSignedIn && !acceptedPrivacyTerms) { return ; } const { quote, author } = randomQuote(); return ( Welcome | freeCodeCamp.org

Welcome {name ? name : 'Camper'}!

{quote}
{author}

You have completed {completedChallenges} of{' '} 1408 coding challenges.

You have built {completedProjectCount} of{' '} 30 projects.

{completedLegacyCerts ? (

You have earned {completedLegacyCerts} of{' '} 4 legacy certifications.

) : null}

You have earned {completedCertCount} of{' '} 6 certifications.

); } Welcome.displayName = 'Welcome'; Welcome.propTypes = propTypes; export default connect( mapStateToProps, mapDispatchToProps )(Welcome);