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,
username: PropTypes.string,
completedChallengeCount: PropTypes.number,
completedProjectCount: PropTypes.number,
completedCertCount: PropTypes.number,
completedLegacyCertCount: PropTypes.number,
isDonating: PropTypes.bool
})
};
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 {name ? name : 'Camper'} | freeCodeCamp.org
Welcome {name ? name : 'Camper'}!
{quote}
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);