diff --git a/packages/component-faraday-selectors/src/index.js b/packages/component-faraday-selectors/src/index.js index 95f9a5b80adf044e2ed228d636c9ce8d793869be..d95643452340c8c5607971adb3da46092e2a4801 100644 --- a/packages/component-faraday-selectors/src/index.js +++ b/packages/component-faraday-selectors/src/index.js @@ -75,6 +75,7 @@ export const canSeeReviewersReports = (state, collectionId) => { export const canMakeRevision = (state, collection, fragment) => { const currentUserId = get(state, 'currentUser.user.id') return ( + get(fragment, 'revision') && collection.status === 'revisionRequested' && fragment.owners.map(o => o.id).includes(currentUserId) ) diff --git a/packages/component-manuscript/src/components/ManuscriptLayout.js b/packages/component-manuscript/src/components/ManuscriptLayout.js index 318822b55f342766aef036cc697548d2c17aca9c..ea90b83967e7dbbd429f89747956d3c7f97968f9 100644 --- a/packages/component-manuscript/src/components/ManuscriptLayout.js +++ b/packages/component-manuscript/src/components/ManuscriptLayout.js @@ -27,6 +27,7 @@ const ManuscriptLayout = ({ history, currentUser, editorInChief, + canMakeRevision, editorialRecommendations, project = {}, version = {}, @@ -56,7 +57,7 @@ const ManuscriptLayout = ({ fragment={version} startExpanded={isEmpty(version.revision)} /> - {version.revision && ( + {canMakeRevision && ( <SubmitRevision project={project} version={version} /> )} <ReviewsAndReports project={project} version={version} /> diff --git a/packages/component-manuscript/src/components/ManuscriptPage.js b/packages/component-manuscript/src/components/ManuscriptPage.js index a832022fdb722c6e9fe0dd077639eed86e449147..b6ff4faa6b97eed352a2ce4468fc2e97328484c8 100644 --- a/packages/component-manuscript/src/components/ManuscriptPage.js +++ b/packages/component-manuscript/src/components/ManuscriptPage.js @@ -29,6 +29,7 @@ import { getHandlingEditors, selectHandlingEditors, } from 'pubsweet-components-faraday/src/redux/editors' +import { canMakeRevision } from 'pubsweet-component-faraday-selectors/src' import ManuscriptLayout from './ManuscriptLayout' import { parseSearchParams, redirectToError } from './utils' @@ -64,6 +65,9 @@ export default compose( updateVersion: actions.updateFragment, }, ), + connect((state, { project, version }) => ({ + canMakeRevision: canMakeRevision(state, project, version), + })), ConnectPage(({ currentUser, handlingEditors, project }) => { const he = get(project, 'handlingEditor') if ( diff --git a/packages/component-manuscript/src/components/SideBarActions.js b/packages/component-manuscript/src/components/SideBarActions.js index 76a9369e78aecb0fca7ef61a44ae14629345773a..7f1f8c4c70ae2eaf4413aa66f91418e3210fdf3c 100644 --- a/packages/component-manuscript/src/components/SideBarActions.js +++ b/packages/component-manuscript/src/components/SideBarActions.js @@ -17,7 +17,7 @@ import { canMakeRevision, canMakeDecision, canMakeRecommendation, -} from '../../../component-faraday-selectors' +} from 'pubsweet-component-faraday-selectors/src' const SideBarActions = ({ project, diff --git a/packages/component-manuscript/src/components/utils.js b/packages/component-manuscript/src/components/utils.js index 2f7a3b5386e5a5560ea66df6371763b0241f5da2..1accaf54c002c3642a630f53f0620ed16f206e2a 100644 --- a/packages/component-manuscript/src/components/utils.js +++ b/packages/component-manuscript/src/components/utils.js @@ -1,5 +1,14 @@ import moment from 'moment' -import { get, find, capitalize, omit, isEmpty, debounce } from 'lodash' +import { + get, + find, + omit, + chain, + merge, + isEmpty, + debounce, + capitalize, +} from 'lodash' import { actions } from 'pubsweet-client/src' import { change as changeForm } from 'redux-form' @@ -187,14 +196,23 @@ export const onReviewSubmit = ( }) } +const parseRevision = (values, fragment) => { + const v = chain(values) + .omit('authorForm') + .omit(v => v === '') + .value() + + return { + ...fragment, + revision: { + ...v, + metadata: merge(v.metadata, fragment.metadata), + }, + } +} + const _onRevisionChange = (values, dispatch, { project, version }) => { - const newValues = omit(values, 'authorForm') - dispatch( - actions.updateFragment(project, { - ...version, - revision: newValues, - }), - ) + dispatch(actions.updateFragment(project, parseRevision(values, version))) } export const onRevisionChange = debounce(_onRevisionChange, 1000, { maxWait: 5000, @@ -219,12 +237,10 @@ export const onRevisionSubmit = ( onConfirm: () => { submitRevision(project.id, version.id) .then(r => { - dispatch(actions.getFragments({ id: project.id })) - return r - }) - .then(r => { - history.push(`/projects/${r.collectionId}/version/${r.id}/details`) - hideModal() + dispatch(actions.getFragments({ id: project.id })).then(() => { + history.push(`/projects/${r.collectionId}/versions/${r.id}/details`) + hideModal() + }) }) .catch(e => setModalError('Something went wrong.')) },