diff --git a/src/modules/map/index.js b/src/modules/map/index.js index ff7ebff38..ebd5b4e32 100644 --- a/src/modules/map/index.js +++ b/src/modules/map/index.js @@ -1,7 +1,7 @@ import * as actions from './actions'; import * as reducers from './reducers'; import initialState from './initial-state'; -import sagas, { restoreState } from './sagas'; +import sagas, { restoreMapState } from './sagas'; import queryState from 'utils/query-state'; @@ -27,7 +27,7 @@ queryState.add({ selector: state => ({ basemap: state.map.basemap }) }, decode: { - trigger: restoreState + trigger: restoreMapState } }); diff --git a/src/modules/map/sagas.js b/src/modules/map/sagas.js index e22076062..88fd27d91 100644 --- a/src/modules/map/sagas.js +++ b/src/modules/map/sagas.js @@ -36,15 +36,18 @@ function* flyToCurrentLocation() { // Part of query state, not normal flow. // View ./index.js queryState.add for more info. -export function * restoreState() { +export function * restoreMapState() { /** * A regular selector, it could be on a selectors file with reselect * or better yet, be created automatically by the package based on registered namespace info. */ - const basemapSelector = state => state.router.query.map.basemap; + const basemapSelector = state => (state.router.query + && state.router.query.map + && state.router.query.map.basemap) || null; const basemap = yield select(basemapSelector); - - yield(put(setBasemap(basemap))); + if (basemap) { + yield(put(setBasemap(basemap))); + } } export default function* pages() { diff --git a/src/modules/widgets/index.js b/src/modules/widgets/index.js index 7f7e398d0..96c7e7c3c 100644 --- a/src/modules/widgets/index.js +++ b/src/modules/widgets/index.js @@ -1,6 +1,6 @@ import * as actions from './actions'; import * as reducers from './reducers'; -import sagas, { restoreState } from './sagas'; +import sagas, { restoreWidgetsState } from './sagas'; import initialState from './initial-state'; import queryState from 'utils/query-state'; @@ -48,7 +48,7 @@ queryState.add({ after: [ actions.fetchSucceeded ], - trigger: restoreState + trigger: restoreWidgetsState } }); diff --git a/src/modules/widgets/sagas.js b/src/modules/widgets/sagas.js index 7b097778b..12a678d80 100644 --- a/src/modules/widgets/sagas.js +++ b/src/modules/widgets/sagas.js @@ -30,36 +30,40 @@ export function* getWidgets() { // Part of query state, not normal flow. // View ./index.js queryState.add for more info. -export function * restoreState() { +export function * restoreWidgetsState() { /** * A regular selector, it could be on a selectors file with reselect * or better yet, be created automatically by the package based on registered namespace info. */ function * handler () { const widgetsSelector = state => ({ - urlWidgets: state.router.query.widgets, + urlWidgets: (state.router.query && state.router.query.widgets) || null, stateWidgets: state.widgets.list }); - const {urlWidgets, stateWidgets} = yield select(widgetsSelector); - const updatedWidgets = stateWidgets.map(widget => { - const updatedWidget = Object.assign({}, widget); - - if (urlWidgets[widget.slug]) { - const update = urlWidgets[widget.slug]; - if (update.isActive) { - updatedWidget.isActive = true; - } + const {urlWidgets, stateWidgets} = yield select(widgetsSelector); - if (update.isCollapsed) { - updatedWidget.isCollapsed = true; + if(urlWidgets) { + const updatedWidgets = stateWidgets.map(widget => { + const updatedWidget = Object.assign({}, widget); + + if (urlWidgets[widget.slug]) { + const update = urlWidgets[widget.slug]; + + if (update.isActive) { + updatedWidget.isActive = true; + } + + if (update.isCollapsed) { + updatedWidget.isCollapsed = true; + } } - } - - return updatedWidget; - }); - - yield put(fetchSucceeded(updatedWidgets)); + + return updatedWidget; + }); + + yield put(fetchSucceeded(updatedWidgets)); + } } yield takeLeading(fetchSucceeded().type, handler);