From 76c3609a113bb35139577c17f5490419edd7654d Mon Sep 17 00:00:00 2001
From: Alexandru Munteanu <alexandru.munt@gmail.com>
Date: Thu, 7 Jun 2018 17:52:15 +0300
Subject: [PATCH] fix(ui): fix ui after testing session

---
 .../src/components/ManuscriptHeader.js        |  7 ++-
 .../src/components/ReviewerReportForm.js      | 55 +++++++++----------
 .../src/components/withModal.js               |  5 +-
 .../src/components/Dashboard/AssignHEModal.js | 10 +++-
 .../Dashboard/HandlingEditorActions.js        | 12 ++--
 .../components/Dashboard/ReviewerDecision.js  |  2 +
 .../components/MakeDecision/DecisionForm.js   |  6 +-
 .../src/components/Reviewers/ReviewerForm.js  |  1 +
 .../Reviewers/ReviewersDetailsList.js         |  8 ++-
 .../components-faraday/src/redux/editors.js   |  2 +-
 .../src/redux/recommendations.js              | 13 +++--
 11 files changed, 71 insertions(+), 50 deletions(-)

diff --git a/packages/component-manuscript/src/components/ManuscriptHeader.js b/packages/component-manuscript/src/components/ManuscriptHeader.js
index caa38eb70..197352213 100644
--- a/packages/component-manuscript/src/components/ManuscriptHeader.js
+++ b/packages/component-manuscript/src/components/ManuscriptHeader.js
@@ -30,10 +30,13 @@ const ManuscriptDetails = ({ version, project, journal }) => {
       <Row>
         <LeftDetails flex={3}>
           <StatusLabel>{mapStatusToLabel(project)}</StatusLabel>
-          <DateParser timestamp={get(version, 'submitted')}>
+          <DateParser
+            durationThreshold={0}
+            timestamp={get(version, 'submitted')}
+          >
             {(timestamp, days) => (
               <DateField>
-                {timestamp} ({days})
+                {timestamp} ({days} ago)
               </DateField>
             )}
           </DateParser>
diff --git a/packages/component-manuscript/src/components/ReviewerReportForm.js b/packages/component-manuscript/src/components/ReviewerReportForm.js
index 649d41190..d61e01938 100644
--- a/packages/component-manuscript/src/components/ReviewerReportForm.js
+++ b/packages/component-manuscript/src/components/ReviewerReportForm.js
@@ -34,12 +34,11 @@ import {
   FilePicker,
 } from 'pubsweet-components-faraday/src/components/Files'
 
-import { FormItems } from 'pubsweet-components-faraday/src/components/UIComponents'
-
 import {
   withModal,
   ConfirmationModal,
 } from 'pubsweet-component-modal/src/components'
+
 import {
   selectError,
   selectFetching,
@@ -53,7 +52,6 @@ import {
   parseReviewResponseToForm,
 } from './utils'
 
-const { CustomValidatedField } = FormItems
 const guidelinesLink =
   'https://about.hindawi.com/authors/peer-review-at-hindawi/'
 
@@ -97,6 +95,7 @@ const ReviewerReportForm = ({
       />
     </Row>
     <Spacing />
+    <Spacing />
     <Row left>
       <Label>Report</Label>
       {!fileFetching.review ? (
@@ -116,30 +115,32 @@ const ReviewerReportForm = ({
     </Row>
     <Row>
       <FullWidth>
-        <CustomValidatedField>
-          <ValidatedField
-            component={TextAreaField}
-            name="public"
-            validate={isEmpty(formValues.files) ? [required] : []}
-          />
-        </CustomValidatedField>
+        <ValidatedField
+          component={TextAreaField}
+          name="public"
+          validate={isEmpty(formValues.files) ? [required] : []}
+        />
       </FullWidth>
     </Row>
     {formValues.files && (
-      <Row left>
-        {formValues.files.map(file => (
-          <FileItem
-            compact
-            id={file.id}
-            key={file.id}
-            {...file}
-            removeFile={removeFile}
-          />
-        ))}
-      </Row>
+      <Fragment>
+        <Spacing />
+        <Row left>
+          {formValues.files.map(file => (
+            <FileItem
+              compact
+              id={file.id}
+              key={file.id}
+              {...file}
+              removeFile={removeFile}
+            />
+          ))}
+        </Row>
+      </Fragment>
     )}
     {formValues.hasConfidential ? (
       <Fragment>
+        <Spacing />
         <Row>
           <Label>
             Note for the editorial team <i>Not shared with the author</i>
@@ -153,13 +154,11 @@ const ReviewerReportForm = ({
         </Row>
         <Row>
           <FullWidth>
-            <CustomValidatedField>
-              <ValidatedField
-                component={TextAreaField}
-                name="confidential"
-                validate={[required]}
-              />
-            </CustomValidatedField>
+            <ValidatedField
+              component={TextAreaField}
+              name="confidential"
+              validate={[required]}
+            />
           </FullWidth>
         </Row>
       </Fragment>
diff --git a/packages/component-modal/src/components/withModal.js b/packages/component-modal/src/components/withModal.js
index 18f16ebcb..35bb92362 100644
--- a/packages/component-modal/src/components/withModal.js
+++ b/packages/component-modal/src/components/withModal.js
@@ -23,12 +23,13 @@ const withModal = mapperFn => BaseComponent =>
   compose(connect(mapState, mapDispatch))(baseProps => {
     const { modalComponent: Component, overlayColor } = mapperFn(baseProps)
     const {
+      modalKey,
+      showModal,
       hideModal,
       modalProps,
       modalError,
+      setModalError,
       modalsVisibility,
-      modalKey,
-      showModal,
       ...rest
     } = baseProps
     return (
diff --git a/packages/components-faraday/src/components/Dashboard/AssignHEModal.js b/packages/components-faraday/src/components/Dashboard/AssignHEModal.js
index eb201ac3b..31422da54 100644
--- a/packages/components-faraday/src/components/Dashboard/AssignHEModal.js
+++ b/packages/components-faraday/src/components/Dashboard/AssignHEModal.js
@@ -6,7 +6,7 @@ import { compose } from 'recompose'
 import { connect } from 'react-redux'
 import styled from 'styled-components'
 import { actions } from 'pubsweet-client'
-import { th, Icon, Spinner } from '@pubsweet/ui'
+import { th, Icon, ErrorText, Spinner } from '@pubsweet/ui'
 
 import {
   selectFetching,
@@ -61,7 +61,7 @@ class AssignHEModal extends React.Component {
 
   render() {
     const { searchInput } = this.state
-    const { editors, hideModal, isFetching } = this.props
+    const { editors, hideModal, isFetching, modalError } = this.props
     const filteredEditors = this.filterEditors(editors)
     return (
       <RootModal>
@@ -105,6 +105,7 @@ class AssignHEModal extends React.Component {
             ))}
           </ModalContent>
         </ScrollContainer>
+        <CustomError>{modalError}</CustomError>
       </RootModal>
     )
   }
@@ -125,6 +126,11 @@ export default compose(
 )(AssignHEModal)
 
 // #region styled-components
+const CustomError = ErrorText.extend`
+  font-family: ${th('fontReading')};
+  margin: ${th('subGridUnit')} 0;
+`
+
 const SubtitleRow = styled.div`
   display: flex;
   justify-content: space-between;
diff --git a/packages/components-faraday/src/components/Dashboard/HandlingEditorActions.js b/packages/components-faraday/src/components/Dashboard/HandlingEditorActions.js
index 82907e31d..380e50fc3 100644
--- a/packages/components-faraday/src/components/Dashboard/HandlingEditorActions.js
+++ b/packages/components-faraday/src/components/Dashboard/HandlingEditorActions.js
@@ -28,10 +28,10 @@ const DeclineModal = compose(
       value={reason}
     />
     <div data-test="he-buttons">
-      <Button onClick={hideModal}>Cancel</Button>
-      <Button onClick={onConfirm(reason)} primary>
+      <DecisionButton onClick={hideModal}>Cancel</DecisionButton>
+      <DecisionButton onClick={onConfirm(reason)} primary>
         Decline
-      </Button>
+      </DecisionButton>
     </div>
   </DeclineRoot>
 ))
@@ -119,6 +119,8 @@ const DecisionButton = styled(Button)`
   background-color: ${({ primary }) =>
     primary ? th('colorPrimary') : th('backgroundColorReverse')};
   height: calc(${th('subGridUnit')} * 5);
+  margin-left: ${th('gridUnit')};
+  padding: 0;
   text-align: center;
 `
 
@@ -158,7 +160,5 @@ const DeclineRoot = styled.div`
   }
 `
 
-const Root = styled.div`
-  margin-left: ${th('gridUnit')};
-`
+const Root = styled.div``
 // #endregion
diff --git a/packages/components-faraday/src/components/Dashboard/ReviewerDecision.js b/packages/components-faraday/src/components/Dashboard/ReviewerDecision.js
index 6dece3361..7037dbebf 100644
--- a/packages/components-faraday/src/components/Dashboard/ReviewerDecision.js
+++ b/packages/components-faraday/src/components/Dashboard/ReviewerDecision.js
@@ -97,6 +97,8 @@ const DecisionButton = styled(Button)`
   color: ${({ primary }) =>
     primary ? th('colorTextReverse') : th('colorPrimary')});
   height: calc(${th('subGridUnit')} * 5);
+  margin-left: ${th('gridUnit')};
+  padding: 0;
   text-align: center;
 `
 // #endregion
diff --git a/packages/components-faraday/src/components/MakeDecision/DecisionForm.js b/packages/components-faraday/src/components/MakeDecision/DecisionForm.js
index ad282d0f6..3e0d89583 100644
--- a/packages/components-faraday/src/components/MakeDecision/DecisionForm.js
+++ b/packages/components-faraday/src/components/MakeDecision/DecisionForm.js
@@ -142,6 +142,7 @@ export default compose(
       dispatch,
       {
         showModal,
+        hideModal,
         fragmentId,
         collectionId,
         getCollections,
@@ -150,8 +151,11 @@ export default compose(
     ) => {
       const recommendation = parseFormValues(values)
       createRecommendation(collectionId, fragmentId, recommendation).then(r => {
-        getCollections()
         showModal({
+          onCancel: () => {
+            getCollections()
+            hideModal()
+          },
           title: 'Decision submitted',
           cancelText: 'OK',
         })
diff --git a/packages/components-faraday/src/components/Reviewers/ReviewerForm.js b/packages/components-faraday/src/components/Reviewers/ReviewerForm.js
index 465ed9dcb..0a26dbfc5 100644
--- a/packages/components-faraday/src/components/Reviewers/ReviewerForm.js
+++ b/packages/components-faraday/src/components/Reviewers/ReviewerForm.js
@@ -96,6 +96,7 @@ export default compose(
 const FormButton = styled(Button)`
   height: calc(${th('subGridUnit')} * 5);
   margin: ${th('subGridUnit')};
+  padding: 0;
 `
 
 const Err = styled.span`
diff --git a/packages/components-faraday/src/components/Reviewers/ReviewersDetailsList.js b/packages/components-faraday/src/components/Reviewers/ReviewersDetailsList.js
index b9cb3ea8d..b24ca0035 100644
--- a/packages/components-faraday/src/components/Reviewers/ReviewersDetailsList.js
+++ b/packages/components-faraday/src/components/Reviewers/ReviewersDetailsList.js
@@ -54,9 +54,11 @@ const TR = ({
         <StatusText>
           {`${r.status === 'accepted' ? 'Agreed' : r.status}`}
         </StatusText>
-        <DateParser timestamp={r.respondedOn}>
-          {timestamp => <DateText>{`: ${timestamp}`}</DateText>}
-        </DateParser>
+        {r.respondedOn && (
+          <DateParser timestamp={r.respondedOn}>
+            {timestamp => <DateText>{`: ${timestamp}`}</DateText>}
+          </DateParser>
+        )}
       </td>
       <DateParser timestamp={submittedOn}>
         {timestamp => <td>{timestamp}</td>}
diff --git a/packages/components-faraday/src/redux/editors.js b/packages/components-faraday/src/redux/editors.js
index 63cb3b837..34f1423cc 100644
--- a/packages/components-faraday/src/redux/editors.js
+++ b/packages/components-faraday/src/redux/editors.js
@@ -38,7 +38,7 @@ export const assignHandlingEditor = (email, collectionId) => dispatch => {
     },
     err => {
       dispatch(editorsDone())
-      return err
+      throw err
     },
   )
 }
diff --git a/packages/components-faraday/src/redux/recommendations.js b/packages/components-faraday/src/redux/recommendations.js
index a85e13f8c..3314f901d 100644
--- a/packages/components-faraday/src/redux/recommendations.js
+++ b/packages/components-faraday/src/redux/recommendations.js
@@ -21,9 +21,9 @@ export const recommendationsError = error => ({
   error,
 })
 
-export const getRecommendationsSuccess = recommendations => ({
+export const getRecommendationsSuccess = recommendation => ({
   type: GET_RECOMMENDATIONS_SUCCESS,
-  payload: { recommendations },
+  payload: { recommendation },
 })
 
 export const createRecommendationSuccess = recommendation => ({
@@ -61,7 +61,7 @@ export const createRecommendation = (
     recommendation,
   ).then(
     r => {
-      dispatch(getRecommendationsSuccess([r]))
+      dispatch(getRecommendationsSuccess(r))
       return r
     },
     err => {
@@ -88,7 +88,7 @@ export const updateRecommendation = (
     recommendation,
   ).then(
     r => {
-      dispatch(getRecommendationsSuccess([r]))
+      dispatch(getRecommendationsSuccess(r))
       return r
     },
     err => {
@@ -97,6 +97,7 @@ export const updateRecommendation = (
         const errorMessage = get(JSON.parse(error), 'error')
         dispatch(recommendationsError(errorMessage))
       }
+      throw err
     },
   )
 }
@@ -134,7 +135,9 @@ export default (state = initialState, action = {}) => {
         ...state,
         fetching: false,
         error: null,
-        recommendations: action.payload.recommendations,
+        recommendations: state.recommendations
+          ? [...state.recommendations, action.payload.recommendation]
+          : action.payload.recommendation,
       }
     case UPDATE_RECOMMENDATION_SUCCESS:
     case CREATE_RECOMMENDATION_SUCCESS:
-- 
GitLab