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