diff --git a/packages/component-faraday-selectors/src/index.js b/packages/component-faraday-selectors/src/index.js index 144d06d425ec7bc68a548b38209772f49459b033..2ad7a635be95eb0525f033a1e8de8eecafe9edb8 100644 --- a/packages/component-faraday-selectors/src/index.js +++ b/packages/component-faraday-selectors/src/index.js @@ -65,25 +65,10 @@ export const canMakeDecision = (state, collection) => { return isEIC && status } -const editorialStatuses = [ - 'rejected', - 'published', - 'pendingApproval', - 'revisionRequested', -] - -export const canSeeEditorialComments = (state, collectionId) => { - const collection = state.collections.find(c => c.id === collectionId) - const isStaff = currentUserIs(state, 'staff') - if (!isStaff) return false - if (editorialStatuses.includes(get(collection, 'status'))) return false - return true -} - -export const getPubsweetError = state => get(state, 'error') - export const canSeeReviewersReports = (state, collectionId) => { const isHE = isHEToManuscript(state, collectionId) const isEiC = currentUserIs(state, 'adminEiC') return isHE || isEiC } + +export const canSeeEditorialComments = canSeeReviewersReports diff --git a/packages/component-manuscript/src/components/ManuscriptLayout.js b/packages/component-manuscript/src/components/ManuscriptLayout.js index ad31c596ca12353cde5542e16f7f0e4c3bfcc543..ea6b9532eb0b048a250ae750f0d4c6357c9faf44 100644 --- a/packages/component-manuscript/src/components/ManuscriptLayout.js +++ b/packages/component-manuscript/src/components/ManuscriptLayout.js @@ -1,6 +1,5 @@ import React, { Fragment } from 'react' import { isEmpty } from 'lodash' -import { Redirect } from 'react-router-dom' import { Root, @@ -27,16 +26,13 @@ const ManuscriptLayout = ({ history, currentUser, editorInChief, - pubsweetError, updateManuscript, - canSeeReviewersReports, canSeeEditorialComments, editorialRecommendations, project = {}, version = {}, }) => ( <Root> - {pubsweetError && <Redirect to="not-found" />} {!isEmpty(project) && !isEmpty(version) ? ( <Fragment> <Container flex={3}> @@ -58,9 +54,7 @@ const ManuscriptLayout = ({ version={version} /> <ManuscriptDetails collection={project} fragment={version} /> - {canSeeReviewersReports && ( - <ReviewsAndReports project={project} version={version} /> - )} + <ReviewsAndReports project={project} version={version} /> {canSeeEditorialComments && editorialRecommendations.length > 0 && ( <EditorialComments diff --git a/packages/component-manuscript/src/components/ManuscriptPage.js b/packages/component-manuscript/src/components/ManuscriptPage.js index 6825aef0a32ea3d3c45ca5fbe816b21d9f87f96b..df4b1eaac76cebaf609b4b5fe0d5768e25eb2979 100644 --- a/packages/component-manuscript/src/components/ManuscriptPage.js +++ b/packages/component-manuscript/src/components/ManuscriptPage.js @@ -20,6 +20,10 @@ import { } from 'recompose' import { getSignedUrl } from 'pubsweet-components-faraday/src/redux/files' import { reviewerDecision } from 'pubsweet-components-faraday/src/redux/reviewers' +import { + hasManuscriptFailure, + clearCustomError, +} from 'pubsweet-components-faraday/src/redux/errors' import { selectEditorialRecommendations } from 'pubsweet-components-faraday/src/redux/recommendations' import { getHandlingEditors, @@ -28,11 +32,7 @@ import { import ManuscriptLayout from './ManuscriptLayout' import { parseSearchParams, redirectToError } from './utils' -import { - getPubsweetError, - canSeeReviewersReports, - canSeeEditorialComments, -} from '../../../component-faraday-selectors' +import { canSeeEditorialComments } from '../../../component-faraday-selectors' export default compose( setDisplayName('ManuscriptPage'), @@ -49,15 +49,11 @@ export default compose( connect( (state, { match }) => ({ currentUser: selectCurrentUser(state), - pubsweetError: getPubsweetError(state), handlingEditors: selectHandlingEditors(state), + hasManuscriptFailure: hasManuscriptFailure(state), version: selectFragment(state, match.params.version), project: selectCollection(state, match.params.project), editorialRecommendations: selectEditorialRecommendations(state), - canSeeReviewersReports: canSeeReviewersReports( - state, - match.params.project, - ), canSeeEditorialComments: canSeeEditorialComments( state, match.params.project, @@ -66,6 +62,7 @@ export default compose( { replace, getSignedUrl, + clearCustomError, reviewerDecision, getCollection: actions.getCollection, updateVersion: actions.updateFragment, @@ -100,11 +97,19 @@ export default compose( const { match, replace, + history, location, getCollection, reviewerDecision, setEditorInChief, + clearCustomError, + hasManuscriptFailure, } = this.props + if (hasManuscriptFailure) { + history.push('/not-found') + clearCustomError() + } + const collectionId = match.params.project const { agree, invitationId } = parseSearchParams(location.search) if (agree === 'true') { diff --git a/packages/component-manuscript/src/components/ReviewsAndReports.js b/packages/component-manuscript/src/components/ReviewsAndReports.js index 133f314ff9523e01e8b75bf5be344bb2a805d961..b498bf92a2eab8ad79f3071057a1adf539c29efd 100644 --- a/packages/component-manuscript/src/components/ReviewsAndReports.js +++ b/packages/component-manuscript/src/components/ReviewsAndReports.js @@ -16,7 +16,7 @@ import { selectRecommendations } from 'pubsweet-components-faraday/src/redux/rec import { Tabs, Expandable } from '../molecules' import { ReviewReportCard, ReviewerReportForm } from './' -import { currentUserIs } from '../../../component-faraday-selectors' +import { canSeeReviewersReports } from '../../../component-faraday-selectors' const getTabSections = (collectionId, reviewers, recommendations = []) => [ { @@ -47,16 +47,16 @@ const ReviewsAndReports = ({ report, project, version, - isStaff, isReviewer, mappedReviewers, mappedRecommendations, + canSeeReviewersReports, review = {}, reviewers = [], recommendations = [], }) => ( <Fragment> - {isStaff && ( + {canSeeReviewersReports && ( <Root> <Expandable label="Reviewers & Reports" @@ -102,10 +102,10 @@ export default compose( connect( (state, { project }) => ({ reviewers: selectReviewers(state), - isStaff: currentUserIs(state, 'staff'), recommendations: selectRecommendations(state), fetchingReviewers: selectFetchingReviewers(state), isReviewer: currentUserIsReviewer(state, project.id), + canSeeReviewersReports: canSeeReviewersReports(state, project.id), }), { getCollectionReviewers }, ), @@ -130,8 +130,8 @@ export default compose( })), lifecycle({ componentDidMount() { - const { getReviewers } = this.props - getReviewers() + const { getReviewers, canSeeReviewersReports } = this.props + canSeeReviewersReports && getReviewers() }, }), )(ReviewsAndReports) diff --git a/packages/components-faraday/src/components/Dashboard/DashboardCard.js b/packages/components-faraday/src/components/Dashboard/DashboardCard.js index a3d0cd20d2644651a6b315085ba12117ee8c24c0..82f9a8698c43046994924dcc4e59c40b0a313043 100644 --- a/packages/components-faraday/src/components/Dashboard/DashboardCard.js +++ b/packages/components-faraday/src/components/Dashboard/DashboardCard.js @@ -59,45 +59,45 @@ const DashboardCard = ({ title={title} dangerouslySetInnerHTML={{ __html: title }} // eslint-disable-line /> - </LeftDetails> - <RightDetails flex={2}> - {canMakeDecision && ( - <Decision - collectionId={project.id} - fragmentId={version.id} - modalKey={`decide-${version.id}`} - /> - )} - {canMakeRecommendation && ( - <Recommendation + <RightDetails flex="none"> + {canMakeDecision && ( + <Decision + collectionId={project.id} + fragmentId={version.id} + modalKey={`decide-${version.id}`} + /> + )} + {canMakeRecommendation && ( + <Recommendation + collectionId={project.id} + fragmentId={version.id} + modalKey={`recommend-${version.id}`} + /> + )} + <ZipFiles + archiveName={`ID-${project.customId}`} collectionId={project.id} + disabled={!hasFiles} fragmentId={version.id} - modalKey={`recommend-${version.id}`} - /> - )} - <ZipFiles - archiveName={`ID-${project.customId}`} - collectionId={project.id} - disabled={!hasFiles} - fragmentId={version.id} - > - <ClickableIcon disabled={!hasFiles}> - <Icon>download</Icon> - </ClickableIcon> - </ZipFiles> - {!project.status && ( - <ActionButtons - data-test="button-resume-submission" - onClick={() => - history.push( - `/projects/${project.id}/versions/${version.id}/submit`, - ) - } > - RESUME SUBMISSION - </ActionButtons> - )} - </RightDetails> + <ClickableIcon disabled={!hasFiles}> + <Icon>download</Icon> + </ClickableIcon> + </ZipFiles> + {!project.status && ( + <ActionButtons + data-test="button-resume-submission" + onClick={() => + history.push( + `/projects/${project.id}/versions/${version.id}/submit`, + ) + } + > + RESUME SUBMISSION + </ActionButtons> + )} + </RightDetails> + </LeftDetails> </Top> <Bottom> <LeftDetails flex={3}> @@ -215,6 +215,7 @@ const ActionButtons = styled(Button)` height: calc(${th('subGridUnit')} * 5); padding: calc(${th('subGridUnit')} / 2) ${th('subGridUnit')}; text-align: center; + white-space: nowrap; ` const LeftDetails = styled.div` @@ -224,6 +225,7 @@ const LeftDetails = styled.div` justify-content: flex-start; flex: ${({ flex }) => flex || 1}; flex-wrap: wrap; + max-width: 100%; ` const RightDetails = styled.div` @@ -335,6 +337,7 @@ const Title = styled.div` white-space: nowrap; overflow: hidden; flex: 10; + padding-right: ${th('subGridUnit')}; ` const Status = styled.div` diff --git a/packages/components-faraday/src/components/MakeDecision/Decision.js b/packages/components-faraday/src/components/MakeDecision/Decision.js index a3a3b3b57f7b96f5cd33ab59990cd148fff55152..cf4279e1615dc66ec08c8deb6cd8fab98ca16207 100644 --- a/packages/components-faraday/src/components/MakeDecision/Decision.js +++ b/packages/components-faraday/src/components/MakeDecision/Decision.js @@ -58,5 +58,6 @@ const Root = styled.div` justify-content: center; padding: 0 calc(${th('subGridUnit')} * 2); text-transform: uppercase; + white-space: nowrap; ` // #endregion diff --git a/packages/components-faraday/src/components/MakeRecommendation/Recommendation.js b/packages/components-faraday/src/components/MakeRecommendation/Recommendation.js index 22fd9321be9b047bfef9283f7a11f13e2510f5c8..10d7fc6d98a6a1f1ce932aa5b6622015eee59530 100644 --- a/packages/components-faraday/src/components/MakeRecommendation/Recommendation.js +++ b/packages/components-faraday/src/components/MakeRecommendation/Recommendation.js @@ -59,5 +59,6 @@ const Root = styled.div` min-width: 200px; padding: 0 calc(${th('subGridUnit')} * 2); text-transform: uppercase; + white-space: nowrap; ` // #endregion diff --git a/packages/components-faraday/src/index.js b/packages/components-faraday/src/index.js index d21969e7b792fa03fadc8e92f38152c12935abb4..0eb9c3b474d2da621536bec68cbe2541141b9544 100644 --- a/packages/components-faraday/src/index.js +++ b/packages/components-faraday/src/index.js @@ -3,8 +3,9 @@ module.exports = { components: [() => require('./components')], reducers: { authors: () => require('./redux/authors').default, - files: () => require('./redux/files').default, + customError: () => require('./redux/errors').default, editors: () => require('./redux/editors').default, + files: () => require('./redux/files').default, reviewers: () => require('./redux/reviewers').default, recommendations: () => require('./redux/recommendations').default, }, diff --git a/packages/components-faraday/src/redux/errors.js b/packages/components-faraday/src/redux/errors.js new file mode 100644 index 0000000000000000000000000000000000000000..00a4efa1c7f3c3fd27237a30ad9d5303fb5aab9e --- /dev/null +++ b/packages/components-faraday/src/redux/errors.js @@ -0,0 +1,17 @@ +export const hasManuscriptFailure = state => + state.customError === 'manuscriptFailure' + +export const clearCustomError = () => ({ + type: 'CLEAR_CUSTOM_ERROR', +}) + +export default (state = '', action) => { + switch (action.type) { + case 'CLEAR_CUSTOM_ERROR': + return '' + case 'GET_FRAGMENT_FAILURE': + return 'manuscriptFailure' + default: + return state + } +} diff --git a/packages/components-faraday/src/redux/index.js b/packages/components-faraday/src/redux/index.js index 12a9544f097bb4a8b08317dad23152255879d3fe..9e0c549f2498178e77b7c129e3ce4f0ee5c53bae 100644 --- a/packages/components-faraday/src/redux/index.js +++ b/packages/components-faraday/src/redux/index.js @@ -1,5 +1,6 @@ +export { default as files } from './files' +export { default as errors } from './errors' export { default as authors } from './authors' export { default as editors } from './editors' -export { default as files } from './files' export { default as reviewers } from './reviewers' export { default as recommendations } from './recommendations'