From 7a357604cb24c96113b8343f1b5b1d6e87ba1145 Mon Sep 17 00:00:00 2001
From: Bogdan Cochior <bogdan.cochior@thinslices.com>
Date: Mon, 7 May 2018 16:01:09 +0300
Subject: [PATCH] feat(reports): wip: add section by role

---
 .../src/components/Files.js                   |  2 +-
 .../src/components/ManuscriptLayout.js        |  7 ++-
 .../src/components/ManuscriptPage.js          | 11 +++++
 .../src/components/ReviewsAndReports.js       | 48 ++++++++++++++-----
 .../Reviewers/ReviewersDetailsList.js         |  2 +
 .../components-faraday/src/redux/reviewers.js | 13 +++++
 6 files changed, 68 insertions(+), 15 deletions(-)

diff --git a/packages/component-manuscript/src/components/Files.js b/packages/component-manuscript/src/components/Files.js
index cd0aa6f75..e48eab69b 100644
--- a/packages/component-manuscript/src/components/Files.js
+++ b/packages/component-manuscript/src/components/Files.js
@@ -143,8 +143,8 @@ const Header = styled.div`
   flex-direction: row;
 
   & span {
-    ${defaultText};
     margin-right: ${th('subGridUnit')};
+    ${defaultText};
     margin-top: ${th('subGridUnit')};
     text-transform: uppercase;
   }
diff --git a/packages/component-manuscript/src/components/ManuscriptLayout.js b/packages/component-manuscript/src/components/ManuscriptLayout.js
index 644359cdf..a1cfcec16 100644
--- a/packages/component-manuscript/src/components/ManuscriptLayout.js
+++ b/packages/component-manuscript/src/components/ManuscriptLayout.js
@@ -21,6 +21,7 @@ import {
 
 const ManuscriptLayout = ({
   currentUser,
+  currentUserIs,
   editorInChief,
   updateManuscript,
   project,
@@ -51,7 +52,11 @@ const ManuscriptLayout = ({
         fragment={version}
         previewFile={previewFile}
       />
-      <ReviewsAndReports project={project} version={version} />
+      <ReviewsAndReports
+        currentUserIs={currentUserIs}
+        project={project}
+        version={version}
+      />
     </Container>
     <SideBar flex={1}>
       <SideBarActions
diff --git a/packages/component-manuscript/src/components/ManuscriptPage.js b/packages/component-manuscript/src/components/ManuscriptPage.js
index 571a689a9..bef5a0809 100644
--- a/packages/component-manuscript/src/components/ManuscriptPage.js
+++ b/packages/component-manuscript/src/components/ManuscriptPage.js
@@ -89,6 +89,17 @@ export default compose(
         setEiC(`${firstName} ${lastName}`)
       }
     },
+    currentUserIs: ({ currentUser }) => type => {
+      const isAdmin = get(currentUser, 'admin')
+      const isEic = get(currentUser, 'editorInChief')
+      const isHe = get(currentUser, 'handlingEditor')
+      switch (type) {
+        case 'staff':
+          return isAdmin || isEic || isHe
+        default:
+          return false
+      }
+    },
   }),
   lifecycle({
     componentDidMount() {
diff --git a/packages/component-manuscript/src/components/ReviewsAndReports.js b/packages/component-manuscript/src/components/ReviewsAndReports.js
index bed0a757d..6a8ead1f0 100644
--- a/packages/component-manuscript/src/components/ReviewsAndReports.js
+++ b/packages/component-manuscript/src/components/ReviewsAndReports.js
@@ -1,15 +1,15 @@
-import React from 'react'
+import React, { Fragment } from 'react'
 import { th } from '@pubsweet/ui'
 import { connect } from 'react-redux'
 import styled from 'styled-components'
 import { compose, withHandlers, lifecycle } from 'recompose'
-
 import { ReviewerBreakdown } from 'pubsweet-components-faraday/src/components/Invitations'
 import ReviewersDetailsList from 'pubsweet-components-faraday/src/components/Reviewers/ReviewersDetailsList'
 import {
   selectReviewers,
   selectFetchingReviewers,
   getCollectionReviewers,
+  currentUserIsReviewer,
 } from 'pubsweet-components-faraday/src/redux/reviewers'
 
 import Tabs from '../molecules/Tabs'
@@ -30,23 +30,45 @@ const getTabSections = (collectionId, reviewers) => [
   },
 ]
 
-const ReviewsAndReports = ({ project, reviewers = [] }) => (
-  <Root>
-    <Expandable
-      label="Reviewers & Reports"
-      rightHTML={<ReviewerBreakdown type="reviewer" values={reviewers || []} />}
-      startExpanded
-    >
-      <Tabs activeKey={1} sections={getTabSections(project.id, reviewers)} />
-    </Expandable>
-  </Root>
+const ReviewsAndReports = ({
+  project,
+  reviewers = [],
+  isReviewer,
+  currentUserIs,
+}) => (
+  <Fragment>
+    {currentUserIs('staff') && (
+      <Root>
+        <Expandable
+          label="Reviewers & Reports"
+          rightHTML={
+            <ReviewerBreakdown type="reviewer" values={reviewers || []} />
+          }
+          startExpanded
+        >
+          <Tabs
+            activeKey={1}
+            sections={getTabSections(project.id, reviewers)}
+          />
+        </Expandable>
+      </Root>
+    )}
+    {isReviewer && (
+      <Root>
+        <Expandable label="Your Report" startExpanded>
+          <div>Form here, to be implemented</div>
+        </Expandable>
+      </Root>
+    )}
+  </Fragment>
 )
 
 export default compose(
   connect(
-    state => ({
+    (state, { project }) => ({
       reviewers: selectReviewers(state),
       fetchingReviewers: selectFetchingReviewers(state),
+      isReviewer: currentUserIsReviewer(state, project.id),
     }),
     { getCollectionReviewers },
   ),
diff --git a/packages/components-faraday/src/components/Reviewers/ReviewersDetailsList.js b/packages/components-faraday/src/components/Reviewers/ReviewersDetailsList.js
index 36be6c453..7927e80b2 100644
--- a/packages/components-faraday/src/components/Reviewers/ReviewersDetailsList.js
+++ b/packages/components-faraday/src/components/Reviewers/ReviewersDetailsList.js
@@ -233,6 +233,7 @@ const Table = styled.table`
     font-weight: bold;
     height: 40px;
     text-align: left;
+    line-height: 1.5;
   }
 `
 const Row = styled.tr`
@@ -242,6 +243,7 @@ const Row = styled.tr`
   font-size: ${th('fontSizeBaseSmall')};
   height: 40px;
   text-align: left;
+  line-height: 1.5;
 
   &:hover {
     background-color: ${th('backgroundColor')};
diff --git a/packages/components-faraday/src/redux/reviewers.js b/packages/components-faraday/src/redux/reviewers.js
index 66be556fd..3f0a0d2d1 100644
--- a/packages/components-faraday/src/redux/reviewers.js
+++ b/packages/components-faraday/src/redux/reviewers.js
@@ -90,6 +90,19 @@ export const selectInvitation = (state, collectionId) => {
   )
 }
 
+export const currentUserIsReviewer = (state, collectionId) => {
+  const currentUser = selectCurrentUser(state)
+  const collection = state.collections.find(c => c.id === collectionId)
+  const invitations = get(collection, 'invitations') || []
+  return !!invitations.find(
+    i =>
+      i.userId === currentUser.id &&
+      i.role === 'reviewer' &&
+      i.hasAnswer &&
+      i.isAccepted,
+  )
+}
+
 export const getCollectionReviewers = collectionId => dispatch => {
   dispatch(getReviewersRequest())
   return apiGet(`/collections/${collectionId}/invitations?role=reviewer`).then(
-- 
GitLab