From ac3571c47856bdb996d4680eb6ff6c95cd53d9eb Mon Sep 17 00:00:00 2001
From: Alexandru Munteanu <alexandru.munt@gmail.com>
Date: Wed, 11 Jul 2018 15:46:01 +0300
Subject: [PATCH] feat(submit-revision): update make revision selector

---
 .../component-faraday-selectors/src/index.js  |  1 +
 .../src/components/ManuscriptLayout.js        |  3 +-
 .../src/components/ManuscriptPage.js          |  4 ++
 .../src/components/SideBarActions.js          |  2 +-
 .../src/components/utils.js                   | 44 +++++++++++++------
 5 files changed, 38 insertions(+), 16 deletions(-)

diff --git a/packages/component-faraday-selectors/src/index.js b/packages/component-faraday-selectors/src/index.js
index 95f9a5b80..d95643452 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 318822b55..ea90b8396 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 a832022fd..b6ff4faa6 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 76a9369e7..7f1f8c4c7 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 2f7a3b538..1accaf54c 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.'))
     },
-- 
GitLab