From c1b58d05cf4486d0a0579d266266075c30fbfaa2 Mon Sep 17 00:00:00 2001 From: Vikas Agarwal Date: Mon, 25 Jun 2018 10:50:00 +0530 Subject: [PATCH 1/3] Enabling maintenance mode if projects api is down. Needed to deploy the backend services without causing partial or wrong data in database because of old api serving the content during the deployment --- src/components/Layout/Layout.js | 7 +++++-- src/components/Layout/Layout.jsx | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/components/Layout/Layout.js b/src/components/Layout/Layout.js index a5834cfca..887a7ce77 100644 --- a/src/components/Layout/Layout.js +++ b/src/components/Layout/Layout.js @@ -18,10 +18,13 @@ class Layout extends Component { } } -const mapStateToProps = ({ loadUser }) => { +const mapStateToProps = ({ loadUser, projectState, projectSearch }) => { + const projectDetailApiCheck = !projectState.isLoading && !!projectState.error + const projectListingApiCheck = !projectSearch.isLoading && !!projectSearch.error return { user : loadUser.user, - isLoadingUser: loadUser.isLoading + isLoadingUser: loadUser.isLoading, + maintenanceMode: projectDetailApiCheck || projectListingApiCheck } } diff --git a/src/components/Layout/Layout.jsx b/src/components/Layout/Layout.jsx index 423ce6682..f0ca3c7b7 100644 --- a/src/components/Layout/Layout.jsx +++ b/src/components/Layout/Layout.jsx @@ -12,11 +12,11 @@ import '../../styles/vendors/s-alert-default.css' import 'react-s-alert/dist/s-alert-css-effects/slide.css' const Layout = (props) => { - const { isLoadingUser } = props + const { isLoadingUser, maintenanceMode } = props if (isLoadingUser) { return (
) - } else if (MAINTENANCE_MODE) { + } else if (maintenanceMode) { return } else { return ( From ecf3fd503bebdc3772f669f8c16d0d6afa6ab38c Mon Sep 17 00:00:00 2001 From: Vikas Agarwal Date: Mon, 25 Jun 2018 10:54:45 +0530 Subject: [PATCH 2/3] lint fix --- src/components/Layout/Layout.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Layout/Layout.jsx b/src/components/Layout/Layout.jsx index f0ca3c7b7..a4a7c92cd 100644 --- a/src/components/Layout/Layout.jsx +++ b/src/components/Layout/Layout.jsx @@ -1,6 +1,6 @@ import React from 'react' import Footer from '../Footer/Footer' -import { MAINTENANCE_MODE } from '../../config/constants' +// import { MAINTENANCE_MODE } from '../../config/constants' import Alert from 'react-s-alert' import cn from 'classnames' import Maintenance from '../Maintenance/Maintenance' From 039f9237148b65259c608026ced92572f5282824 Mon Sep 17 00:00:00 2001 From: Vikas Agarwal Date: Mon, 25 Jun 2018 12:05:44 +0530 Subject: [PATCH 3/3] Handling non 404 more appropriately. Now it should not show maintenance page for 403 or any custom status returned by the API, it should be shown only if the API endpoint does not exist. --- src/components/Layout/Layout.js | 2 +- src/projects/reducers/project.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/Layout/Layout.js b/src/components/Layout/Layout.js index 887a7ce77..4ee661f4e 100644 --- a/src/components/Layout/Layout.js +++ b/src/components/Layout/Layout.js @@ -19,7 +19,7 @@ class Layout extends Component { } const mapStateToProps = ({ loadUser, projectState, projectSearch }) => { - const projectDetailApiCheck = !projectState.isLoading && !!projectState.error + const projectDetailApiCheck = !projectState.isLoading && !!projectState.error && projectState.error.code === 404 const projectListingApiCheck = !projectSearch.isLoading && !!projectSearch.error return { user : loadUser.user, diff --git a/src/projects/reducers/project.js b/src/projects/reducers/project.js index 053418c23..81acbb307 100644 --- a/src/projects/reducers/project.js +++ b/src/projects/reducers/project.js @@ -29,9 +29,10 @@ const initialState = { const parseErrorObj = (action) => { const data = _.get(action.payload, 'response.data.result') + const httpStatus = _.get(action.payload, 'response.status') return { type: action.type, - code: _.get(data, 'status', 500), + code: _.get(data, 'status', httpStatus || 500), msg: _.get(data, 'content.message', ''), details: JSON.parse(_.get(data, 'details', null)) }