import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { bindActionCreators } from 'redux'; import { Link, navigate } from 'gatsby'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; import { Panel, FormControl, FormGroup, ControlLabel, Button, Col } from '@freecodecamp/react-bootstrap'; import { isSignedInSelector, userFetchStateSelector, userSelector, reportUser } from '../redux'; import Layout from '../components/Layout'; import { Spacer, Loader, FullWidthRow } from '../components/helpers'; const propTypes = { email: PropTypes.string, isSignedIn: PropTypes.bool, reportUser: PropTypes.func.isRequired, userFetchState: PropTypes.shape({ pending: PropTypes.bool, comnplete: PropTypes.bool, errored: PropTypes.bool }), username: PropTypes.string }; const mapStateToProps = createSelector( isSignedInSelector, userFetchStateSelector, userSelector, (isSignedIn, userFetchState, { email }) => ({ isSignedIn, userFetchState, email }) ); const mapDispatchToProps = dispatch => bindActionCreators({ reportUser }, dispatch); class ShowUser extends Component { constructor(props) { super(props); this.timer = null; this.state = { textarea: '' }; this.handleChange = this.handleChange.bind(this); this.handleSubmit = this.handleSubmit.bind(this); } componentWillUnmount() { if (this.timer) { clearTimeout(this.timer); } } handleChange(e) { const textarea = e.target.value.slice(); return this.setState({ textarea }); } handleSubmit(e) { e.preventDefault(); const { textarea: reportDescription } = this.state; const { username, reportUser } = this.props; return reportUser({ username, reportDescription }); } setNavigationTimer() { if (!this.timer) { this.timer = setTimeout(() => navigate('/signin'), 5000); } } render() { const { username, isSignedIn, userFetchState, email } = this.props; const { pending, complete, errored } = userFetchState; if (pending && !complete) { return (
); } if ((complete || errored) && !isSignedIn) { this.setNavigationTimer(); return ( You need to be signed in to report a user

You will be redirected to sign in to freeCodeCamp.org automatically in 5 seconds

Or you can here if you do not want to wait

); } const { textarea } = this.state; return (

Do you want to report {username} 's profile for abuse?

We will notify the community moderators' team, and a send copy of this report to your email:{' '} {email}.

We may get back to you for more information, if required.

Additional Information
); } } ShowUser.displayName = 'ShowUser'; ShowUser.propTypes = propTypes; export default connect( mapStateToProps, mapDispatchToProps )(ShowUser);