From 03b4ea49469d66228002abb27b23e06a1ea0dcbe Mon Sep 17 00:00:00 2001 From: mahmoudadel54 Date: Wed, 5 Jun 2024 22:47:06 +0300 Subject: [PATCH 1/4] #10351: A saved map returns to the default state when the translation is changed Description: - fix issue of reset the map state in change locale - write unit tests --- web/client/actions/__tests__/map-test.js | 9 +++- web/client/actions/map.js | 5 +- web/client/epics/__tests__/map-test.js | 57 +++++++++++++++++++++-- web/client/epics/map.js | 26 +++++++++-- web/client/reducers/__tests__/map-test.js | 12 ++++- web/client/reducers/map.js | 10 ++-- 6 files changed, 105 insertions(+), 14 deletions(-) diff --git a/web/client/actions/__tests__/map-test.js b/web/client/actions/__tests__/map-test.js index 48d6ff1f08..70da028778 100644 --- a/web/client/actions/__tests__/map-test.js +++ b/web/client/actions/__tests__/map-test.js @@ -52,7 +52,9 @@ import { orientateMap, ORIENTATION, updateMapOptions, - UPDATE_MAP_OPTIONS + UPDATE_MAP_OPTIONS, + clearMapState, + RESET_MAP_STATE } from '../map'; @@ -258,4 +260,9 @@ describe('Test correctness of the map actions', () => { expect(retval.type).toEqual(UPDATE_MAP_OPTIONS); expect(retval.configUpdate).toEqual(configUpdate); }); + it('test clear map state if LOCATION_CHANGE action fired', () => { + const retval = clearMapState(); + expect(retval).toExist(); + expect(retval.type).toBe(RESET_MAP_STATE); + }); }); diff --git a/web/client/actions/map.js b/web/client/actions/map.js index 33d3a6ad31..60ec6c4321 100644 --- a/web/client/actions/map.js +++ b/web/client/actions/map.js @@ -32,7 +32,7 @@ export const MAP_PLUGIN_LOAD = 'MAP:MAP_PLUGIN_LOAD'; export const ORIENTATION = 'MAP:ORIENTATION'; export const UPDATE_MAP_VIEW = 'MAP:UPDATE_MAP_VIEW'; export const UPDATE_MAP_OPTIONS = 'MAP:UPDATE_MAP_OPTIONS'; - +export const RESET_MAP_STATE = 'MAP:RESET_MAP_STATE'; /** * Event triggered when loading a different map type plugins (code for the specific implementation) @@ -260,6 +260,9 @@ export const updateMapOptions = (configUpdate) => ({ configUpdate }); +export const clearMapState = () => ({ + type: RESET_MAP_STATE +}); /** * Actions for map * @name actions.map diff --git a/web/client/epics/__tests__/map-test.js b/web/client/epics/__tests__/map-test.js index db95e11a39..db017dd460 100644 --- a/web/client/epics/__tests__/map-test.js +++ b/web/client/epics/__tests__/map-test.js @@ -8,12 +8,13 @@ import expect from 'expect'; -import { resetLimitsOnInit, zoomToExtentEpic, checkMapPermissions } from '../map'; -import { CHANGE_MAP_VIEW, zoomToExtent, CHANGE_MAP_LIMITS, changeMapCrs } from '../../actions/map'; +import { resetLimitsOnInit, zoomToExtentEpic, checkMapPermissions, resetMapState } from '../map'; +import { CHANGE_MAP_VIEW, zoomToExtent, CHANGE_MAP_LIMITS, changeMapCrs, RESET_MAP_STATE } from '../../actions/map'; import { LOAD_MAP_INFO, configureMap } from '../../actions/config'; import { testEpic, addTimeoutEpic, TEST_TIMEOUT } from './epicTestUtils'; import MapUtils from '../../utils/MapUtils'; import { LOGIN_SUCCESS } from '../../actions/security'; +import { LOCATION_CHANGE } from 'connected-react-router'; const LAYOUT_STATE = { layout: { @@ -235,5 +236,55 @@ describe('map epics', () => { done(); }, state); }); - + it('test resetMapState id location change from mapviewer page and going to another page like home page. ', (done) => { + const state = { + map: { + present: { + projection: "EPSG:1234", // NOTE: this is fake, it should be changed by the reducer after the changeMapCrs action + info: { + canEdit: true + }, + zoom: 3 + } + } + }; + const locationChangeAction = { + type: LOCATION_CHANGE, + payload: { + location: { + pathname: '/' + } + } + }; + testEpic(resetMapState, 1, locationChangeAction, ([action]) => { + const { type } = action; + expect(type).toBe(RESET_MAP_STATE); + done(); + }, state, done); + }); + it('test resetMapState if location change from mapviewer page due to change locale --> does not clear map state', (done) => { + const state = { + map: { + present: { + projection: "EPSG:1234", + info: { + canEdit: true + }, + zoom: 3 + } + } + }; + const locationChangeAction = { + type: LOCATION_CHANGE, + payload: { + location: { + pathname: '/viewer/123' + } + } + }; + testEpic(resetMapState, 0, locationChangeAction, ([action]) => { + expect(action).toNotExist(); + done(); + }, state, done); + }); }); diff --git a/web/client/epics/map.js b/web/client/epics/map.js index 48749016f9..e1163419f8 100644 --- a/web/client/epics/map.js +++ b/web/client/epics/map.js @@ -16,7 +16,8 @@ import { ZOOM_TO_EXTENT, CHANGE_MAP_CRS, changeMapView, - changeMapLimits + changeMapLimits, + clearMapState } from '../actions/map'; import { @@ -24,7 +25,8 @@ import { configuredRestrictedExtentSelector, configuredMinZoomSelector, mapSelector, - mapIdSelector + mapIdSelector, + mapInfoSelector } from '../selectors/map'; import { loadMapInfo, MAP_CONFIG_LOADED } from '../actions/config'; @@ -40,6 +42,7 @@ import { warning } from '../actions/notifications'; import { clearWarning as clearMapInfoWarning } from '../actions/mapInfo'; import { removeAllAdditionalLayers } from '../actions/additionallayers'; import { head, isArray, isObject, mapValues } from 'lodash'; +import { LOCATION_CHANGE } from 'connected-react-router'; export const handleCreationBackgroundError = (action$, store) => action$.ofType(CREATION_ERROR_LAYER) @@ -219,7 +222,21 @@ export const checkMapPermissions = (action$, {getState = () => {} }) => const mapId = mapIdSelector(getState()); return loadMapInfo(mapId); }); - +/** + * It clears the map state on LOCATION_CHANGE in case switch to page rather than mapviewer page + * @memberof epics.map + * @param {object} action$ + */ +export const resetMapState = (action$, {getState = () => {} }) => + action$.ofType(LOCATION_CHANGE) + .filter((action) => { + const state = getState(); + const mapInfo = mapInfoSelector(state); + const currentPathUrl = action.payload.location.pathname; + return mapInfo && !currentPathUrl.startsWith("/viewer/"); + }).map(() => { + return clearMapState(); + }); export default { checkMapPermissions, @@ -227,5 +244,6 @@ export default { handleCreationBackgroundError, resetMapOnInit, resetLimitsOnInit, - zoomToExtentEpic + zoomToExtentEpic, + resetMapState }; diff --git a/web/client/reducers/__tests__/map-test.js b/web/client/reducers/__tests__/map-test.js index b247a3485f..dfcd76f628 100644 --- a/web/client/reducers/__tests__/map-test.js +++ b/web/client/reducers/__tests__/map-test.js @@ -9,7 +9,7 @@ import expect from 'expect'; import { round } from 'lodash'; import mapConfig from '../map'; -import { updateMapOptions, changeMapLimits, PAN_TO, SET_MAP_RESOLUTIONS } from '../../actions/map'; +import { updateMapOptions, changeMapLimits, PAN_TO, SET_MAP_RESOLUTIONS, clearMapState } from '../../actions/map'; describe('Test the map reducer', () => { it('returns original state on unrecognized action', () => { @@ -286,4 +286,14 @@ describe('Test the map reducer', () => { }, action); expect(state.mapOptions.skyAtmosphere).toBe(false); }); + it('Test clear map state in location change', () => { + const action = clearMapState(); + let state = mapConfig({ + mapInfo: {}, + zoom: 2 + }, action); + expect(state.mapInfo).toNotExist(); + expect(state.zoom).toNotExist(); + expect(state.eventListeners).toExist(); + }); }); diff --git a/web/client/reducers/map.js b/web/client/reducers/map.js index 5098cbe59a..df780a8442 100644 --- a/web/client/reducers/map.js +++ b/web/client/reducers/map.js @@ -24,9 +24,9 @@ import { UNREGISTER_EVENT_LISTENER, ORIENTATION, UPDATE_MAP_VIEW, - UPDATE_MAP_OPTIONS + UPDATE_MAP_OPTIONS, + RESET_MAP_STATE } from '../actions/map'; -import { LOCATION_CHANGE } from 'connected-react-router'; import assign from 'object-assign'; import MapUtils from '../utils/MapUtils'; @@ -42,8 +42,6 @@ function mapConfig(state = {eventListeners: {}}, action) { return assign({}, state, { mousePointer: action.pointer }); - case LOCATION_CHANGE: - return assign({}, {eventListeners: {}}); case CHANGE_ZOOM_LVL: return assign({}, state, { zoom: action.zoom, @@ -181,6 +179,10 @@ function mapConfig(state = {eventListeners: {}}, action) { ...action.configUpdate } }; + case RESET_MAP_STATE: + return { + eventListeners: {} + }; default: return state; } From a68b224edf2c3d42fe9c6a78f103af76a4469bc2 Mon Sep 17 00:00:00 2001 From: mahmoudadel54 Date: Mon, 10 Jun 2024 11:34:40 +0300 Subject: [PATCH 2/4] #10351: A saved map returns to the default state when the translation is changed Description: - revert the prev change code - handle fixing the issue by remove the key into Localized --- web/client/actions/__tests__/map-test.js | 9 +--- web/client/actions/map.js | 4 -- web/client/components/I18N/Localized.jsx | 8 +-- web/client/components/app/StandardRouter.jsx | 8 +-- web/client/epics/__tests__/map-test.js | 56 +------------------- web/client/epics/map.js | 25 ++------- web/client/reducers/__tests__/map-test.js | 12 +---- web/client/reducers/map.js | 10 ++-- 8 files changed, 20 insertions(+), 112 deletions(-) diff --git a/web/client/actions/__tests__/map-test.js b/web/client/actions/__tests__/map-test.js index 70da028778..48d6ff1f08 100644 --- a/web/client/actions/__tests__/map-test.js +++ b/web/client/actions/__tests__/map-test.js @@ -52,9 +52,7 @@ import { orientateMap, ORIENTATION, updateMapOptions, - UPDATE_MAP_OPTIONS, - clearMapState, - RESET_MAP_STATE + UPDATE_MAP_OPTIONS } from '../map'; @@ -260,9 +258,4 @@ describe('Test correctness of the map actions', () => { expect(retval.type).toEqual(UPDATE_MAP_OPTIONS); expect(retval.configUpdate).toEqual(configUpdate); }); - it('test clear map state if LOCATION_CHANGE action fired', () => { - const retval = clearMapState(); - expect(retval).toExist(); - expect(retval.type).toBe(RESET_MAP_STATE); - }); }); diff --git a/web/client/actions/map.js b/web/client/actions/map.js index 60ec6c4321..2ffe1b141f 100644 --- a/web/client/actions/map.js +++ b/web/client/actions/map.js @@ -32,7 +32,6 @@ export const MAP_PLUGIN_LOAD = 'MAP:MAP_PLUGIN_LOAD'; export const ORIENTATION = 'MAP:ORIENTATION'; export const UPDATE_MAP_VIEW = 'MAP:UPDATE_MAP_VIEW'; export const UPDATE_MAP_OPTIONS = 'MAP:UPDATE_MAP_OPTIONS'; -export const RESET_MAP_STATE = 'MAP:RESET_MAP_STATE'; /** * Event triggered when loading a different map type plugins (code for the specific implementation) @@ -260,9 +259,6 @@ export const updateMapOptions = (configUpdate) => ({ configUpdate }); -export const clearMapState = () => ({ - type: RESET_MAP_STATE -}); /** * Actions for map * @name actions.map diff --git a/web/client/components/I18N/Localized.jsx b/web/client/components/I18N/Localized.jsx index ea51c86430..83468636ed 100644 --- a/web/client/components/I18N/Localized.jsx +++ b/web/client/components/I18N/Localized.jsx @@ -15,12 +15,14 @@ class Localized extends React.Component { static propTypes = { locale: PropTypes.string, messages: PropTypes.object, - loadingError: PropTypes.string + loadingError: PropTypes.string, + reloadOnLocaleChage: PropTypes.bool }; static childContextTypes = { locale: PropTypes.string, - messages: PropTypes.object + messages: PropTypes.object, + reloadOnLocaleChage: true }; getChildContext() { @@ -38,7 +40,7 @@ class Localized extends React.Component { children = children(); } - return ( {children} diff --git a/web/client/components/app/StandardRouter.jsx b/web/client/components/app/StandardRouter.jsx index a617e9bb45..5fef7e8f70 100644 --- a/web/client/components/app/StandardRouter.jsx +++ b/web/client/components/app/StandardRouter.jsx @@ -68,9 +68,9 @@ class StandardRouter extends React.Component {
- {this.props.themeLoaded ? ( + {this.props.themeLoaded ? ( -
+
{ /* eslint-disable no-console */ @@ -94,9 +94,9 @@ class StandardRouter extends React.Component { return (
- + -
+
{ /* eslint-disable no-console */ diff --git a/web/client/epics/__tests__/map-test.js b/web/client/epics/__tests__/map-test.js index db017dd460..3a9cb01238 100644 --- a/web/client/epics/__tests__/map-test.js +++ b/web/client/epics/__tests__/map-test.js @@ -8,13 +8,12 @@ import expect from 'expect'; -import { resetLimitsOnInit, zoomToExtentEpic, checkMapPermissions, resetMapState } from '../map'; -import { CHANGE_MAP_VIEW, zoomToExtent, CHANGE_MAP_LIMITS, changeMapCrs, RESET_MAP_STATE } from '../../actions/map'; +import { resetLimitsOnInit, zoomToExtentEpic, checkMapPermissions } from '../map'; +import { CHANGE_MAP_VIEW, zoomToExtent, CHANGE_MAP_LIMITS, changeMapCrs } from '../../actions/map'; import { LOAD_MAP_INFO, configureMap } from '../../actions/config'; import { testEpic, addTimeoutEpic, TEST_TIMEOUT } from './epicTestUtils'; import MapUtils from '../../utils/MapUtils'; import { LOGIN_SUCCESS } from '../../actions/security'; -import { LOCATION_CHANGE } from 'connected-react-router'; const LAYOUT_STATE = { layout: { @@ -236,55 +235,4 @@ describe('map epics', () => { done(); }, state); }); - it('test resetMapState id location change from mapviewer page and going to another page like home page. ', (done) => { - const state = { - map: { - present: { - projection: "EPSG:1234", // NOTE: this is fake, it should be changed by the reducer after the changeMapCrs action - info: { - canEdit: true - }, - zoom: 3 - } - } - }; - const locationChangeAction = { - type: LOCATION_CHANGE, - payload: { - location: { - pathname: '/' - } - } - }; - testEpic(resetMapState, 1, locationChangeAction, ([action]) => { - const { type } = action; - expect(type).toBe(RESET_MAP_STATE); - done(); - }, state, done); - }); - it('test resetMapState if location change from mapviewer page due to change locale --> does not clear map state', (done) => { - const state = { - map: { - present: { - projection: "EPSG:1234", - info: { - canEdit: true - }, - zoom: 3 - } - } - }; - const locationChangeAction = { - type: LOCATION_CHANGE, - payload: { - location: { - pathname: '/viewer/123' - } - } - }; - testEpic(resetMapState, 0, locationChangeAction, ([action]) => { - expect(action).toNotExist(); - done(); - }, state, done); - }); }); diff --git a/web/client/epics/map.js b/web/client/epics/map.js index e1163419f8..b67af419b3 100644 --- a/web/client/epics/map.js +++ b/web/client/epics/map.js @@ -16,8 +16,7 @@ import { ZOOM_TO_EXTENT, CHANGE_MAP_CRS, changeMapView, - changeMapLimits, - clearMapState + changeMapLimits } from '../actions/map'; import { @@ -25,8 +24,7 @@ import { configuredRestrictedExtentSelector, configuredMinZoomSelector, mapSelector, - mapIdSelector, - mapInfoSelector + mapIdSelector } from '../selectors/map'; import { loadMapInfo, MAP_CONFIG_LOADED } from '../actions/config'; @@ -42,7 +40,6 @@ import { warning } from '../actions/notifications'; import { clearWarning as clearMapInfoWarning } from '../actions/mapInfo'; import { removeAllAdditionalLayers } from '../actions/additionallayers'; import { head, isArray, isObject, mapValues } from 'lodash'; -import { LOCATION_CHANGE } from 'connected-react-router'; export const handleCreationBackgroundError = (action$, store) => action$.ofType(CREATION_ERROR_LAYER) @@ -222,21 +219,6 @@ export const checkMapPermissions = (action$, {getState = () => {} }) => const mapId = mapIdSelector(getState()); return loadMapInfo(mapId); }); -/** - * It clears the map state on LOCATION_CHANGE in case switch to page rather than mapviewer page - * @memberof epics.map - * @param {object} action$ - */ -export const resetMapState = (action$, {getState = () => {} }) => - action$.ofType(LOCATION_CHANGE) - .filter((action) => { - const state = getState(); - const mapInfo = mapInfoSelector(state); - const currentPathUrl = action.payload.location.pathname; - return mapInfo && !currentPathUrl.startsWith("/viewer/"); - }).map(() => { - return clearMapState(); - }); export default { checkMapPermissions, @@ -244,6 +226,5 @@ export default { handleCreationBackgroundError, resetMapOnInit, resetLimitsOnInit, - zoomToExtentEpic, - resetMapState + zoomToExtentEpic }; diff --git a/web/client/reducers/__tests__/map-test.js b/web/client/reducers/__tests__/map-test.js index dfcd76f628..b247a3485f 100644 --- a/web/client/reducers/__tests__/map-test.js +++ b/web/client/reducers/__tests__/map-test.js @@ -9,7 +9,7 @@ import expect from 'expect'; import { round } from 'lodash'; import mapConfig from '../map'; -import { updateMapOptions, changeMapLimits, PAN_TO, SET_MAP_RESOLUTIONS, clearMapState } from '../../actions/map'; +import { updateMapOptions, changeMapLimits, PAN_TO, SET_MAP_RESOLUTIONS } from '../../actions/map'; describe('Test the map reducer', () => { it('returns original state on unrecognized action', () => { @@ -286,14 +286,4 @@ describe('Test the map reducer', () => { }, action); expect(state.mapOptions.skyAtmosphere).toBe(false); }); - it('Test clear map state in location change', () => { - const action = clearMapState(); - let state = mapConfig({ - mapInfo: {}, - zoom: 2 - }, action); - expect(state.mapInfo).toNotExist(); - expect(state.zoom).toNotExist(); - expect(state.eventListeners).toExist(); - }); }); diff --git a/web/client/reducers/map.js b/web/client/reducers/map.js index df780a8442..5098cbe59a 100644 --- a/web/client/reducers/map.js +++ b/web/client/reducers/map.js @@ -24,9 +24,9 @@ import { UNREGISTER_EVENT_LISTENER, ORIENTATION, UPDATE_MAP_VIEW, - UPDATE_MAP_OPTIONS, - RESET_MAP_STATE + UPDATE_MAP_OPTIONS } from '../actions/map'; +import { LOCATION_CHANGE } from 'connected-react-router'; import assign from 'object-assign'; import MapUtils from '../utils/MapUtils'; @@ -42,6 +42,8 @@ function mapConfig(state = {eventListeners: {}}, action) { return assign({}, state, { mousePointer: action.pointer }); + case LOCATION_CHANGE: + return assign({}, {eventListeners: {}}); case CHANGE_ZOOM_LVL: return assign({}, state, { zoom: action.zoom, @@ -179,10 +181,6 @@ function mapConfig(state = {eventListeners: {}}, action) { ...action.configUpdate } }; - case RESET_MAP_STATE: - return { - eventListeners: {} - }; default: return state; } From 722250fcfc05382cca4bf14f5c22c74c22dd52a1 Mon Sep 17 00:00:00 2001 From: mahmoudadel54 Date: Mon, 10 Jun 2024 11:57:49 +0300 Subject: [PATCH 3/4] #10351: A saved map returns to the default state when the translation is changed Description: - add a helpful comment in StandardRouter file --- web/client/actions/map.js | 1 + web/client/components/app/StandardRouter.jsx | 8 ++++++++ web/client/epics/__tests__/map-test.js | 1 + web/client/epics/map.js | 1 + 4 files changed, 11 insertions(+) diff --git a/web/client/actions/map.js b/web/client/actions/map.js index 2ffe1b141f..33d3a6ad31 100644 --- a/web/client/actions/map.js +++ b/web/client/actions/map.js @@ -33,6 +33,7 @@ export const ORIENTATION = 'MAP:ORIENTATION'; export const UPDATE_MAP_VIEW = 'MAP:UPDATE_MAP_VIEW'; export const UPDATE_MAP_OPTIONS = 'MAP:UPDATE_MAP_OPTIONS'; + /** * Event triggered when loading a different map type plugins (code for the specific implementation) * @prop {boolean} loading true when the loading is active. False when the loading is finished. diff --git a/web/client/components/app/StandardRouter.jsx b/web/client/components/app/StandardRouter.jsx index 5fef7e8f70..7ee3c3b848 100644 --- a/web/client/components/app/StandardRouter.jsx +++ b/web/client/components/app/StandardRouter.jsx @@ -70,6 +70,10 @@ class StandardRouter extends React.Component { {this.props.themeLoaded ? ( + {/** the key is moved from the above Localized to the next div after 'ConnectedRouter': + * to ensure the reload of children + * to avoid and prevent firing LOCATION_CHANGE action that caused reset map state in change locale + */}
{ @@ -96,6 +100,10 @@ class StandardRouter extends React.Component { + {/** the key is moved from the above Localized to the next div after 'ConnectedRouter': + * to ensure the reload of children + * to avoid and prevent firing LOCATION_CHANGE action that caused reset map state in change locale + */}
{ diff --git a/web/client/epics/__tests__/map-test.js b/web/client/epics/__tests__/map-test.js index 3a9cb01238..db95e11a39 100644 --- a/web/client/epics/__tests__/map-test.js +++ b/web/client/epics/__tests__/map-test.js @@ -235,4 +235,5 @@ describe('map epics', () => { done(); }, state); }); + }); diff --git a/web/client/epics/map.js b/web/client/epics/map.js index b67af419b3..48749016f9 100644 --- a/web/client/epics/map.js +++ b/web/client/epics/map.js @@ -220,6 +220,7 @@ export const checkMapPermissions = (action$, {getState = () => {} }) => return loadMapInfo(mapId); }); + export default { checkMapPermissions, handleCreationLayerError, From 546ba218c3e84a49752b4c6554cfa74d15d20892 Mon Sep 17 00:00:00 2001 From: mahmoudadel54 Date: Tue, 11 Jun 2024 13:35:13 +0300 Subject: [PATCH 4/4] #10351: A saved map returns to the default state when the translation is changed Description: - change locale key prop from 'reloadOnLocaleChage' to 'localeKey' to be more meaningful --- web/client/components/I18N/Localized.jsx | 6 +++--- web/client/components/app/StandardRouter.jsx | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/web/client/components/I18N/Localized.jsx b/web/client/components/I18N/Localized.jsx index 83468636ed..0f56f3b819 100644 --- a/web/client/components/I18N/Localized.jsx +++ b/web/client/components/I18N/Localized.jsx @@ -16,13 +16,13 @@ class Localized extends React.Component { locale: PropTypes.string, messages: PropTypes.object, loadingError: PropTypes.string, - reloadOnLocaleChage: PropTypes.bool + localeKey: PropTypes.bool }; static childContextTypes = { locale: PropTypes.string, messages: PropTypes.object, - reloadOnLocaleChage: true + localeKey: true }; getChildContext() { @@ -40,7 +40,7 @@ class Localized extends React.Component { children = children(); } - return ( {children} diff --git a/web/client/components/app/StandardRouter.jsx b/web/client/components/app/StandardRouter.jsx index 7ee3c3b848..c885d874fd 100644 --- a/web/client/components/app/StandardRouter.jsx +++ b/web/client/components/app/StandardRouter.jsx @@ -68,7 +68,7 @@ class StandardRouter extends React.Component {
- {this.props.themeLoaded ? ( + {this.props.themeLoaded ? ( {/** the key is moved from the above Localized to the next div after 'ConnectedRouter': * to ensure the reload of children @@ -98,7 +98,7 @@ class StandardRouter extends React.Component { return (
- + {/** the key is moved from the above Localized to the next div after 'ConnectedRouter': * to ensure the reload of children