From 296c248de3c51fc96010e0f188776b59f2dff3cd Mon Sep 17 00:00:00 2001
From: Anca Ursachi <anca.ursachi@thinslices.com>
Date: Mon, 17 Dec 2018 13:50:52 +0200
Subject: [PATCH] fix(HERecommendation): Message for Author box should be
 mandatory when selecting Minor revision/Majo

---
 .../src/contextualBoxes/HERecommendation.js   | 36 +++++++++++++------
 .../ManuscriptEicDecision.js                  | 32 ++++++++++++++---
 .../src/components/ManuscriptLayout.js        |  1 +
 3 files changed, 55 insertions(+), 14 deletions(-)

diff --git a/packages/component-faraday-ui/src/contextualBoxes/HERecommendation.js b/packages/component-faraday-ui/src/contextualBoxes/HERecommendation.js
index a07bbeaff..c96a30395 100644
--- a/packages/component-faraday-ui/src/contextualBoxes/HERecommendation.js
+++ b/packages/component-faraday-ui/src/contextualBoxes/HERecommendation.js
@@ -79,6 +79,10 @@ const HERecommendation = ({
   handleSubmit,
   formValues,
   highlight,
+  rejectRecommendation,
+  publishRecommendation,
+  minorRevisionRecommendation,
+  majorRevisionRecommendation,
   ...rest
 }) => (
   <ContextualBox
@@ -111,31 +115,38 @@ const HERecommendation = ({
           />
         </ItemOverrideAlert>
       </Row>
-      {get(formValues, 'recommendation') === 'minor' ||
-      get(formValues, 'recommendation') === 'major' ? (
+      {(minorRevisionRecommendation || majorRevisionRecommendation) && (
         <Row mt={2}>
           <ResponsiveItem
             data-test-id="editorial-recommendation-message-for-author"
             mr={1}
             vertical
           >
-            <Label>
-              Message for Author <Text secondary>Optional</Text>
-            </Label>
-            <ValidatedField component={Textarea} name="public" />
+            <Label required>Message for Author</Label>
+            <ValidatedField
+              component={Textarea}
+              name="public"
+              validate={[required]}
+            />
           </ResponsiveItem>
         </Row>
-      ) : (
+      )}
+      {(publishRecommendation || rejectRecommendation) && (
         <ResponsiveRow mt={2}>
           <ResponsiveItem
             data-test-id="editorial-recommendation-message-for-author"
             mr={1}
             vertical
           >
-            <Label>
-              Message for Author <Text secondary>Optional</Text>
+            <Label required={!!rejectRecommendation}>
+              Message for Author{' '}
+              {publishRecommendation ? <Text secondary> Optional</Text> : ''}
             </Label>
-            <ValidatedField component={Textarea} name="public" />
+            <ValidatedField
+              component={Textarea}
+              name="public"
+              validate={rejectRecommendation ? [required] : false}
+            />
           </ResponsiveItem>
 
           <ResponsiveItem
@@ -199,9 +210,14 @@ export default compose(
     confirmMessage: options.find(
       o => o.value === get(formValues, 'recommendation', 'publish'),
     ).button,
+    rejectRecommendation: get(formValues, 'recommendation') === 'reject',
+    publishRecommendation: get(formValues, 'recommendation') === 'publish',
+    minorRevisionRecommendation: get(formValues, 'recommendation') === 'minor',
+    majorRevisionRecommendation: get(formValues, 'recommendation') === 'major',
   })),
   reduxForm({
     form: 'HERecommendation',
+    destroyOnUnmount: false,
     onSubmit: (
       values,
       dispatch,
diff --git a/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptEicDecision.js b/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptEicDecision.js
index 3224fd577..982b3a240 100644
--- a/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptEicDecision.js
+++ b/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptEicDecision.js
@@ -1,5 +1,5 @@
 import React from 'react'
-import { get, initial } from 'lodash'
+import { get, initial, chain } from 'lodash'
 import { compose, withProps } from 'recompose'
 import styled from 'styled-components'
 import { reduxForm } from 'redux-form'
@@ -57,11 +57,12 @@ const ManuscriptEicDecision = ({
   options,
   decision,
   formValues,
+  collection,
   isFetching,
   handleSubmit,
   messagesLabel,
-  collection,
   submitDecision,
+  lastHeRecommendation,
   ...rest
 }) => (
   <ContextualBox
@@ -81,7 +82,8 @@ const ManuscriptEicDecision = ({
         </ItemOverrideAlert>
       </Row>
 
-      {decision !== 'publish' && (
+      {(decision === 'revision' ||
+        decision === 'return-to-handling-editor') && (
         <Row mt={2} pl={1} pr={1}>
           <Item vertical>
             <Label required={decision !== 'reject'}>
@@ -95,6 +97,22 @@ const ManuscriptEicDecision = ({
           </Item>
         </Row>
       )}
+      {decision === 'reject' && (
+        <Row mt={2} pl={1} pr={1}>
+          <Item vertical>
+            <Label required={lastHeRecommendation !== 'reject'}>
+              {messagesLabel[get(formValues, 'decision', 'reject')]}
+            </Label>
+            <ValidatedField
+              component={ValidatedTextArea}
+              name="message"
+              validate={
+                lastHeRecommendation !== 'reject' ? [required] : undefined
+              }
+            />
+          </Item>
+        </Row>
+      )}
 
       <Row justify="flex-end" mt={1} pr={1}>
         <Button onClick={handleSubmit} primary size="medium">
@@ -112,7 +130,7 @@ export default compose(
     modalKey: 'eic-decision',
     modalComponent: MultiAction,
   })),
-  withProps(({ formValues, collection }) => ({
+  withProps(({ formValues, collection, fragment }) => ({
     modalTitle: eicDecisions.find(
       o => o.value === get(formValues, 'decision', 'publish'),
     ).modalTitle,
@@ -124,9 +142,15 @@ export default compose(
       eicDecisions,
       get(collection, 'status', 'submitted'),
     ),
+    lastHeRecommendation: chain(fragment)
+      .get('recommendations', [])
+      .last()
+      .get('recommendation', '')
+      .value(),
   })),
   reduxForm({
     form: 'eic-decision',
+    destroyOnUnmount: false,
     onSubmit: (
       values,
       dispatch,
diff --git a/packages/component-manuscript/src/components/ManuscriptLayout.js b/packages/component-manuscript/src/components/ManuscriptLayout.js
index 64fa83a98..6ebe36e83 100644
--- a/packages/component-manuscript/src/components/ManuscriptLayout.js
+++ b/packages/component-manuscript/src/components/ManuscriptLayout.js
@@ -284,6 +284,7 @@ const ManuscriptLayout = ({
               collection={collection}
               expanded={eicDecisionExpanded}
               formValues={get(formValues, 'eicDecision')}
+              fragment={fragment}
               highlight={editorialRecommendations.length > 0}
               messagesLabel={messagesLabel}
               mt={2}
-- 
GitLab