diff --git a/js/src/redux/middleware.js b/js/src/redux/middleware.js index 91e76c45d..b62b4e5f2 100644 --- a/js/src/redux/middleware.js +++ b/js/src/redux/middleware.js @@ -22,6 +22,7 @@ import SignerMiddleware from './providers/signerMiddleware'; import statusMiddleware from '~/views/Status/middleware'; import CertificationsMiddleware from './providers/certifications/middleware'; +import ChainMiddleware from './providers/chainMiddleware'; export default function (api, browserHistory) { const errors = new ErrorsMiddleware(); @@ -30,12 +31,14 @@ export default function (api, browserHistory) { const status = statusMiddleware(); const certifications = new CertificationsMiddleware(); const routeMiddleware = routerMiddleware(browserHistory); + const chain = new ChainMiddleware(); const middleware = [ settings.toMiddleware(), signer.toMiddleware(), errors.toMiddleware(), - certifications.toMiddleware() + certifications.toMiddleware(), + chain.toMiddleware() ]; return middleware.concat(status, routeMiddleware, thunk); diff --git a/js/src/redux/providers/chainMiddleware.js b/js/src/redux/providers/chainMiddleware.js new file mode 100644 index 000000000..82281f3b8 --- /dev/null +++ b/js/src/redux/providers/chainMiddleware.js @@ -0,0 +1,38 @@ +// Copyright 2015, 2016 Parity Technologies (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +import { showSnackbar } from './snackbarActions'; + +export default class ChainMiddleware { + toMiddleware () { + return (store) => (next) => (action) => { + if (action.type === 'statusCollection') { + const { collection } = action; + + if (collection && collection.netChain) { + const chain = collection.netChain; + const { nodeStatus } = store.getState(); + + if (chain !== nodeStatus.netChain) { + store.dispatch(showSnackbar(`Switched to ${chain}. Please reload the page.`, 5000)); + } + } + } + + next(action); + }; + } +}