Skip to content
Snippets Groups Projects
Commit 2e4d40fa authored by Alexandru Munteanu's avatar Alexandru Munteanu
Browse files

create special route for reviewer signup

parent 1c1bd23e
No related branches found
No related tags found
1 merge request!6Agree/Decline to work on a manuscript
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)
import React from 'react'
const ReviewerDecline = props => <div>I decline</div>
export default ReviewerDecline
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
export { default as ReviewerAgree } from './ReviewerAgree'
export { default as ReviewerSignUp } from './ReviewerSignUp'
export { default as ReviewerDecline } from './ReviewerDecline'
export { default as SignUpInvitationPage } from './SignUpInvitationPage'
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment