From c050d36d6ed9293c190ecc8e2913a534a3c8b1dd Mon Sep 17 00:00:00 2001
From: Bogdan Cochior <bogdan.cochior@thinslices.com>
Date: Thu, 20 Sep 2018 16:56:05 +0300
Subject: [PATCH] fix(handlingEditor): fix invite handling editor

---
 packages/component-faraday-selectors/src/index.js  | 14 ++++++++------
 .../src/manuscriptDetails/ManuscriptHeader.js      |  8 ++++----
 packages/component-manuscript/src/redux/editors.js | 11 ++++++++---
 3 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/packages/component-faraday-selectors/src/index.js b/packages/component-faraday-selectors/src/index.js
index 48940b4c6..cf7ada724 100644
--- a/packages/component-faraday-selectors/src/index.js
+++ b/packages/component-faraday-selectors/src/index.js
@@ -174,13 +174,15 @@ export const pendingHEInvitation = (state, collectionId) =>
         i.role === 'handlingEditor' &&
         !i.hasAnswer,
     )
+    .value()
 
-const parseInvitedHE = (handlingEditor = {}, state, collectionId) => ({
-  ...handlingEditor,
-  name: pendingHEInvitation(state, collectionId)
-    ? 'Invited'
-    : handlingEditor.name,
-})
+const parseInvitedHE = (handlingEditor, state, collectionId) =>
+  handlingEditor && {
+    ...handlingEditor,
+    name: pendingHEInvitation(state, collectionId)
+      ? 'Invited'
+      : handlingEditor.name,
+  }
 const hideCustomIdStatuses = ['draft', 'technicalChecks']
 export const newestFirstParseDashboard = (state, items) =>
   chain(items)
diff --git a/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptHeader.js b/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptHeader.js
index 26afbcc9d..a4d5c432c 100644
--- a/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptHeader.js
+++ b/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptHeader.js
@@ -99,21 +99,20 @@ export default compose(
       heInvitation,
       resendInvitation,
       revokeInvitation,
-      pendingInvitation,
+      pendingInvitation = {},
       handlingEditors = [],
-      currentUser: { canAssignHE, id: currentUserId },
+      currentUser: { permissions: { canAssignHE }, id: currentUserId },
       collection: { handlingEditor },
     }) => () => {
       if (pendingInvitation.userId === currentUserId) {
         return <Text ml={1}>Invited</Text>
       }
-      if (pendingInvitation) {
+      if (pendingInvitation.userId) {
         const person = chain(handlingEditors)
           .filter(he => he.id === pendingInvitation.userId)
           .map(he => ({ ...he, name: `${he.firstName} ${he.lastName}` }))
           .first()
           .value()
-
         return (
           <PersonInvitation
             isFetching={isFetching}
@@ -129,6 +128,7 @@ export default compose(
       if (heInvitation) {
         return <Text ml={1}>{handlingEditor.name}</Text>
       }
+
       if (canAssignHE) {
         return (
           <Button ml={1} onClick={inviteHE} primary size="small">
diff --git a/packages/component-manuscript/src/redux/editors.js b/packages/component-manuscript/src/redux/editors.js
index e39a801a4..794f4266b 100644
--- a/packages/component-manuscript/src/redux/editors.js
+++ b/packages/component-manuscript/src/redux/editors.js
@@ -23,15 +23,20 @@ export const selectHandlingEditors = state =>
     .filter(editor => editor.isActive && editor.isConfirmed)
     .value()
 
+const canAssignHEStatuses = ['submitted']
 export const canAssignHE = (state, collectionId = '') => {
   const isEIC = currentUserIs(state, 'adminEiC')
-  const hasHE = chain(state)
+  const collection = chain(state)
     .get('collections', [])
     .find(c => c.id === collectionId)
-    .get('handlingEditor')
     .value()
+  const hasHE = get(collection, 'handlingEditor')
 
-  return isEIC && !hasHE
+  return (
+    isEIC &&
+    !hasHE &&
+    canAssignHEStatuses.includes(get(collection, 'status', 'draft'))
+  )
 }
 
 const editorsRequest = () => ({ type: EDITORS_REQUEST })
-- 
GitLab