From 95f80ce5dcac5d11ab4674fc85da1278d8357e1d Mon Sep 17 00:00:00 2001
From: Alexandru Munteanu <alexandru.munt@gmail.com>
Date: Fri, 22 Jun 2018 11:51:19 +0300
Subject: [PATCH] fix(submit-revision): fix bugs

---
 .../routes/fragmentsRecommendations/patch.js  |  2 +-
 .../src/components/ManuscriptDetails.js       |  8 +++--
 .../src/components/ManuscriptLayout.js        |  2 +-
 .../src/components/utils.js                   | 34 +++++++++----------
 .../src/components/WizardFormStep.js          | 18 ++++++----
 .../src/components/Dashboard/DashboardCard.js |  2 +-
 .../src/components/Files/Files.js             |  9 ++---
 7 files changed, 42 insertions(+), 33 deletions(-)

diff --git a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/patch.js b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/patch.js
index 6b946fec5..f4b9a4cfd 100644
--- a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/patch.js
+++ b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/patch.js
@@ -74,7 +74,7 @@ module.exports = models => async (req, res) => {
       if (!['pendingApproval', 'revisionRequested'].includes(collection.status))
         collectionHelper.updateStatus({ newStatus: 'reviewCompleted' })
     }
-
+    await fragment.save()
     return res.status(200).json(recommendation)
   } catch (e) {
     const notFoundError = await services.handleNotFoundError(e, 'Item')
diff --git a/packages/component-manuscript/src/components/ManuscriptDetails.js b/packages/component-manuscript/src/components/ManuscriptDetails.js
index df5e50181..5c8545b65 100644
--- a/packages/component-manuscript/src/components/ManuscriptDetails.js
+++ b/packages/component-manuscript/src/components/ManuscriptDetails.js
@@ -7,8 +7,12 @@ import { Authors, Files } from './'
 import { Expandable } from '../molecules/'
 
 const ManuscriptDetails = ({
-  collection: { authors = [] },
-  fragment: { conflicts = {}, files = {}, metadata: { abstract = '' } },
+  fragment: {
+    files = {},
+    authors = [],
+    conflicts = {},
+    metadata: { abstract = '' },
+  },
 }) => (
   <Root>
     <Expandable label="Details" startExpanded>
diff --git a/packages/component-manuscript/src/components/ManuscriptLayout.js b/packages/component-manuscript/src/components/ManuscriptLayout.js
index ea6b9532e..5e7bd4c01 100644
--- a/packages/component-manuscript/src/components/ManuscriptLayout.js
+++ b/packages/component-manuscript/src/components/ManuscriptLayout.js
@@ -53,7 +53,7 @@ const ManuscriptLayout = ({
             project={project}
             version={version}
           />
-          <ManuscriptDetails collection={project} fragment={version} />
+          <ManuscriptDetails fragment={version} />
           <ReviewsAndReports project={project} version={version} />
           {canSeeEditorialComments &&
             editorialRecommendations.length > 0 && (
diff --git a/packages/component-manuscript/src/components/utils.js b/packages/component-manuscript/src/components/utils.js
index ed5e3885b..f3aefdd95 100644
--- a/packages/component-manuscript/src/components/utils.js
+++ b/packages/component-manuscript/src/components/utils.js
@@ -1,5 +1,5 @@
 import moment from 'moment'
-import { get, find, capitalize, omit, isEmpty, isEqual, debounce } from 'lodash'
+import { get, find, capitalize, omit, isEmpty, debounce } from 'lodash'
 
 import { actions } from 'pubsweet-client/src'
 import { change as changeForm } from 'redux-form'
@@ -137,25 +137,23 @@ const onChange = (
   values,
   dispatch,
   { project, version, createRecommendation, updateRecommendation },
-  previousValues,
 ) => {
   const newValues = parseReviewRequest(values)
-  const prevValues = parseReviewRequest(previousValues)
-  if (!isEqual(newValues, prevValues)) {
-    dispatch(autosaveRequest())
-    if (newValues.id) {
-      updateRecommendation(project.id, version.id, newValues)
-        .then(r => dispatch(autosaveSuccess(get(r, 'updatedOn'))))
-        .catch(e => dispatch(autosaveFailure(e)))
-    } else {
-      createRecommendation(project.id, version.id, newValues)
-        .then(r => {
-          dispatch(changeForm('reviewerReport', 'id', r.id))
-          return dispatch(autosaveSuccess(get(r, 'updatedOn')))
-        })
-        .catch(e => dispatch(autosaveFailure(e)))
-    }
+  // if (!isEqual(newValues, prevValues)) {
+  dispatch(autosaveRequest())
+  if (newValues.id) {
+    updateRecommendation(project.id, version.id, newValues)
+      .then(r => dispatch(autosaveSuccess(get(r, 'updatedOn'))))
+      .catch(e => dispatch(autosaveFailure(e)))
+  } else {
+    createRecommendation(project.id, version.id, newValues)
+      .then(r => {
+        dispatch(changeForm('reviewerReport', 'id', r.id))
+        return dispatch(autosaveSuccess(get(r, 'updatedOn')))
+      })
+      .catch(e => dispatch(autosaveFailure(e)))
   }
+  // }
 }
 
 export const onReviewChange = debounce(onChange, 1000, { maxWait: 5000 })
@@ -183,7 +181,7 @@ export const onReviewSubmit = (
       updateRecommendation(project.id, version.id, newValues)
         .then(r => dispatch(autosaveSuccess(get(r, 'updatedOn'))))
         .then(() => {
-          dispatch(actions.getFragments())
+          dispatch(actions.getFragments({ id: project.id }))
           hideModal()
         })
     },
diff --git a/packages/component-wizard/src/components/WizardFormStep.js b/packages/component-wizard/src/components/WizardFormStep.js
index d5e716601..5579434a3 100644
--- a/packages/component-wizard/src/components/WizardFormStep.js
+++ b/packages/component-wizard/src/components/WizardFormStep.js
@@ -73,13 +73,19 @@ const submitFragmentRevision = ({
   history,
   redirectPath = '/',
 }) => {
-  submitRevision(project.id, version.id).then(() => {
-    history.push(redirectPath, {
-      project: project.id,
-      customId: project.customId,
-      version: version.id,
+  submitRevision(project.id, version.id)
+    .then(() => {
+      history.push(redirectPath, {
+        project: project.id,
+        customId: project.customId,
+        version: version.id,
+      })
+    })
+    .catch(error => {
+      if (error.validationErrors) {
+        throw new SubmissionError()
+      }
     })
-  })
 }
 
 const onSubmit = (
diff --git a/packages/components-faraday/src/components/Dashboard/DashboardCard.js b/packages/components-faraday/src/components/Dashboard/DashboardCard.js
index ae4c120f5..7709aa341 100644
--- a/packages/components-faraday/src/components/Dashboard/DashboardCard.js
+++ b/packages/components-faraday/src/components/Dashboard/DashboardCard.js
@@ -143,7 +143,7 @@ const DashboardCard = ({
         project.status !== 'draft' && (
           <DetailsView>
             <Top>
-              <AuthorsWithTooltip authors={project.authors} />
+              <AuthorsWithTooltip authors={version.authors} />
             </Top>
             <Bottom>
               <LeftDetails flex={4}>
diff --git a/packages/components-faraday/src/components/Files/Files.js b/packages/components-faraday/src/components/Files/Files.js
index 4294b9198..3055f5a4f 100644
--- a/packages/components-faraday/src/components/Files/Files.js
+++ b/packages/components-faraday/src/components/Files/Files.js
@@ -1,4 +1,4 @@
-import React from 'react'
+import React, { Fragment } from 'react'
 import { th } from '@pubsweet/ui'
 import PropTypes from 'prop-types'
 import { get, isEqual } from 'lodash'
@@ -6,6 +6,7 @@ import { connect } from 'react-redux'
 import styled from 'styled-components'
 import { withRouter } from 'react-router-dom'
 import { change as changeForm } from 'redux-form'
+import { selectCurrentVersion } from 'xpub-selectors'
 import {
   compose,
   lifecycle,
@@ -35,7 +36,7 @@ const Files = ({
   isRevisionFlow,
   dropSortableFile,
 }) => (
-  <div>
+  <Fragment>
     <Error show={error}> File error, please try again.</Error>
     <FileSection
       addFile={addFile('manuscripts')}
@@ -89,12 +90,11 @@ const Files = ({
         title="Response to reviewers"
       />
     )}
-  </div>
+  </Fragment>
 )
 
 export default compose(
   getContext({
-    version: PropTypes.object,
     project: PropTypes.object,
   }),
   withRouter,
@@ -102,6 +102,7 @@ export default compose(
     (state, { project, version }) => ({
       error: getFileError(state),
       isFetching: getRequestStatus(state),
+      version: selectCurrentVersion(state, project),
       isRevisionFlow: isRevisionFlow(state, project, version),
     }),
     {
-- 
GitLab