From 85ab8d3e0242c44b53c893172feea95a4732e269 Mon Sep 17 00:00:00 2001
From: Alexandru Munteanu <alexandru.munt@gmail.com>
Date: Thu, 18 Oct 2018 17:19:08 +0300
Subject: [PATCH] feat(submitRevision): handle errors when collapsing the
 contextual boxes

---
 .../src/submissionRevision/ResponseToReviewer.js     |  1 -
 .../src/submissionRevision/SubmitRevision.js         |  4 +++-
 .../component-manuscript/src/submitRevision/utils.js | 12 ++++--------
 .../src/submitRevision/withSubmitRevision.js         | 11 +++++++----
 4 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/packages/component-faraday-ui/src/submissionRevision/ResponseToReviewer.js b/packages/component-faraday-ui/src/submissionRevision/ResponseToReviewer.js
index ae8d081db..f3b6c168f 100644
--- a/packages/component-faraday-ui/src/submissionRevision/ResponseToReviewer.js
+++ b/packages/component-faraday-ui/src/submissionRevision/ResponseToReviewer.js
@@ -31,7 +31,6 @@ const ResponseToReviewer = ({
 }) => (
   <ContextualBox
     label="Response to Reviewer Comments"
-    mt={1}
     startExpanded
     transparent
   >
diff --git a/packages/component-faraday-ui/src/submissionRevision/SubmitRevision.js b/packages/component-faraday-ui/src/submissionRevision/SubmitRevision.js
index 181369c52..67d42391f 100644
--- a/packages/component-faraday-ui/src/submissionRevision/SubmitRevision.js
+++ b/packages/component-faraday-ui/src/submissionRevision/SubmitRevision.js
@@ -84,4 +84,6 @@ const Root = styled.div`
   padding: calc(${th('gridUnit')} * 2);
 `
 
-export default reduxForm({ form: 'revision' })(SubmitRevision)
+export default reduxForm({ form: 'revision', destroyOnUnmount: false })(
+  SubmitRevision,
+)
diff --git a/packages/component-manuscript/src/submitRevision/utils.js b/packages/component-manuscript/src/submitRevision/utils.js
index f5291c811..ab28ccc47 100644
--- a/packages/component-manuscript/src/submitRevision/utils.js
+++ b/packages/component-manuscript/src/submitRevision/utils.js
@@ -1,6 +1,6 @@
 import { actions } from 'pubsweet-client'
+import { get, debounce, omit, set } from 'lodash'
 import { handleError } from 'pubsweet-component-faraday-ui'
-import { get, debounce, omit, mergeWith, set } from 'lodash'
 import { autosaveRequest } from 'pubsweet-component-wizard/src/redux/autosave'
 import { submitRevision } from 'pubsweet-component-wizard/src/redux/conversion'
 
@@ -11,12 +11,6 @@ const parseRevision = (values, fragment) => {
     ...fragment,
     revision: {
       ...v,
-      metadata: mergeWith(
-        {},
-        fragment.metadata,
-        v.metadata,
-        (obj, src) => (src === '' ? obj : src),
-      ),
     },
   }
 }
@@ -31,8 +25,10 @@ export const onChange = debounce(_onChange, 1000, { maxWait: 5000 })
 export const onSubmit = (
   values,
   dispatch,
-  { history, fragment, collection, showModal, setFetching },
+  { history, fragment, collection, showModal, setFetching, canSubmit },
 ) => {
+  if (!canSubmit) return
+
   showModal({
     title: 'Ready to submit your revision?',
     subtitle: `Once submitted, the submission can't be modified.`,
diff --git a/packages/component-manuscript/src/submitRevision/withSubmitRevision.js b/packages/component-manuscript/src/submitRevision/withSubmitRevision.js
index bee0fa857..d09b967df 100644
--- a/packages/component-manuscript/src/submitRevision/withSubmitRevision.js
+++ b/packages/component-manuscript/src/submitRevision/withSubmitRevision.js
@@ -9,8 +9,8 @@ import {
   withFileDownload,
 } from 'pubsweet-component-faraday-ui'
 import { DragDropContext } from 'react-dnd'
+import { change as changeForm } from 'redux-form'
 import HTML5Backend from 'react-dnd-html5-backend'
-import { change as changeForm, getFormSyncErrors, isPristine } from 'redux-form'
 import { withModal } from 'pubsweet-component-modal/src/components'
 import {
   compose,
@@ -39,8 +39,10 @@ export default compose(
   withFileDownload,
   connect(
     state => ({
-      isPristine: isPristine('revision')(state),
-      formErrors: getFormSyncErrors('revision')(state),
+      canSubmit: !get(state, 'form.revision.syncErrors'),
+      hasFormError:
+        get(state, 'form.revision.syncErrors') &&
+        get(state, 'form.revision.anyTouched', false),
     }),
     { changeForm },
   ),
@@ -102,6 +104,7 @@ export default compose(
         'journal',
         'history',
         'fragment',
+        'canSubmit',
         'addAuthor',
         'showModal',
         'changeForm',
@@ -114,6 +117,7 @@ export default compose(
         'downloadFile',
         'deleteAuthor',
         'getSignedUrl',
+        'hasFormError',
         'fetchingError',
         'addResponseFile',
         'deleteResponseFile',
@@ -121,7 +125,6 @@ export default compose(
       onChange,
       onSubmit,
       validate,
-      hasFormError: !props.isPristine && !!props.formErrors,
       responseFile: get(
         props,
         'formValues.revision.responseToReviewers.file',
-- 
GitLab