From fa8112b9232204209fc3c336a9661448822c3dc4 Mon Sep 17 00:00:00 2001
From: Todd Dembrey <todd.dembrey@torchbox.com>
Date: Tue, 19 Feb 2019 18:02:11 +0000
Subject: [PATCH] GH-991: delegate processing of the url to redux

---
 .../static_src/src/app/src/SwitcherApp.js     | 30 ++++++++++++-------
 .../src/app/src/redux/actions/submissions.js  | 12 ++++++++
 2 files changed, 31 insertions(+), 11 deletions(-)

diff --git a/opentech/static_src/src/app/src/SwitcherApp.js b/opentech/static_src/src/app/src/SwitcherApp.js
index 6f22fd19d..b9f6ce2c0 100644
--- a/opentech/static_src/src/app/src/SwitcherApp.js
+++ b/opentech/static_src/src/app/src/SwitcherApp.js
@@ -5,6 +5,7 @@ import { connect } from 'react-redux'
 import Switcher from '@components/Switcher';
 import MessagesContainer from '@containers/MessagesContainer'
 import { setCurrentSubmission } from '@actions/submissions';
+import { loadSubmissionFromURL } from '@actions/submissions';
 
 
 class SwitcherApp extends React.Component {
@@ -12,22 +13,26 @@ class SwitcherApp extends React.Component {
         pageContent: PropTypes.node.isRequired,
         detailComponent: PropTypes.node.isRequired,
         switcherSelector: PropTypes.string.isRequired,
-        setCurrentItem: PropTypes.func,
+        startOpen: PropTypes.bool,
+        processParams: PropTypes.func.isRequired,
     };
 
-    componentDidMount() {
-        const urlParams = new URLSearchParams(window.location.search);
+    state = {
+        detailOpened: false,
+        mounting: true,
+    };
 
-        if (urlParams.has('submission')) {
-            this.openDetail();
+    componentDidMount() {
+        this.setState({
+            mounting: false
+        })
 
-            // pass in method to this.setActive
-            const activeId = Number(urlParams.get('submission'));
-            this.props.setCurrentItem(activeId);
+        const success = this.props.processParams()
+        if (success) {
+            this.openDetail()
         }
-    }
 
-    state = { detailOpened: false };
+    }
 
     openDetail = () => {
         document.body.classList.add('app-open');
@@ -50,6 +55,9 @@ class SwitcherApp extends React.Component {
     }
 
     render() {
+        if ( this.state.mounting ) {
+            return null
+        }
         return (
             <>
                 <MessagesContainer />
@@ -64,7 +72,7 @@ class SwitcherApp extends React.Component {
 }
 
 const mapDispatchToProps = dispatch => ({
-    setCurrentItem: id => dispatch(setCurrentSubmission(id)),
+    processParams: id => dispatch(loadSubmissionFromURL()),
 });
 
 export default connect(null, mapDispatchToProps)(SwitcherApp);
diff --git a/opentech/static_src/src/app/src/redux/actions/submissions.js b/opentech/static_src/src/app/src/redux/actions/submissions.js
index 79a61c923..7eeaa36f5 100644
--- a/opentech/static_src/src/app/src/redux/actions/submissions.js
+++ b/opentech/static_src/src/app/src/redux/actions/submissions.js
@@ -54,8 +54,20 @@ export const setCurrentSubmissionRound = id => ({
     id,
 });
 
+
+export const loadSubmissionFromURL = () => (dispatch, getState) => {
+    const urlParams = new URLSearchParams(window.location.search);
+    if (urlParams.has('submission')) {
+        const activeId = Number(urlParams.get('submission'));
+        return dispatch(setCurrentSubmission(activeId));
+    }
+    return null;
+}
+
+
 export const setCurrentSubmission = id => (dispatch, getState) => {
     const submissionID = getCurrentSubmissionID(getState())
+
     if (id && submissionID !== id) {
         dispatch(push(`?submission=${id}`));
     } else if (!id) {
-- 
GitLab