From dc8bcb450b0193b7e1c29f462aede04d57c76c55 Mon Sep 17 00:00:00 2001
From: esikkala <esko.ikkala@aalto.fi>
Date: Wed, 27 Feb 2019 13:35:41 +0200
Subject: [PATCH] Update error handling

---
 src/client/actions/index.js        |  8 +++---
 src/client/epics/index.js          | 45 +++++++++++++++++-------------
 src/client/index.js                |  3 +-
 src/client/reducers/manuscripts.js | 22 +++++----------
 4 files changed, 37 insertions(+), 41 deletions(-)

diff --git a/src/client/actions/index.js b/src/client/actions/index.js
index ae3c8032..2caa7c95 100644
--- a/src/client/actions/index.js
+++ b/src/client/actions/index.js
@@ -19,9 +19,9 @@ export const fetchPaginatedResults = (resultClass, facetClass, variant) => ({
   type: FETCH_PAGINATED_RESULTS,
   resultClass, facetClass, variant
 });
-export const fetchPaginatedResultsFailed = (resultClass, message) => ({
+export const fetchPaginatedResultsFailed = (resultClass, error, message) => ({
   type: FETCH_PAGINATED_RESULTS_FAILED,
-  resultClass, message
+  resultClass, error, message
 });
 export const fetchResults = (resultClass, facetClass, variant) => ({
   type: FETCH_RESULTS,
@@ -51,9 +51,9 @@ export const fetchFacet = (resultClass, id, sortBy, sortDirection) => ({
   type: FETCH_FACET,
   resultClass, id, sortBy, sortDirection
 });
-export const fetchFacetFailed = (resultClass, id, message) => ({
+export const fetchFacetFailed = (resultClass, id, error, message) => ({
   type: FETCH_FACET_FAILED,
-  resultClass, message
+  resultClass, id, error, message
 });
 export const updateFacet = ({ resultClass, id, distinctValueCount, values, flatValues, sortBy, sortDirection }) => ({
   type: UPDATE_FACET,
diff --git a/src/client/epics/index.js b/src/client/epics/index.js
index 4839a467..7f8d7ae9 100644
--- a/src/client/epics/index.js
+++ b/src/client/epics/index.js
@@ -10,7 +10,7 @@ import {
   FETCH_BY_URI,
   FETCH_FACET,
   FETCH_FACET_FAILED,
-  SHOW_ERROR,
+  //SHOW_ERROR,
   updateResults,
   updateInstance,
   updateFacet,
@@ -20,6 +20,8 @@ const apiUrl = (process.env.NODE_ENV === 'development')
   ? 'http://localhost:3001/api/'
   : `http://${location.hostname}/api/`;
 
+const backendErrorText = 'Cannot connect to MMM Knowledge Base. A data conversion process might be running. Please try again later.';
+
 const fetchPaginatedResultsEpic = (action$, state$) => action$.pipe(
   ofType(FETCH_PAGINATED_RESULTS),
   withLatestFrom(state$),
@@ -32,9 +34,10 @@ const fetchPaginatedResultsEpic = (action$, state$) => action$.pipe(
       catchError(error => of({
         type: FETCH_PAGINATED_RESULTS_FAILED,
         resultClass: resultClass,
+        error: error,
         message: {
-          text: error.xhr.statusText,
-          title: ''
+          text: backendErrorText,
+          title: 'Error'
         }
       }))
     );
@@ -50,14 +53,15 @@ const fetchResultsEpic = (action$, state$) => action$.pipe(
     const requestUrl = `${apiUrl}${resultClass}/all?${params}`;
     return ajax.getJSON(requestUrl).pipe(
       map(response => updateResults({ resultClass: resultClass, data: response })),
-      catchError(error => of({
-        type: SHOW_ERROR,
-        resultClass: resultClass,
-        message: {
-          text: error.xhr.statusText,
-          title: ''
-        }
-      }))
+      // catchError(error => of({
+      //   type: SHOW_ERROR,
+      //   resultClass: resultClass,
+      //   error: error,
+      //   message: {
+      //     text: backendErrorText,
+      //     title: 'Error'
+      //   }
+      // }))
     );
   })
 );
@@ -71,13 +75,13 @@ const fetchByURIEpic = (action$, state$) => action$.pipe(
     const requestUrl = `${apiUrl}${resultClass}/instance/${encodeURIComponent(uri)}?${params}`;
     return ajax.getJSON(requestUrl).pipe(
       map(response => updateInstance({ resultClass: resultClass, instance: response })),
-      catchError(error => of({
-        type: SHOW_ERROR,
-        message: {
-          text: error.xhr.statusText,
-          title: ''
-        }
-      }))
+      // catchError(error => of({
+      //   type: SHOW_ERROR,
+      //   message: {
+      //     text: error.xhr.statusText,
+      //     title: ''
+      //   }
+      // }))
     );
   })
 );
@@ -116,9 +120,10 @@ const fetchFacetEpic = (action$, state$) => action$.pipe(
         type: FETCH_FACET_FAILED,
         resultClass: action.resultClass,
         id: action.id,
+        error: error,
         message: {
-          text: error.xhr.statusText,
-          title: ''
+          text: backendErrorText,
+          title: 'Error'
         }
       }))
     );
diff --git a/src/client/index.js b/src/client/index.js
index a0b13f4f..855e54b0 100644
--- a/src/client/index.js
+++ b/src/client/index.js
@@ -38,13 +38,12 @@ render(
         <App />
       </Router>
       <ReduxToastr
-        timeOut={4000}
+        timeOut={0}
         newestOnTop={false}
         preventDuplicates
         position="top-center"
         transitionIn="fadeIn"
         transitionOut="fadeOut"
-        progressBar
       />
     </div>
   </Provider>,
diff --git a/src/client/reducers/manuscripts.js b/src/client/reducers/manuscripts.js
index 39ec36c5..a58796b6 100644
--- a/src/client/reducers/manuscripts.js
+++ b/src/client/reducers/manuscripts.js
@@ -101,21 +101,13 @@ const manuscripts = (state = INITIAL_STATE, action) => {
       case SORT_RESULTS:
         return updateSortBy(state, action);
       case UPDATE_RESULTS:
-        if (action.data !== null) {
-          return {
-            ...state,
-            resultCount: parseInt(action.data.resultCount),
-            results: action.data.results,
-            fetching: false
-          };
-        } else {
-          return {
-            ...state,
-            results: [],
-            resultCount: 0,
-            fetching: false        
-          };
-        }
+        // console.log(action)
+        return {
+          ...state,
+          resultCount: parseInt(action.data.resultCount),
+          results: action.data.results,
+          fetching: false
+        };
       case UPDATE_INSTANCE:
         return {
           ...state,
-- 
GitLab