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

feat(agree-as-reviewer): agree to work as a reviewer

parent 1a84534f
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 PropTypes from 'prop-types'
import { Button, Icon, th } from '@pubsweet/ui'
import styled, { css, withTheme } from 'styled-components'
......@@ -11,8 +12,9 @@ import {
import ZipFiles from './ZipFiles'
import { InviteReviewers } from '../Reviewers/'
import { parseVersion, parseJournalIssue, mapStatusToLabel } from './../utils'
import { selectInvitation } from '../../redux/reviewers'
import { AuthorTooltip, ReviewerDecision, HandlingEditorSection } from './'
import { parseVersion, parseJournalIssue, mapStatusToLabel } from './../utils'
const DashboardCard = ({
deleteProject,
......@@ -25,6 +27,7 @@ const DashboardCard = ({
theme,
currentUser,
canInviteReviewers,
invitation,
...rest
}) => {
const { submitted, title, type } = parseVersion(version)
......@@ -156,10 +159,16 @@ const DashboardCard = ({
/>
)}
</Bottom>
<Bottom>
<LeftDetails flex="5" />
<ReviewerDecision />
</Bottom>
{invitation && (
<Bottom>
<LeftDetails flex="5" />
<ReviewerDecision
invitation={invitation}
modalKey={`reviewer-decision-${project.id}`}
project={project}
/>
</Bottom>
)}
</DetailsView>
)}
</Card>
......@@ -173,6 +182,9 @@ export default compose(
modalKey: 'cancelManuscript',
modalComponent: ConfirmationModal,
}),
connect((state, { project }) => ({
invitation: selectInvitation(state, project.id),
})),
withHandlers({
canInviteReviewers: ({ currentUser, project }) => () => {
const handlingEditor = get(project, 'handlingEditor')
......
import React from 'react'
import { connect } from 'react-redux'
import { Button, th } from '@pubsweet/ui'
import { actions } from 'pubsweet-client'
import styled, { css } from 'styled-components'
import { compose, withHandlers } from 'recompose'
import {
withModal,
withModal2,
ConfirmationModal,
} from 'pubsweet-component-modal/src/components'
import {
selectFetchingDecision,
reviewerAccept,
reviewerDecline,
} from '../../redux/reviewers'
import { selectFetchingDecision, reviewerDecision } from '../../redux/reviewers'
const ReviewerDecision = ({ showAcceptModal, showDeclineModal }) => (
const ReviewerDecision = ({ showAcceptModal, showDeclineModal, ...rest }) => (
<div>
<DecisionButton onClick={showDeclineModal}>Decline</DecisionButton>
<DecisionButton onClick={showAcceptModal} primary>
......@@ -30,27 +27,48 @@ const ModalComponent = connect(state => ({
export default compose(
connect(null, {
reviewerAccept,
reviewerDecline,
reviewerDecision,
getCollections: actions.getCollections,
}),
withModal({
modalKey: 'reviewer-decision',
withModal2(props => ({
modalComponent: ModalComponent,
})),
withHandlers({
decisionSuccess: ({ getCollections, hideModal }) => () => {
getCollections()
hideModal()
},
}),
withHandlers({
showAcceptModal: ({ showModal, hideModal, reviewerAccept }) => () => {
showAcceptModal: ({
project,
showModal,
invitation,
decisionSuccess,
reviewerDecision,
}) => () => {
showModal({
title: 'Agree to review Manuscript?',
onConfirm: () => {
reviewerAccept().then(hideModal)
reviewerDecision(invitation.id, project.id, true).then(
decisionSuccess,
)
},
})
},
showDeclineModal: ({ showModal, hideModal, reviewerDecline }) => () => {
showDeclineModal: ({
project,
showModal,
invitation,
decisionSuccess,
reviewerDecision,
}) => () => {
showModal({
title: 'Decline to review Manuscript?',
onConfirm: () => {
reviewerDecline().then(hideModal)
reviewerDecision(invitation.id, project.id, false).then(
decisionSuccess,
)
},
})
},
......
import { get } from 'lodash'
import { selectCurrentUser } from 'xpub-selectors'
import {
get as apiGet,
create,
......@@ -73,6 +74,15 @@ export const selectFechingInvite = state =>
export const selectFetchingDecision = state =>
get(state, 'reviewers.fetching.decision') || false
export const selectInvitation = (state, collectionId) => {
const currentUser = selectCurrentUser(state)
const collection = state.collections.find(c => c.id === collectionId)
const invitations = get(collection, 'invitations') || []
return invitations.find(
i => i.userId === currentUser.id && i.role === 'reviewer' && !i.hasAnswer,
)
}
export const getCollectionReviewers = collectionId => dispatch => {
dispatch(getReviewersRequest())
return apiGet(`/collections/${collectionId}/invitations?role=reviewer`).then(
......
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