From 222191aa81184902756230fb42f89e0bc3c85534 Mon Sep 17 00:00:00 2001
From: Alexandru Munteanu <alexandru.munt@gmail.com>
Date: Fri, 18 May 2018 15:10:23 +0300
Subject: [PATCH] fix(various bug fixes and improvements on make
 recommendation):

N
---
 .../src/components/ReviewerReportForm.js      | 12 +++++------
 .../src/components/ReviewsAndReports.js       |  1 +
 .../src/components/Dashboard/DashboardCard.js | 20 +++++++++++++++++--
 .../Invitations/ReviewerBreakdown.js          |  4 ++--
 .../MakeRecommendation/RecommendWizard.js     | 10 +++++++---
 5 files changed, 34 insertions(+), 13 deletions(-)

diff --git a/packages/component-manuscript/src/components/ReviewerReportForm.js b/packages/component-manuscript/src/components/ReviewerReportForm.js
index 11f97c4f1..ea57788bd 100644
--- a/packages/component-manuscript/src/components/ReviewerReportForm.js
+++ b/packages/component-manuscript/src/components/ReviewerReportForm.js
@@ -7,27 +7,27 @@ import styled, { css } from 'styled-components'
 import {
   th,
   Menu,
-  ValidatedField,
   Icon,
   Button,
-  ErrorText,
   Spinner,
+  ErrorText,
+  ValidatedField,
 } from '@pubsweet/ui'
 import { compose, withHandlers, withProps } from 'recompose'
 import {
   reduxForm,
   isSubmitting,
-  change as changeForm,
   getFormValues,
+  change as changeForm,
 } from 'redux-form'
 import AutosaveIndicator from 'pubsweet-component-wizard/src/components/AutosaveIndicator'
 
 import {
   uploadFile,
   deleteFile,
+  getFileError,
   getSignedUrl,
   getRequestStatus,
-  getFileError,
 } from 'pubsweet-components-faraday/src/redux/files'
 import {
   FileItem,
@@ -35,8 +35,8 @@ import {
 } from 'pubsweet-components-faraday/src/components/Files'
 
 import {
-  ConfirmationModal,
   withModal2,
+  ConfirmationModal,
 } from 'pubsweet-component-modal/src/components'
 import {
   selectError,
@@ -46,9 +46,9 @@ import {
 } from 'pubsweet-components-faraday/src/redux/recommendations'
 
 import {
-  parseReviewResponseToForm,
   onReviewSubmit,
   onReviewChange,
+  parseReviewResponseToForm,
 } from './utils'
 
 const guidelinesLink =
diff --git a/packages/component-manuscript/src/components/ReviewsAndReports.js b/packages/component-manuscript/src/components/ReviewsAndReports.js
index be8d50105..9010bcba8 100644
--- a/packages/component-manuscript/src/components/ReviewsAndReports.js
+++ b/packages/component-manuscript/src/components/ReviewsAndReports.js
@@ -87,6 +87,7 @@ const ReviewsAndReports = ({
             <ReviewReportCard report={report} />
           ) : (
             <ReviewerReportForm
+              modalKey={`review-${project.id}`}
               project={project}
               review={review}
               version={version}
diff --git a/packages/components-faraday/src/components/Dashboard/DashboardCard.js b/packages/components-faraday/src/components/Dashboard/DashboardCard.js
index a1ca7295e..f7fb17e8a 100644
--- a/packages/components-faraday/src/components/Dashboard/DashboardCard.js
+++ b/packages/components-faraday/src/components/Dashboard/DashboardCard.js
@@ -4,7 +4,7 @@ import { connect } from 'react-redux'
 import PropTypes from 'prop-types'
 import { Button, Icon, th } from '@pubsweet/ui'
 import styled, { css, withTheme } from 'styled-components'
-import { compose, getContext, withHandlers } from 'recompose'
+import { compose, getContext, withHandlers, withProps } from 'recompose'
 import {
   withModal,
   ConfirmationModal,
@@ -35,6 +35,7 @@ const DashboardCard = ({
   showAbstractModal,
   canInviteReviewers,
   showConfirmationModal,
+  canMakeRecommendation,
   ...rest
 }) => {
   const { submitted, title, type } = parseVersion(version)
@@ -59,7 +60,7 @@ const DashboardCard = ({
             />
           </LeftDetails>
           <RightDetails flex={2}>
-            {isHE && (
+            {canMakeRecommendation && (
               <Recommendation
                 collectionId={project.id}
                 fragmentId={version.id}
@@ -165,6 +166,16 @@ const DashboardCard = ({
   ) : null
 }
 
+const isHEToManuscript = (state, collectionId) => {
+  const currentUserId = get(state, 'currentUser.user.id')
+  const collection = state.collections.find(c => c.id === collectionId) || {}
+  const userInvitation = collection.invitations.find(
+    i => i.role === 'handlingEditor' && i.userId === currentUserId,
+  )
+
+  return userInvitation ? userInvitation.isAccepted : false
+}
+
 export default compose(
   getContext({ journal: PropTypes.object, currentUser: PropTypes.object }),
   withTheme,
@@ -175,6 +186,11 @@ export default compose(
   connect((state, { project }) => ({
     isHE: currentUserIs(state, 'handlingEditor'),
     invitation: selectInvitation(state, project.id),
+    isHEToManuscript: isHEToManuscript(state, project.id),
+  })),
+  withProps(({ isHEToManuscript, project }) => ({
+    canMakeRecommendation:
+      isHEToManuscript && get(project, 'status') === 'reviewCompleted',
   })),
   withHandlers({
     canInviteReviewers: ({ currentUser, project }) => () => {
diff --git a/packages/components-faraday/src/components/Invitations/ReviewerBreakdown.js b/packages/components-faraday/src/components/Invitations/ReviewerBreakdown.js
index 58721de0c..2415e9a83 100644
--- a/packages/components-faraday/src/components/Invitations/ReviewerBreakdown.js
+++ b/packages/components-faraday/src/components/Invitations/ReviewerBreakdown.js
@@ -1,9 +1,9 @@
 import React from 'react'
 import { th } from '@pubsweet/ui'
 import { connect } from 'react-redux'
-import { selectFragment, selectCollection } from 'xpub-selectors'
 import styled, { css } from 'styled-components'
 import { compose, withHandlers } from 'recompose'
+import { selectFragment, selectCollection } from 'xpub-selectors'
 import { selectReviewers } from 'pubsweet-components-faraday/src/redux/reviewers'
 
 const ReviewerBreakdown = ({
@@ -58,7 +58,7 @@ export default compose(
         <BreakdownText>
           <b>{reviewers.length}</b> invited,
           <b> {report.accepted}</b> agreed,
-          <b> {report.declined}</b> declined
+          <b> {report.declined}</b> declined,
           <b> {report.submitted}</b> submitted
         </BreakdownText>
       )
diff --git a/packages/components-faraday/src/components/MakeRecommendation/RecommendWizard.js b/packages/components-faraday/src/components/MakeRecommendation/RecommendWizard.js
index 350156cab..e6c32a080 100644
--- a/packages/components-faraday/src/components/MakeRecommendation/RecommendWizard.js
+++ b/packages/components-faraday/src/components/MakeRecommendation/RecommendWizard.js
@@ -19,20 +19,20 @@ const RecommendWizard = ({
   decision,
   nextStep,
   prevStep,
-  hideModal,
+  closeModal,
   submitForm,
   isFetching,
   recommendationError,
   ...rest
 }) => (
   <FormItems.RootContainer>
-    <IconButton onClick={hideModal}>
+    <IconButton onClick={closeModal}>
       <Icon primary>x</Icon>
     </IconButton>
     {step === 0 && (
       <StepOne
         disabled={!decision}
-        hideModal={hideModal}
+        hideModal={closeModal}
         onSubmit={nextStep}
         {...rest}
       />
@@ -65,6 +65,10 @@ export default compose(
   withHandlers({
     nextStep: ({ changeStep }) => () => changeStep(s => s + 1),
     prevStep: ({ changeStep }) => () => changeStep(s => (s === 0 ? 0 : s - 1)),
+    closeModal: ({ hideModal, resetForm }) => () => {
+      hideModal()
+      resetForm('recommendation')
+    },
     submitForm: ({
       showModal,
       hideModal,
-- 
GitLab