From e66a85cb3bbe444da7208f8a219fc42c931c1947 Mon Sep 17 00:00:00 2001 From: Daniel Sandu <daniel.sandu@thinslices.com> Date: Tue, 23 Oct 2018 18:25:40 +0300 Subject: [PATCH] refactor(handleRecommendation): refactor handleRecommendation, moved all recommendation logic --- .../src/components/ManuscriptLayout.js | 9 +-- .../src/components/ManuscriptPage.js | 47 +-------------- .../src/components/utils.js | 12 ---- .../handleRecommendation.api.js | 11 ++++ .../src/handleRecommendation/utils.js | 10 ++++ .../withHandleRecommendation.js | 59 +++++++++++++++++++ .../src/inviteReviewer/withInviteReviewer.js | 6 +- 7 files changed, 88 insertions(+), 66 deletions(-) create mode 100644 packages/component-manuscript/src/handleRecommendation/handleRecommendation.api.js create mode 100644 packages/component-manuscript/src/handleRecommendation/utils.js create mode 100644 packages/component-manuscript/src/handleRecommendation/withHandleRecommendation.js diff --git a/packages/component-manuscript/src/components/ManuscriptLayout.js b/packages/component-manuscript/src/components/ManuscriptLayout.js index c02738c34..527861a2f 100644 --- a/packages/component-manuscript/src/components/ManuscriptLayout.js +++ b/packages/component-manuscript/src/components/ManuscriptLayout.js @@ -35,7 +35,6 @@ const ManuscriptLayout = ({ getSignedUrl, editorInChief, handlingEditors, - createRecommendation, editorialRecommendations, journal = {}, collection = {}, @@ -59,7 +58,6 @@ const ManuscriptLayout = ({ shouldReview, submittedOwnRecommendation, reviewerReports, - onEditorialRecommendation, reviewerRecommendations, toggleReviewerDetails, reviewerDetailsExpanded, @@ -67,6 +65,7 @@ const ManuscriptLayout = ({ toggleEditorialComments, submitRevision, inviteReviewer, + recommendationHandle, }) => ( <Root pb={30}> {!isEmpty(collection) && !isEmpty(fragment) ? ( @@ -205,7 +204,9 @@ const ManuscriptLayout = ({ hasReviewerReports={reviewerRecommendations.length > 0} highlight={reviewerRecommendations.length > 0} modalKey="heRecommendation" - onRecommendationSubmit={onEditorialRecommendation} + onRecommendationSubmit={ + recommendationHandle.onEditorialRecommendation + } /> )} @@ -216,7 +217,7 @@ const ManuscriptLayout = ({ highlight={editorialRecommendations.length > 0} messagesLabel={messagesLabel} mt={2} - submitDecision={createRecommendation} + submitDecision={recommendationHandle.createRecommendation} /> )} </Fragment> diff --git a/packages/component-manuscript/src/components/ManuscriptPage.js b/packages/component-manuscript/src/components/ManuscriptPage.js index 5fd6b730f..2dc4481e2 100644 --- a/packages/component-manuscript/src/components/ManuscriptPage.js +++ b/packages/component-manuscript/src/components/ManuscriptPage.js @@ -27,7 +27,6 @@ import { clearCustomError, } from 'pubsweet-components-faraday/src/redux/errors' import { - createRecommendation, selectReviewRecommendations, selectEditorialRecommendations, } from 'pubsweet-components-faraday/src/redux/recommendations' @@ -65,8 +64,8 @@ import { import ManuscriptLayout from './ManuscriptLayout' import withInviteReviewer from '../inviteReviewer/withInviteReviewer' import withSubmitRevision from '../submitRevision/withSubmitRevision' +import withHandleRecommendation from '../handleRecommendation/withHandleRecommendation' import { - parseEicDecision, parseSearchParams, redirectToError, getPublonsReviewers, @@ -284,28 +283,6 @@ export default compose( modalProps.hideModal() }) .catch(handleError(modalProps.setModalError)), - createRecommendation: ({ - fragment, - collection, - fetchUpdatedCollection, - }) => (values, modalProps) => { - const recommendation = parseEicDecision(values) - modalProps.setFetching(true) - createRecommendation({ - recommendation, - fragmentId: fragment.id, - collectionId: collection.id, - }) - .then(() => { - modalProps.setFetching(false) - modalProps.hideModal() - fetchUpdatedCollection() - }) - .catch(err => { - modalProps.setFetching(false) - handleError(modalProps.setModalError)(err) - }) - }, onHEResponse: ({ history, collection, @@ -334,27 +311,6 @@ export default compose( handleError(setModalError)(err) }) }, - onEditorialRecommendation: ({ - fragment, - collection, - fetchUpdatedCollection, - }) => (recommendation, { hideModal, setFetching, setModalError }) => { - setFetching(true) - createRecommendation({ - recommendation, - fragmentId: fragment.id, - collectionId: collection.id, - }) - .then(r => { - setFetching(false) - hideModal() - fetchUpdatedCollection() - }) - .catch(e => { - setFetching(false) - handleError(setModalError)(e) - }) - }, }), fromRenderProps(RemoteOpener, ({ toggle, expanded }) => ({ toggleAssignHE: toggle, @@ -388,6 +344,7 @@ export default compose( })), withInviteReviewer, withSubmitRevision, + withHandleRecommendation, lifecycle({ componentDidMount() { const { diff --git a/packages/component-manuscript/src/components/utils.js b/packages/component-manuscript/src/components/utils.js index 8d9a2d6cc..e579d6836 100644 --- a/packages/component-manuscript/src/components/utils.js +++ b/packages/component-manuscript/src/components/utils.js @@ -293,18 +293,6 @@ export const requiredFiles = (values, formValues) => { return undefined } -// new stuff -export const parseEicDecision = ({ decision, message }) => ({ - recommendation: decision, - recommendationType: 'editorRecommendation', - comments: [ - { - public: decision !== 'return-to-handling-editor', - content: message, - }, - ], -}) - // handle publons export const getPublonsReviewers = fragmentId => apiGet(`/fragments/${fragmentId}/publons`) diff --git a/packages/component-manuscript/src/handleRecommendation/handleRecommendation.api.js b/packages/component-manuscript/src/handleRecommendation/handleRecommendation.api.js new file mode 100644 index 000000000..5109ba04f --- /dev/null +++ b/packages/component-manuscript/src/handleRecommendation/handleRecommendation.api.js @@ -0,0 +1,11 @@ +import { create } from 'pubsweet-client/src/helpers/api' + +export const createRecommendation = ({ + fragmentId, + collectionId, + recommendation, +}) => + create( + `/collections/${collectionId}/fragments/${fragmentId}/recommendations`, + recommendation, + ) diff --git a/packages/component-manuscript/src/handleRecommendation/utils.js b/packages/component-manuscript/src/handleRecommendation/utils.js new file mode 100644 index 000000000..700c21bd5 --- /dev/null +++ b/packages/component-manuscript/src/handleRecommendation/utils.js @@ -0,0 +1,10 @@ +export const parseEicDecision = ({ decision, message }) => ({ + recommendation: decision, + recommendationType: 'editorRecommendation', + comments: [ + { + public: decision !== 'return-to-handling-editor', + content: message, + }, + ], +}) diff --git a/packages/component-manuscript/src/handleRecommendation/withHandleRecommendation.js b/packages/component-manuscript/src/handleRecommendation/withHandleRecommendation.js new file mode 100644 index 000000000..020d7e45d --- /dev/null +++ b/packages/component-manuscript/src/handleRecommendation/withHandleRecommendation.js @@ -0,0 +1,59 @@ +import { pick } from 'lodash' +import { withHandlers, withProps, compose } from 'recompose' +import { handleError, withFetching } from 'pubsweet-component-faraday-ui' +import { parseEicDecision } from './utils' +import { createRecommendation } from './handleRecommendation.api' + +export default compose( + withFetching, + withHandlers({ + createRecommendation: ({ + fragment, + collection, + fetchUpdatedCollection, + }) => (values, modalProps) => { + const recommendation = parseEicDecision(values) + modalProps.setFetching(true) + createRecommendation({ + recommendation, + fragmentId: fragment.id, + collectionId: collection.id, + }) + .then(() => { + modalProps.setFetching(false) + modalProps.hideModal() + fetchUpdatedCollection() + }) + .catch(err => { + modalProps.setFetching(false) + handleError(modalProps.setModalError)(err) + }) + }, + onEditorialRecommendation: ({ + fragment, + collection, + fetchUpdatedCollection, + }) => (recommendation, { hideModal, setFetching, setModalError }) => { + setFetching(true) + createRecommendation({ + recommendation, + fragmentId: fragment.id, + collectionId: collection.id, + }) + .then(r => { + setFetching(false) + hideModal() + fetchUpdatedCollection() + }) + .catch(e => { + setFetching(false) + handleError(setModalError)(e) + }) + }, + }), + withProps(props => ({ + recommendationHandle: { + ...pick(props, ['createRecommendation', 'onEditorialRecommendation']), + }, + })), +) diff --git a/packages/component-manuscript/src/inviteReviewer/withInviteReviewer.js b/packages/component-manuscript/src/inviteReviewer/withInviteReviewer.js index 87470cf50..fd06ce32b 100644 --- a/packages/component-manuscript/src/inviteReviewer/withInviteReviewer.js +++ b/packages/component-manuscript/src/inviteReviewer/withInviteReviewer.js @@ -2,11 +2,7 @@ import { get, pick } from 'lodash' import { withRouter } from 'react-router-dom' import { compose, withHandlers, withProps } from 'recompose' import { handleError, withFetching } from 'pubsweet-component-faraday-ui' -import { - inviteReviewer, - revokeReviewer, - reviewerDecision, -} from 'pubsweet-components-faraday/src/redux/reviewers' +import { inviteReviewer, revokeReviewer, reviewerDecision } from './invite.api' export default compose( withFetching, -- GitLab