diff --git a/opentech/static_src/src/app/src/SwitcherApp.js b/opentech/static_src/src/app/src/SwitcherApp.js index 6f22fd19d629c47884162c9d814b58ea95c18f57..b9f6ce2c09c6852f85f68df43697d78b58f9f94c 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 79a61c923a019d73b7148d37675a513f05a49ac9..7eeaa36f52bcef6d67a3e5e2b5d0e4a830b1f77f 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) {