diff --git a/packages/component-faraday-selectors/src/index.js b/packages/component-faraday-selectors/src/index.js index 8076ed60d0fd6e3eaa332fe8d483dee94cd2fd22..b93989f70fae4ab2eb0525b04ee853bddb3eb53b 100644 --- a/packages/component-faraday-selectors/src/index.js +++ b/packages/component-faraday-selectors/src/index.js @@ -364,13 +364,17 @@ export const getInvitationsWithReviewersForFragment = (state, fragmentId) => export const canMakeHERecommendation = (state, { collection, statuses }) => { const validHE = isHEToManuscript(state, get(collection, 'id', '')) + if (!validHE) return false + const statusImportance = get( statuses, `${get(collection, 'status', 'draft')}.importance`, 1, ) - return statusImportance > 1 && statusImportance < 9 && validHE + if (!(statusImportance > 1 && statusImportance < 10)) return false + + return true } export const getFragmentAuthorResponse = (state, fragmentId) => @@ -384,6 +388,7 @@ 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', diff --git a/packages/component-faraday-ui/src/contextualBoxes/HERecommendation.js b/packages/component-faraday-ui/src/contextualBoxes/HERecommendation.js index 877243b16fc5e34b2cc9b4ccb2593124c031624e..69f2a7b7f2164e0086292d91dfdc1b458621409a 100644 --- a/packages/component-faraday-ui/src/contextualBoxes/HERecommendation.js +++ b/packages/component-faraday-ui/src/contextualBoxes/HERecommendation.js @@ -46,6 +46,31 @@ const options = [ }, ] +const optionsWhereHECanOnlyReject = [ + 'reviewersInvited', + 'underReview', + 'revisionRequested', +] + +const showHEOptions = ({ + collection, + hasReviewerReports, + fragment, + options, + optionsWhereHECanOnlyReject, +}) => { + const { status, fragments } = collection + const { invitations } = fragment + if (optionsWhereHECanOnlyReject.includes(status)) { + return [options[1]] + } else if (!hasReviewerReports && fragments.length === 1) { + return tail(options) + } else if (invitations === []) { + return [options[1]] + } + return options +} + const parseFormValues = ({ recommendation, ...rest }) => { const comments = Object.entries(rest).map(([key, value]) => ({ content: value, @@ -65,6 +90,8 @@ const HERecommendation = ({ handleSubmit, hasReviewerReports, highlight, + collection, + fragment, }) => ( <ContextualBox highlight={highlight} @@ -82,7 +109,13 @@ const HERecommendation = ({ <ValidatedField component={input => ( <Menu - options={hasReviewerReports ? options : tail(options)} + options={showHEOptions({ + collection, + hasReviewerReports, + fragment, + options, + optionsWhereHECanOnlyReject, + })} {...input} /> )} diff --git a/packages/component-manuscript/src/components/ManuscriptLayout.js b/packages/component-manuscript/src/components/ManuscriptLayout.js index 6d08c78bb1b32a5c536ab1b63b3a1807ab241799..b328d774aada05a389071f6d477f18d1b849ab7d 100644 --- a/packages/component-manuscript/src/components/ManuscriptLayout.js +++ b/packages/component-manuscript/src/components/ManuscriptLayout.js @@ -226,10 +226,11 @@ const ManuscriptLayout = ({ )} {isLatestVersion && - get(currentUser, 'permissions.canMakeHERecommendation', false) && - reviewerRecommendations.length > 0 && ( + get(currentUser, 'permissions.canMakeHERecommendation', false) && ( <HERecommendation + collection={collection} formValues={get(formValues, 'editorialRecommendation', {})} + fragment={fragment} hasReviewerReports={reviewerRecommendations.length > 0} highlight={reviewerRecommendations.length > 0} modalKey="heRecommendation"