12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- // @flow
-
- import { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../app';
- import { MiddlewareRegistry } from '../redux';
-
- import NetworkInfoService from './NetworkInfoService';
- import { _storeNetworkInfoCleanup, setNetworkInfo } from './actions';
- import { STORE_NAME } from './constants';
- import { ONLINE_STATE_CHANGED_EVENT } from './events';
- import logger from './logger';
- import type { NetworkInfo } from './types';
-
- /**
- * Middleware for 'base/net-info' feature.
- *
- * @param {Store} store - The redux store.
- * @returns {Function}
- */
- // eslint-disable-next-line no-unused-vars
- MiddlewareRegistry.register(({ dispatch, getState }) => next => action => {
- const result = next(action);
-
- switch (action.type) {
- case APP_WILL_MOUNT:
- if (NetworkInfoService.isSupported()) {
- const networkInfoService = new NetworkInfoService();
- const stop = () => {
- networkInfoService.stop();
- networkInfoService.removeAllListeners();
- };
-
- networkInfoService.addListener(
- ONLINE_STATE_CHANGED_EVENT,
- ({ isOnline, networkType, details }: NetworkInfo) => {
- logger.info('Network changed', JSON.stringify({
- isOnline,
- details,
- networkType
- }));
- dispatch(setNetworkInfo({
- isOnline,
- networkType,
- details
- }));
- });
-
- dispatch(_storeNetworkInfoCleanup(stop));
-
- networkInfoService.start();
- }
- break;
- case APP_WILL_UNMOUNT: {
- const { _cleanup } = getState()[STORE_NAME];
-
- if (_cleanup) {
- _cleanup();
- dispatch(_storeNetworkInfoCleanup(undefined));
- }
- }
- break;
- }
-
- return result;
- });
|