import React from 'react'; import PropTypes from 'prop-types'; import { Form, FormFeedback, FormGroup, Input, Label } from 'reactstrap'; import { connect } from 'react-redux'; import { injectIntl, intlShape, FormattedMessage } from 'react-intl'; import messages from './Bio.messages'; // Components import FormControls from './elements/FormControls'; import EditableItemHeader from './elements/EditableItemHeader'; import EmptyContent from './elements/EmptyContent'; import SwitchContent from './elements/SwitchContent'; // Selectors import { editableFormSelector } from '../../selectors/ProfilePageSelector'; class Bio extends React.Component { constructor(props) { super(props); this.handleChange = this.handleChange.bind(this); this.handleSubmit = this.handleSubmit.bind(this); this.handleClose = this.handleClose.bind(this); this.handleOpen = this.handleOpen.bind(this); } handleChange(e) { const { name, value } = e.target; this.props.changeHandler(name, value); } handleSubmit(e) { e.preventDefault(); this.props.submitHandler(this.props.formId); } handleClose() { this.props.closeHandler(this.props.formId); } handleOpen() { this.props.openHandler(this.props.formId); } render() { const { formId, bio, visibilityBio, editMode, saveState, error, intl, } = this.props; return ( {error} ), editable: (

{bio}

), empty: ( ), static: (

{bio}

), }} /> ); } } Bio.propTypes = { // It'd be nice to just set this as a defaultProps... // except the class that comes out on the other side of react-redux's // connect() method won't have it anymore. Static properties won't survive // through the higher order function. formId: PropTypes.string.isRequired, // From Selector bio: PropTypes.string, visibilityBio: PropTypes.oneOf(['private', 'all_users']), editMode: PropTypes.oneOf(['editing', 'editable', 'empty', 'static']), saveState: PropTypes.string, error: PropTypes.string, // Actions changeHandler: PropTypes.func.isRequired, submitHandler: PropTypes.func.isRequired, closeHandler: PropTypes.func.isRequired, openHandler: PropTypes.func.isRequired, // i18n intl: intlShape.isRequired, }; Bio.defaultProps = { editMode: 'static', saveState: null, bio: null, visibilityBio: 'private', error: null, }; export default connect( editableFormSelector, {}, )(injectIntl(Bio));