diff --git a/packages/components-faraday/src/components/SignUp/ReviewerAgree.js b/packages/components-faraday/src/components/SignUp/ReviewerAgree.js new file mode 100644 index 0000000000000000000000000000000000000000..4e35309c5b862028c3818e41949f0c3d460255a3 --- /dev/null +++ b/packages/components-faraday/src/components/SignUp/ReviewerAgree.js @@ -0,0 +1,131 @@ +import React from 'react' +import { get } from 'lodash' +import { connect } from 'react-redux' +import { reduxForm, SubmissionError } from 'redux-form' +import { push } from 'react-router-redux' +import { required, minChars } from 'xpub-validators' +import { compose, withState, lifecycle } from 'recompose' +import { loginUser } from 'pubsweet-component-login/actions' +import { Button, ValidatedField, TextField } from '@pubsweet/ui' + +import { + Row, + Err, + Title, + Label, + Email, + RowItem, + Subtitle, + RootContainer, + FormContainer, +} from './FormItems' +import { reviewerDecision, setReviewerPassword } from '../../redux/reviewers' + +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 min8Chars = minChars(8) +const ReviewerSignUp = ({ + searchParams: { agree }, + handleSubmit, + error, + reviewer, +}) => ( + <RootContainer> + <Title>Hindawi Invitation</Title> + <Subtitle>{agree ? agreeText : declineText}</Subtitle> + <Email>{reviewer.email}</Email> + {agree && ( + <FormContainer onSubmit={handleSubmit}> + <Row> + <RowItem> + <Label> Password </Label> + <ValidatedField + component={input => <TextField {...input} type="password" />} + name="password" + validate={[required, min8Chars]} + /> + </RowItem> + </Row> + {error && ( + <Row> + <RowItem> + <Err>Token expired or Something went wrong.</Err> + </RowItem> + </Row> + )} + <Row> + <Button primary type="submit"> + CONFIRM + </Button> + </Row> + </FormContainer> + )} + </RootContainer> +) + +export default compose( + withState('searchParams', 'setParams', { agree: true }), + withState('reviewer', 'setReviewer', {}), + connect(null, { push, loginUser, setReviewerPassword, reviewerDecision }), + lifecycle({ + componentDidMount() { + // const { setParams, location, setReviewer, reviewerDecision } = this.props + // const { + // agree, + // collectionId, + // invitationId, + // fragmentId, + // ...reviewerBody + // } = parseSearchParams(location.search) + // setParams(v => ({ + // agree: agree === 'true', + // collectionId, + // invitationId, + // fragmentId, + // })) + // if (agree === 'true') { + // setReviewer(reviewerBody) + // } else { + // reviewerDecision(invitationId, collectionId, false) + // } + // console.log('rev sign up mounted?', this.props) + }, + }), + reduxForm({ + form: 'invite-reviewer', + onSubmit: ( + { password }, + dispatch, + { + push, + loginUser, + searchParams, + reviewer, + location, + setReviewerPassword, + }, + ) => { + const { collectionId, fragmentId, agree, invitationId } = searchParams + return setReviewerPassword({ + ...reviewer, + password, + }) + .then(() => { + loginUser( + { username: reviewer.email, password }, + `/projects/${collectionId}/versions/${fragmentId}/details?agree=${agree}&invitationId=${invitationId}`, + ) + }) + .catch(error => { + const err = get(error, 'response') + if (err) { + const errorMessage = get(JSON.parse(err), 'error') + throw new SubmissionError({ + _error: errorMessage || 'Something went wrong', + }) + } + }) + }, + }), +)(ReviewerSignUp) diff --git a/packages/components-faraday/src/components/SignUp/ReviewerDecline.js b/packages/components-faraday/src/components/SignUp/ReviewerDecline.js new file mode 100644 index 0000000000000000000000000000000000000000..bf49edaf31d6cbb31e5f748219b8fd8911acc46d --- /dev/null +++ b/packages/components-faraday/src/components/SignUp/ReviewerDecline.js @@ -0,0 +1,5 @@ +import React from 'react' + +const ReviewerDecline = props => <div>I decline</div> + +export default ReviewerDecline diff --git a/packages/components-faraday/src/components/SignUp/ReviewerSignUp.js b/packages/components-faraday/src/components/SignUp/ReviewerSignUp.js index 514f3fb3a2f36695cae3c2dfceebbd40e0f7872f..671d99d58832bff7eded4b4ce256f1f9c61c82a3 100644 --- a/packages/components-faraday/src/components/SignUp/ReviewerSignUp.js +++ b/packages/components-faraday/src/components/SignUp/ReviewerSignUp.js @@ -1,132 +1,28 @@ import React from 'react' -import { get } from 'lodash' -import { connect } from 'react-redux' -import { reduxForm, SubmissionError } from 'redux-form' -import { push } from 'react-router-redux' -import { required, minChars } from 'xpub-validators' -import { compose, withState, lifecycle } from 'recompose' -import { loginUser } from 'pubsweet-component-login/actions' -import { Button, ValidatedField, TextField } from '@pubsweet/ui' +import { Route } from 'react-router-dom' +import { AuthenticatedComponent } from 'pubsweet-client' -import { - Row, - Err, - Title, - Label, - Email, - RowItem, - Subtitle, - RootContainer, - FormContainer, -} from './FormItems' +import { ReviewerAgree, ReviewerDecline } from './' import { parseSearchParams } from './utils' -import { reviewerDecision, setReviewerPassword } from '../../redux/reviewers' -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 min8Chars = minChars(8) -const ReviewerSignUp = ({ - searchParams: { agree }, - handleSubmit, - error, - reviewer, -}) => ( - <RootContainer> - <Title>Hindawi Invitation</Title> - <Subtitle>{agree ? agreeText : declineText}</Subtitle> - <Email>{reviewer.email}</Email> - {agree && ( - <FormContainer onSubmit={handleSubmit}> - <Row> - <RowItem> - <Label> Password </Label> - <ValidatedField - component={input => <TextField {...input} type="password" />} - name="password" - validate={[required, min8Chars]} - /> - </RowItem> - </Row> - {error && ( - <Row> - <RowItem> - <Err>Token expired or Something went wrong.</Err> - </RowItem> - </Row> - )} - <Row> - <Button primary type="submit"> - CONFIRM - </Button> - </Row> - </FormContainer> +const PrivateRoute = ({ component: Component, ...rest }) => ( + <Route + {...rest} + render={props => ( + <AuthenticatedComponent> + <Component {...props} /> + </AuthenticatedComponent> )} - </RootContainer> + /> ) -export default compose( - withState('searchParams', 'setParams', { agree: true }), - withState('reviewer', 'setReviewer', {}), - connect(null, { push, loginUser, setReviewerPassword, reviewerDecision }), - lifecycle({ - componentDidMount() { - const { setParams, location, setReviewer, reviewerDecision } = this.props - const { - agree, - collectionId, - invitationId, - fragmentId, - ...reviewerBody - } = parseSearchParams(location.search) - setParams(v => ({ - agree: agree === 'true', - collectionId, - invitationId, - fragmentId, - })) +const ReviewerSignUp = ({ location }) => { + const { agree } = parseSearchParams(location.search) + return agree === 'true' ? ( + <PrivateRoute component={ReviewerAgree} /> + ) : ( + <Route component={ReviewerDecline} /> + ) +} - if (agree === 'true') { - setReviewer(reviewerBody) - } else { - reviewerDecision(invitationId, collectionId, false) - } - }, - }), - reduxForm({ - form: 'invite-reviewer', - onSubmit: ( - { password }, - dispatch, - { - push, - loginUser, - searchParams, - reviewer, - location, - setReviewerPassword, - }, - ) => { - const { collectionId, fragmentId, agree, invitationId } = searchParams - return setReviewerPassword({ - ...reviewer, - password, - }) - .then(() => { - loginUser( - { username: reviewer.email, password }, - `/projects/${collectionId}/versions/${fragmentId}/details?agree=${agree}&invitationId=${invitationId}`, - ) - }) - .catch(error => { - const err = get(error, 'response') - if (err) { - const errorMessage = get(JSON.parse(err), 'error') - throw new SubmissionError({ - _error: errorMessage || 'Something went wrong', - }) - } - }) - }, - }), -)(ReviewerSignUp) +export default ReviewerSignUp diff --git a/packages/components-faraday/src/components/SignUp/index.js b/packages/components-faraday/src/components/SignUp/index.js index 5b2d1d8aa27b7722db809bbf8e64aa4ae73c4ac3..21a5cd8e67d2630a46ae338afa7d6d297179544b 100644 --- a/packages/components-faraday/src/components/SignUp/index.js +++ b/packages/components-faraday/src/components/SignUp/index.js @@ -1,2 +1,4 @@ +export { default as ReviewerAgree } from './ReviewerAgree' export { default as ReviewerSignUp } from './ReviewerSignUp' +export { default as ReviewerDecline } from './ReviewerDecline' export { default as SignUpInvitationPage } from './SignUpInvitationPage'