From e6aa23fdf0558195e9c62bc38c9cd4342c287e35 Mon Sep 17 00:00:00 2001
From: Tania Fecheta <tania.fecheta@thinslices.com>
Date: Mon, 3 Dec 2018 15:30:41 +0200
Subject: [PATCH] feat(manuscriptEicDecision): add Request Revision in the eic
 decisions dropdown

---
 .../component-faraday-selectors/src/index.js  | 10 +----
 .../ManuscriptEicDecision.js                  | 40 ++++++++++++-------
 .../src/components/ManuscriptLayout.js        |  1 +
 .../app/config/journal/recommendations.js     |  4 ++
 packages/xpub-faraday/config/validations.js   |  1 +
 5 files changed, 32 insertions(+), 24 deletions(-)

diff --git a/packages/component-faraday-selectors/src/index.js b/packages/component-faraday-selectors/src/index.js
index 1493dcaf0..3a774ca94 100644
--- a/packages/component-faraday-selectors/src/index.js
+++ b/packages/component-faraday-selectors/src/index.js
@@ -270,17 +270,9 @@ export const getHERecommendation = (state, collectionId, fragmentId) => {
   )
 }
 
-const canMakeDecisionStatuses = [
-  'submitted',
-  'pendingApproval',
-  'underReview',
-  'reviewCompleted',
-]
 export const canMakeDecision = (state, collection = {}) => {
-  const status = get(collection, 'status', 'draft')
-
   const isEIC = currentUserIs(state, 'adminEiC')
-  return isEIC && canMakeDecisionStatuses.includes(status)
+  return isEIC
 }
 
 const collectionReviewerReports = state =>
diff --git a/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptEicDecision.js b/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptEicDecision.js
index dc5314f61..9d1e9b3d8 100644
--- a/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptEicDecision.js
+++ b/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptEicDecision.js
@@ -33,6 +33,12 @@ const eicDecisions = [
     modalTitle: 'Publish Manuscript',
     modalSubtitle: 'A publish decision is final',
   },
+  {
+    value: 'revision',
+    label: 'Request Revision',
+    modalTitle: 'Request Revision',
+    modalSubtitle: 'A request revision decision is final',
+  },
   {
     value: 'reject',
     label: 'Reject',
@@ -41,9 +47,17 @@ const eicDecisions = [
   },
 ]
 
+const filterOptions = (eicDecisions, status) => {
+  if (status === 'submitted') return eicDecisions.slice(2)
+  if (status === 'pendingApproval') return eicDecisions
+  return [last(eicDecisions)]
+}
 const ManuscriptEicDecision = ({
-  isFetching,
+  status,
+  options,
+  decision,
   formValues,
+  isFetching,
   handleSubmit,
   messagesLabel,
   collection = {},
@@ -59,32 +73,23 @@ const ManuscriptEicDecision = ({
         <ItemOverrideAlert flex={0} vertical>
           <Label required>Decision</Label>
           <ValidatedField
-            component={input => (
-              <Menu
-                {...input}
-                options={
-                  get(collection, 'status', 'submitted') !== 'pendingApproval'
-                    ? [last(eicDecisions)]
-                    : eicDecisions
-                }
-              />
-            )}
+            component={input => <Menu {...input} options={options} />}
             name="decision"
             validate={[required]}
           />
         </ItemOverrideAlert>
       </Row>
 
-      {get(formValues, 'decision') !== 'publish' && (
+      {decision !== 'publish' && (
         <Row mt={2}>
           <Item vertical>
-            <Label required>
+            <Label required={decision !== 'reject'}>
               {messagesLabel[get(formValues, 'decision', 'reject')]}
             </Label>
             <ValidatedField
               component={ValidatedTextArea}
               name="message"
-              validate={[required]}
+              validate={decision !== 'reject' ? [required] : undefined}
             />
           </Item>
         </Row>
@@ -106,13 +111,18 @@ export default compose(
     modalKey: 'eic-decision',
     modalComponent: MultiAction,
   })),
-  withProps(({ formValues }) => ({
+  withProps(({ formValues, collection }) => ({
     modalTitle: eicDecisions.find(
       o => o.value === get(formValues, 'decision', 'publish'),
     ).modalTitle,
     modalSubtitle: eicDecisions.find(
       o => o.value === get(formValues, 'decision', 'publish'),
     ).modalSubtitle,
+    decision: get(formValues, 'decision'),
+    options: filterOptions(
+      eicDecisions,
+      get(collection, 'status', 'submitted'),
+    ),
   })),
   reduxForm({
     form: 'eic-decision',
diff --git a/packages/component-manuscript/src/components/ManuscriptLayout.js b/packages/component-manuscript/src/components/ManuscriptLayout.js
index 5f870ecfa..868b40830 100644
--- a/packages/component-manuscript/src/components/ManuscriptLayout.js
+++ b/packages/component-manuscript/src/components/ManuscriptLayout.js
@@ -24,6 +24,7 @@ import ReviewerReports from './ReviewerReports'
 const messagesLabel = {
   'return-to-handling-editor': 'Comments for Handling Editor',
   reject: 'Comments for Author',
+  revision: 'Comments for Author',
 }
 
 const cannotViewReviewersDetails = ['revisionRequested', 'pendingApproval']
diff --git a/packages/xpub-faraday/app/config/journal/recommendations.js b/packages/xpub-faraday/app/config/journal/recommendations.js
index 736effd19..99b50aa2d 100644
--- a/packages/xpub-faraday/app/config/journal/recommendations.js
+++ b/packages/xpub-faraday/app/config/journal/recommendations.js
@@ -15,4 +15,8 @@ module.exports = [
     value: 'reject',
     label: 'Reject',
   },
+  {
+    value: 'revision',
+    label: 'Revision',
+  },
 ]
diff --git a/packages/xpub-faraday/config/validations.js b/packages/xpub-faraday/config/validations.js
index 6d1ac18d4..c60e5f850 100644
--- a/packages/xpub-faraday/config/validations.js
+++ b/packages/xpub-faraday/config/validations.js
@@ -126,6 +126,7 @@ module.exports = {
             'reject',
             'publish',
             'revise',
+            'revision',
             'major',
             'minor',
             'return-to-handling-editor',
-- 
GitLab