From 29e2a90679d1b558e95ea000acae25e18d3b7425 Mon Sep 17 00:00:00 2001
From: Bogdan Cochior <bogdan.cochior@thinslices.com>
Date: Thu, 15 Feb 2018 10:00:15 +0200
Subject: [PATCH] refactor(component): wip: handle errors

---
 .../src/components/Admin/AddEditUser.js       | 19 +++++++---
 .../src/components/Admin/Admin.js             |  2 +-
 .../components/SignUp/SignUpInvitationPage.js | 37 +++++++++++++++++--
 packages/xpub-faraday/config/default.js       |  2 +-
 4 files changed, 48 insertions(+), 12 deletions(-)

diff --git a/packages/components-faraday/src/components/Admin/AddEditUser.js b/packages/components-faraday/src/components/Admin/AddEditUser.js
index 1d487d28f..f06c8c9da 100644
--- a/packages/components-faraday/src/components/Admin/AddEditUser.js
+++ b/packages/components-faraday/src/components/Admin/AddEditUser.js
@@ -1,7 +1,7 @@
 import React from 'react'
 import { get, map } from 'lodash'
 import { connect } from 'react-redux'
-import { reduxForm } from 'redux-form'
+import { reduxForm, SubmissionError } from 'redux-form'
 import styled from 'styled-components'
 import { actions } from 'pubsweet-client'
 import { create } from 'pubsweet-client/src/helpers/api'
@@ -17,12 +17,19 @@ import EditUserForm from './EditUserForm'
 const getRoleOptions = journal =>
   map(journal.roles, (value, key) => ({ label: value, value: key }))
 
-const onSubmit = (values, dispatch, { isEdit }) => {
+const onSubmit = (values, dispatch, { isEdit, history }) => {
   if (!isEdit) {
-    create('/users/invite', values).then(
-      r => r,
-      // err => console.log(err),
-    )
+    return create('/users/invite', values)
+      .then(r => history.push('/admin/users'))
+      .catch(error => {
+        const err = get(error, 'response')
+        if (err) {
+          const errorMessage = get(JSON.parse(err), 'error')
+          throw new SubmissionError({
+            role: errorMessage || 'Something went wrong',
+          })
+        }
+      })
   }
 }
 
diff --git a/packages/components-faraday/src/components/Admin/Admin.js b/packages/components-faraday/src/components/Admin/Admin.js
index 023333aa8..afc6a0221 100644
--- a/packages/components-faraday/src/components/Admin/Admin.js
+++ b/packages/components-faraday/src/components/Admin/Admin.js
@@ -33,7 +33,7 @@ const Admin = ({
   <div>
     <Header>
       <span>Users</span>
-      <AddButton onClick={() => history.push('/')}>
+      <AddButton onClick={() => history.push('/admin/urers/add')}>
         <Icon color="#667080">plus-circle</Icon>
         Add User
       </AddButton>
diff --git a/packages/components-faraday/src/components/SignUp/SignUpInvitationPage.js b/packages/components-faraday/src/components/SignUp/SignUpInvitationPage.js
index 728f54771..314d2899c 100644
--- a/packages/components-faraday/src/components/SignUp/SignUpInvitationPage.js
+++ b/packages/components-faraday/src/components/SignUp/SignUpInvitationPage.js
@@ -1,16 +1,45 @@
+import { get } from 'lodash'
 import { withJournal } from 'xpub-journal'
+import { login } from 'pubsweet-component-xpub-authentication/src/redux/login'
+import { SubmissionError } from 'redux-form'
 import { create } from 'pubsweet-client/src/helpers/api'
 import { compose, withState, withProps, withHandlers } from 'recompose'
 
 import SignUpInvitation from './SignUpInvitationForm'
 
+const loginUser = (dispatch, values, history) =>
+  dispatch(login(values))
+    .then(() => {
+      history.push('/')
+    })
+    .catch(error => {
+      const err = get(error, 'response')
+      if (err) {
+        const errorMessage = get(JSON.parse(err), 'error')
+        throw new SubmissionError({
+          password: errorMessage || 'Something went wrong',
+        })
+      }
+    })
+
 const confirmUser = (email, token) => (values, dispatch, { history }) => {
   const request = { ...values, email, token }
   if (values) {
-    create('/users/invite/password/reset', request).then(
-      r => history.push('/'),
-      // err => console.log(err),
-    )
+    return create('/users/invite/password/reset', request)
+      .then(r => {
+        const { username } = r
+        const { password } = values
+        loginUser(dispatch, { username, password }, history)
+      })
+      .catch(error => {
+        const err = get(error, 'response')
+        if (err) {
+          const errorMessage = get(JSON.parse(err), 'error')
+          throw new SubmissionError({
+            password: errorMessage || 'Something went wrong',
+          })
+        }
+      })
   }
 }
 
diff --git a/packages/xpub-faraday/config/default.js b/packages/xpub-faraday/config/default.js
index dcab7794e..b5acdae84 100644
--- a/packages/xpub-faraday/config/default.js
+++ b/packages/xpub-faraday/config/default.js
@@ -25,7 +25,7 @@ module.exports = {
   'pubsweet-client': {
     API_ENDPOINT: '/api',
     'login-redirect': '/',
-    'redux-log': false,
+    'redux-log': true,
     theme: process.env.PUBSWEET_THEME,
   },
   'mail-transport': {
-- 
GitLab