BaseApp does all the heavy-lifting related to creating the redux store, navigation, and so on. App currently handles URL props and actually triggering navigation based on them.
82 lines
2.0 KiB
JavaScript
82 lines
2.0 KiB
JavaScript
/* @flow */
|
|
|
|
import XHRInterceptor from 'react-native/Libraries/Network/XHRInterceptor';
|
|
|
|
import { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../../base/app';
|
|
import { MiddlewareRegistry } from '../../base/redux';
|
|
|
|
import {
|
|
_ADD_NETWORK_REQUEST,
|
|
_REMOVE_ALL_NETWORK_REQUESTS,
|
|
_REMOVE_NETWORK_REQUEST
|
|
} from './actionTypes';
|
|
|
|
/**
|
|
* Middleware which captures app startup and conference actions in order to
|
|
* clear the image cache.
|
|
*
|
|
* @returns {Function}
|
|
*/
|
|
MiddlewareRegistry.register(store => next => action => {
|
|
const result = next(action);
|
|
|
|
switch (action.type) {
|
|
case APP_WILL_MOUNT:
|
|
_startNetInterception(store);
|
|
break;
|
|
|
|
case APP_WILL_UNMOUNT:
|
|
_stopNetInterception(store);
|
|
break;
|
|
}
|
|
|
|
return result;
|
|
});
|
|
|
|
/**
|
|
* Starts intercepting network requests. Only XHR requests are supported at the
|
|
* moment.
|
|
*
|
|
* Ongoing request information is kept in redux, and it's removed as soon as a
|
|
* given request is complete.
|
|
*
|
|
* @param {Object} store - The redux store.
|
|
* @private
|
|
* @returns {void}
|
|
*/
|
|
function _startNetInterception({ dispatch }) {
|
|
XHRInterceptor.setOpenCallback((method, url, xhr) => dispatch({
|
|
type: _ADD_NETWORK_REQUEST,
|
|
request: xhr,
|
|
|
|
// The following are not really necessary read anywhere at the time of
|
|
// this writing but are provided anyway if the reducer chooses to
|
|
// remember them:
|
|
method,
|
|
url
|
|
}));
|
|
XHRInterceptor.setResponseCallback((...args) => dispatch({
|
|
type: _REMOVE_NETWORK_REQUEST,
|
|
|
|
// XXX The XHR is the last argument of the responseCallback.
|
|
request: args[args.length - 1]
|
|
}));
|
|
|
|
XHRInterceptor.enableInterception();
|
|
}
|
|
|
|
/**
|
|
* Stops intercepting network requests.
|
|
*
|
|
* @param {Object} store - The redux store.
|
|
* @private
|
|
* @returns {void}
|
|
*/
|
|
function _stopNetInterception({ dispatch }) {
|
|
XHRInterceptor.disableInterception();
|
|
|
|
dispatch({
|
|
type: _REMOVE_ALL_NETWORK_REQUESTS
|
|
});
|
|
}
|