import React from 'react' import { connect } from 'react-redux' import { reduxForm } from 'redux-form' // import { required, minChars } from 'xpub-validators' import { compose, withState, lifecycle } from 'recompose' import { loginUser } from 'pubsweet-component-login/actions' import { Button, H2, Spinner } from '@pubsweet/ui' import { Row, Text, ShadowedBox, handleError, withFetching, } from 'pubsweet-component-faraday-ui' import { redirectToError } from '../utils' import { passwordValidator } from '../../../../component-faraday-ui/src/Utils' import { reviewerDecision, setReviewerPassword } from '../../redux/reviewers' import PasswordValidation from '../../../../component-faraday-ui/src/PasswordValidation' const agreeText = `You have been invited to review a manuscript on the Hindawi platform. Please set a password and proceed to the manuscript.` const declineText = `You have decline to work on a manuscript.` const ReviewerInviteDecision = ({ agree, error, isFetching, handleSubmit, errorMessage, reviewerEmail, fetchingError, }) => ( <ShadowedBox center mt={2} width={60}> <H2>Reviewer Invitation</H2> <Text align="center" secondary> {reviewerEmail} </Text> <Row mt={2}> <Text align="center">{agree === 'true' ? agreeText : declineText}</Text> </Row> <PasswordValidation formLabel="Password" formName="invite-reviewer" /> {fetchingError && ( <Row mt={2}> <Text align="center" error> {fetchingError} </Text> </Row> )} <Row mt={2}> {isFetching ? ( <Spinner /> ) : ( <Button onClick={handleSubmit} primary size="medium"> CONFIRM </Button> )} </Row> </ShadowedBox> ) export default compose( withFetching, withState('reviewerEmail', 'setEmail', ''), connect(null, { loginUser, }), lifecycle({ componentDidMount() { const { agree, email, history, setEmail, fragmentId, collectionId, invitationId, } = this.props setEmail(email) if (agree === 'false') { reviewerDecision({ fragmentId, agree: false, collectionId, invitationId, }).catch(redirectToError(history.replace)) } }, }), reduxForm({ form: 'invite-reviewer', validate: passwordValidator, onSubmit: ( { password }, dispatch, { email, token, setError, loginUser, fragmentId, setFetching, collectionId, invitationId, }, ) => { setFetching(true) setError('') setReviewerPassword({ email, token, password, }) .then(() => { setError('') setFetching(false) loginUser( { username: email, password, }, `/projects/${collectionId}/versions/${fragmentId}/details?agree=${true}&invitationId=${invitationId}`, ) }) .catch(err => { setFetching(false) handleError(setError)(err) }) }, }), )(ReviewerInviteDecision)