Skip to content
Snippets Groups Projects
ReviewerInviteDecision.js 3.15 KiB
Newer Older
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 {
  Text,
  ShadowedBox,
  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 = ({
  isFetching,
  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', ''),
  lifecycle({
    componentDidMount() {
        history,
        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,
      {
        setError,
        setFetching,
    ) => {
      setFetching(true)
      setError('')
        password,
      })
        .then(() => {
          setError('')
          setFetching(false)
            {
              username: email,
              password,
            },
            `/projects/${collectionId}/versions/${fragmentId}/details?agree=${true}&invitationId=${invitationId}`,
          setFetching(false)