From 3acbbbb89997179c9548a6be35ce804394647f64 Mon Sep 17 00:00:00 2001
From: Bogdan Cochior <bogdan.cochior@thinslices.com>
Date: Wed, 3 Oct 2018 16:16:32 +0300
Subject: [PATCH] fix(reviewerDetails): fix eic not seeing the reports

---
 .../component-faraday-selectors/src/index.js  |  28 +++--
 .../src/contextualBoxes/ReviewerDetails.js    | 100 ++++++++++--------
 .../src/components/ManuscriptLayout.js        |   4 +-
 .../src/components/ManuscriptPage.js          |   2 +
 4 files changed, 79 insertions(+), 55 deletions(-)

diff --git a/packages/component-faraday-selectors/src/index.js b/packages/component-faraday-selectors/src/index.js
index 24418c030..25da3448f 100644
--- a/packages/component-faraday-selectors/src/index.js
+++ b/packages/component-faraday-selectors/src/index.js
@@ -28,18 +28,34 @@ export const currentUserIs = ({ currentUser: { user } }, role) => {
   }
 }
 
-const cannotInviteReviewersStatuses = ['draft', 'rejected', 'published']
+const canInviteReviewersStatuses = [
+  'heAssigned',
+  'reviewersInvited',
+  'underReview',
+  'reviewCompleted',
+]
 export const canInviteReviewers = (state, collection) => {
-  if (
-    cannotInviteReviewersStatuses.includes(get(collection, 'status', 'draft'))
-  )
+  if (!canInviteReviewersStatuses.includes(get(collection, 'status', 'draft')))
     return false
 
   const user = selectCurrentUser(state)
-  const isStaff = currentUserIs(state, 'isAdmin')
+  const isAdmin = currentUserIs(state, 'isAdmin')
   const { isAccepted, id: heId } = get(collection, 'handlingEditor', {})
 
-  return isAccepted && (user.id === heId || isStaff)
+  return isAccepted && (user.id === heId || isAdmin)
+}
+
+const cannotViewReviewersDetails = [
+  'draft',
+  'technicalChecks',
+  'submitted',
+  'heInvited',
+]
+export const canViewReviewersDetails = (state, collection = {}) => {
+  if (cannotViewReviewersDetails.includes(get(collection, 'status', 'draft'))) {
+    return false
+  }
+  return canViewReports(state, collection.id)
 }
 
 export const getUserToken = ({ currentUser }) =>
diff --git a/packages/component-faraday-ui/src/contextualBoxes/ReviewerDetails.js b/packages/component-faraday-ui/src/contextualBoxes/ReviewerDetails.js
index 153dbfa01..7362a5e07 100644
--- a/packages/component-faraday-ui/src/contextualBoxes/ReviewerDetails.js
+++ b/packages/component-faraday-ui/src/contextualBoxes/ReviewerDetails.js
@@ -25,31 +25,34 @@ const ReviewerDetails = ({
   fragment,
   invitations,
   previewFile,
-  currentUser,
   downloadFile,
-  canSeeReports,
+  canInviteReviewers,
   onInviteReviewer,
   onResendReviewerInvite,
   onRevokeReviewerInvite,
-}) => (
-  <ContextualBox
-    label="Reviewer details"
-    rightChildren={<ReviewerBreakdown fitContent fragment={fragment} mr={1} />}
-    startExpanded
-  >
-    <Tabs>
-      {({ selectedTab, changeTab }) => (
-        <Fragment>
-          <TabsHeader>
-            <TabButton
-              ml={1}
-              mr={1}
-              onClick={() => changeTab(0)}
-              selected={selectedTab === 0}
-            >
-              <H4>Reviewer Details</H4>
-            </TabButton>
-            {canSeeReports && (
+  canViewReviewersDetails,
+}) =>
+  canViewReviewersDetails ? (
+    <ContextualBox
+      label="Reviewer Details & Reports"
+      rightChildren={
+        <ReviewerBreakdown fitContent fragment={fragment} mr={1} />
+      }
+      startExpanded
+    >
+      <Tabs>
+        {({ selectedTab, changeTab }) => (
+          <Fragment>
+            <TabsHeader>
+              <TabButton
+                ml={1}
+                mr={1}
+                onClick={() => changeTab(0)}
+                selected={selectedTab === 0}
+              >
+                <H4>Reviewer Details</H4>
+              </TabButton>
+
               <TabButton
                 ml={1}
                 mr={1}
@@ -59,24 +62,24 @@ const ReviewerDetails = ({
                 <H4>Reviewer Reports</H4>
                 <Tag mr={1}>{reports.length}</Tag>
               </TabButton>
-            )}
-          </TabsHeader>
-          <TabContent>
-            {selectedTab === 0 && (
-              <Fragment>
-                <InviteReviewers
-                  modalKey="invite-reviewers"
-                  onInvite={onInviteReviewer}
-                />
-                <ReviewersTable
-                  invitations={invitations}
-                  onResendReviewerInvite={onResendReviewerInvite}
-                  onRevokeReviewerInvite={onRevokeReviewerInvite}
-                />
-              </Fragment>
-            )}
-            {canSeeReports &&
-              selectedTab === 1 && (
+            </TabsHeader>
+            <TabContent>
+              {selectedTab === 0 && (
+                <Fragment>
+                  {canInviteReviewers && (
+                    <InviteReviewers
+                      modalKey="invite-reviewers"
+                      onInvite={onInviteReviewer}
+                    />
+                  )}
+                  <ReviewersTable
+                    invitations={invitations}
+                    onResendReviewerInvite={onResendReviewerInvite}
+                    onRevokeReviewerInvite={onRevokeReviewerInvite}
+                  />
+                </Fragment>
+              )}
+              {selectedTab === 1 && (
                 <Fragment>
                   {reports.length === 0 && (
                     <Text align="center">No reports submitted yet.</Text>
@@ -94,12 +97,12 @@ const ReviewerDetails = ({
                   ))}
                 </Fragment>
               )}
-          </TabContent>
-        </Fragment>
-      )}
-    </Tabs>
-  </ContextualBox>
-)
+            </TabContent>
+          </Fragment>
+        )}
+      </Tabs>
+    </ContextualBox>
+  ) : null
 
 export default compose(
   withFilePreview,
@@ -113,8 +116,11 @@ export default compose(
     reports: reviewerReports.filter(r => r.submittedOn),
   })),
   withProps(({ currentUser }) => ({
-    canSeeReports:
-      get(currentUser, 'isEIC', false) || get(currentUser, 'isHE', false),
+    canInviteReviewers: get(currentUser, 'permissions.canInviteReviewers'),
+    canViewReviewersDetails: get(
+      currentUser,
+      'permissions.canViewReviewersDetails',
+    ),
   })),
 )(ReviewerDetails)
 
diff --git a/packages/component-manuscript/src/components/ManuscriptLayout.js b/packages/component-manuscript/src/components/ManuscriptLayout.js
index 969409625..75d345cf6 100644
--- a/packages/component-manuscript/src/components/ManuscriptLayout.js
+++ b/packages/component-manuscript/src/components/ManuscriptLayout.js
@@ -94,7 +94,7 @@ const ManuscriptLayout = ({
           getSignedUrl={getSignedUrl}
         />
 
-        {get(currentUser, 'permisions.canViewReports', true) &&
+        {get(currentUser, 'permissions.canViewReports', true) &&
           !!editorialRecommendations.length && (
             <EditorialCommentCard
               journal={journal}
@@ -170,7 +170,7 @@ const ManuscriptLayout = ({
           />
         )}
 
-        {get(currentUser, 'permissions.canInviteReviewers', false) && (
+        {get(currentUser, 'permissions.canViewReviewersDetails', false) && (
           <ReviewerDetails
             currentUser={currentUser}
             fragment={fragment}
diff --git a/packages/component-manuscript/src/components/ManuscriptPage.js b/packages/component-manuscript/src/components/ManuscriptPage.js
index a28b8024f..31faec409 100644
--- a/packages/component-manuscript/src/components/ManuscriptPage.js
+++ b/packages/component-manuscript/src/components/ManuscriptPage.js
@@ -46,6 +46,7 @@ import {
   pendingHEInvitation,
   currentUserIsReviewer,
   parseCollectionDetails,
+  canViewReviewersDetails,
   pendingReviewerInvitation,
   canOverrideTechnicalChecks,
   getOwnPendingRecommendation,
@@ -150,6 +151,7 @@ export default compose(
           canMakeRevision: canMakeRevision(state, collection, fragment),
           canMakeDecision: canMakeDecision(state, collection, fragment),
           canEditManuscript: canEditManuscript(state, collection, fragment),
+          canViewReviewersDetails: canViewReviewersDetails(state, collection),
           canOverrideTechChecks: canOverrideTechnicalChecks(state, collection),
         },
       },
-- 
GitLab