diff --git a/packages/component-faraday-selectors/src/index.js b/packages/component-faraday-selectors/src/index.js index 925aac7a881fce50bf971f765a560042755bf468..4f258fa4436f16ae850c98ba02d1b201cd61e634 100644 --- a/packages/component-faraday-selectors/src/index.js +++ b/packages/component-faraday-selectors/src/index.js @@ -53,6 +53,7 @@ const cannotViewReviewersDetails = [ 'submitted', 'heInvited', ] + export const canViewReviewersDetails = (state, collection = {}) => { if (cannotViewReviewersDetails.includes(get(collection, 'status', 'draft'))) { return false @@ -60,6 +61,41 @@ export const canViewReviewersDetails = (state, collection = {}) => { return canViewReports(state, collection.id) } +const canHeViewEditorialCommentsStatuses = [ + 'revisionRequested', + 'rejected', + 'accepted', + 'inQA', +] +export const canHeViewEditorialComments = (state, collection = {}) => { + const isHE = isHEToManuscript(state, collection.id) + const status = get(collection, 'status', 'draft') + return isHE && canHeViewEditorialCommentsStatuses.includes(status) +} + +const canEICViewEditorialCommentsStatuses = ['rejected', 'accepted', 'inQA'] +export const canEICViewEditorialComments = (state, collection = {}) => { + const isEIC = currentUserIs(state, 'adminEiC') + const status = get(collection, 'status', 'draft') + return isEIC && canEICViewEditorialCommentsStatuses.includes(status) +} + +export const canViewEditorialComments = ( + state, + collection = {}, + fragmentId, +) => { + const editorialRecommentations = getFragmentEditorialComments( + state, + fragmentId, + ) + return ( + (canHeViewEditorialComments(state, collection) || + canEICViewEditorialComments(state, collection)) && + editorialRecommentations.length > 0 + ) +} + export const getUserToken = ({ currentUser }) => get(currentUser, 'user.token', '') @@ -254,6 +290,10 @@ export const getFragmentReviewerRecommendations = (state, fragmentId) => getFragmentRecommendations(state, fragmentId).filter( r => r.recommendationType === 'review', ) +const getFragmentEditorialComments = (state, fragmentId) => + getFragmentRecommendations(state, fragmentId).filter( + r => r.recommendationType === 'editorRecommendation', + ) const getOwnRecommendations = (state, fragmentId) => chain(state) diff --git a/packages/component-faraday-ui/src/EditorialReportCard.js b/packages/component-faraday-ui/src/EditorialReportCard.js index a294c039795914fe5e5333e95b395f938ee4f187..a89ca77499af8c0d0a6b6ceff3b6b5af97c617d5 100644 --- a/packages/component-faraday-ui/src/EditorialReportCard.js +++ b/packages/component-faraday-ui/src/EditorialReportCard.js @@ -9,26 +9,32 @@ import { Label, Item, Row, Text, Tag } from './' import { getReportComments } from './helpers' const EditorialReportCard = ({ + publicLabel, + privateLabel, journal, publicReport, privateReport, recommendation, - reviewerName, - reviewerRole, + editorName, + editorRole, report: { createdOn, reviewer }, }) => ( <Root> <Row justify="space-between" mb={2}> <Item vertical> - <Label mb={1 / 2}>Decision</Label> + {editorRole === 'HE' ? ( + <Label mb={1 / 2}>Recommendation</Label> + ) : ( + <Label mb={1 / 2}>Decision</Label> + )} <Text>{recommendation}</Text> </Item> <Item justify="flex-end"> {reviewer && ( <Fragment> - <Text mr={1 / 2}>{reviewerName}</Text> - <Tag mr={2}>{reviewerRole}</Tag> + <Text mr={1 / 2}>{editorName}</Text> + <Tag mr={2}>{editorRole}</Tag> </Fragment> )} <DateParser timestamp={createdOn}> @@ -40,7 +46,7 @@ const EditorialReportCard = ({ {publicReport && ( <Row mb={2}> <Item vertical> - <Label mb={1 / 2}>Message For Author</Label> + <Label mb={1 / 2}>{publicLabel}</Label> <Text>{publicReport}</Text> </Item> </Row> @@ -49,7 +55,7 @@ const EditorialReportCard = ({ {privateReport && ( <Row mb={2}> <Item vertical> - <Label mb={1 / 2}>Message For Editorial Team</Label> + <Label mb={1 / 2}>{privateLabel}</Label> <Text>{privateReport}</Text> </Item> </Row> @@ -85,8 +91,8 @@ export default compose( recommendation: getRecommendationLabel(), publicReport: getReportComments({ report, isPublic: true }), privateReport: getReportComments({ report, isPublic: false }), - reviewerName: getReviewerName(), - reviewerRole: getReviewerRole(), + editorName: getReviewerName(), + editorRole: getReviewerRole(), }), ), )(EditorialReportCard) diff --git a/packages/component-faraday-ui/src/EditorialReportCard.md b/packages/component-faraday-ui/src/EditorialReportCard.md index 26fd9dce55e7c917e5944b6baf617a3384c50407..0c81711ef2c425f242e7f7b7433347f78de2aa15 100644 --- a/packages/component-faraday-ui/src/EditorialReportCard.md +++ b/packages/component-faraday-ui/src/EditorialReportCard.md @@ -47,7 +47,12 @@ const journal = { }, ], } -;<EditorialReportCard report={report} journal={journal} /> +;<EditorialReportCard + report={report} + journal={journal} + publicLabel="Message For Author" + privateLabel="Message For Editorial Team" + /> ``` Card with message for the editorial team @@ -97,7 +102,12 @@ const journal = { }, ], } -;<EditorialReportCard report={report} journal={journal} /> +;<EditorialReportCard + report={report} + journal={journal} + publicLabel="Message For Author" + privateLabel="Message For Editorial Team" + /> ``` Card with message for the editorial team and for the author @@ -152,5 +162,11 @@ const journal = { }, ], } -;<EditorialReportCard report={report} journal={journal} /> + +;<EditorialReportCard + report={report} + journal={journal} + publicLabel="Message For Author" + privateLabel="Message For Editorial Team" + /> ``` diff --git a/packages/component-manuscript/src/components/EditorialCommentCard.js b/packages/component-manuscript/src/components/EditorialCommentCard.js index aa9187971fa82db28b3a3896b7fafb78c4520622..077073dbe235136c41641f1aac1a72656b929a88 100644 --- a/packages/component-manuscript/src/components/EditorialCommentCard.js +++ b/packages/component-manuscript/src/components/EditorialCommentCard.js @@ -9,7 +9,13 @@ import { const EditorialCommentCard = ({ journal, reports = [] }) => ( <ContextualBox label="Editorial Comments" mb={2}> {reports.map(report => ( - <EditorialReportCard journal={journal} key={report.id} report={report} /> + <EditorialReportCard + journal={journal} + key={report.id} + privateLabel="Message For Editorial Team" + publicLabel="Message For Author" + report={report} + /> ))} </ContextualBox> ) diff --git a/packages/component-manuscript/src/components/ManuscriptLayout.js b/packages/component-manuscript/src/components/ManuscriptLayout.js index f3bfdbb744fc13812e5afdf256cfd53c34584276..b054b71e438ae82970fbfbfe8680a231e5e8782e 100644 --- a/packages/component-manuscript/src/components/ManuscriptLayout.js +++ b/packages/component-manuscript/src/components/ManuscriptLayout.js @@ -102,13 +102,12 @@ const ManuscriptLayout = ({ getSignedUrl={getSignedUrl} /> - {get(currentUser, 'permissions.canViewReports', true) && - !!editorialRecommendations.length && ( - <EditorialCommentCard - journal={journal} - reports={editorialRecommendations} - /> - )} + {get(currentUser, 'permissions.canViewEditorialComments', true) && ( + <EditorialCommentCard + journal={journal} + reports={editorialRecommendations} + /> + )} {submittedOwnRecommendation && ( <ReviewerReportCard diff --git a/packages/component-manuscript/src/components/ManuscriptPage.js b/packages/component-manuscript/src/components/ManuscriptPage.js index c9ccfc3fa85c03e131d556fd1480e572d821d2f7..1ed05f930396ebf4f38f6ccafec63e9661f885c3 100644 --- a/packages/component-manuscript/src/components/ManuscriptPage.js +++ b/packages/component-manuscript/src/components/ManuscriptPage.js @@ -48,6 +48,7 @@ import { currentUserIsReviewer, parseCollectionDetails, canMakeHERecommendation, + canViewEditorialComments, canViewReviewersDetails, pendingReviewerInvitation, canOverrideTechnicalChecks, @@ -166,6 +167,11 @@ export default compose( }), canAssignHE: canAssignHE(state, match.params.project), canViewReports: canViewReports(state, match.params.project), + canViewEditorialComments: canViewEditorialComments( + state, + collection, + match.params.version, + ), canInviteReviewers: canInviteReviewers(state, collection), canMakeRecommendation: !isUndefined(pendingOwnRecommendation), canMakeRevision: canMakeRevision(state, collection, fragment), diff --git a/packages/xpub-faraday/config/authsome-helpers.js b/packages/xpub-faraday/config/authsome-helpers.js index 718190c444db9b5404cec625cf3109db0abea80e..c97f8b89a8f9acb1b7b626e5fc5b79636889bf65 100644 --- a/packages/xpub-faraday/config/authsome-helpers.js +++ b/packages/xpub-faraday/config/authsome-helpers.js @@ -184,7 +184,11 @@ const stripeFragmentByRole = ({ return { ...fragment, recommendations: recommendations - ? recommendations.filter(r => r.submittedOn) + ? recommendations.filter( + r => + r.submittedOn || + r.recommendationType === 'editorRecommendation', + ) : [], } default: