react-redux-provide
Version:
Build your UI with React. Manage application state with Redux providers. Persist and share application state with replication. Use pure functions everywhere.
967 lines (792 loc) • 33.2 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
exports.default = provide;
exports.reloadFunctions = reloadFunctions;
exports.reloadProviders = reloadProviders;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _hoistNonReactStatics = require('hoist-non-react-statics');
var _hoistNonReactStatics2 = _interopRequireDefault(_hoistNonReactStatics);
var _shallowEqual = require('./shallowEqual');
var _shallowEqual2 = _interopRequireDefault(_shallowEqual);
var _getRelevantKeys = require('./getRelevantKeys');
var _getRelevantKeys2 = _interopRequireDefault(_getRelevantKeys);
var _instantiateProvider = require('./instantiateProvider');
var _instantiateProvider2 = _interopRequireDefault(_instantiateProvider);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var isServerSide = typeof window === 'undefined';
var allComponentInstances = [];
var contextTypes = {
providers: _propTypes2.default.object,
providerInstances: _propTypes2.default.object,
activeQueries: _propTypes2.default.object,
queryResults: _propTypes2.default.object,
partialStates: _propTypes2.default.object,
forceDeepUpdate: _propTypes2.default.bool
};
function provide(ComponentClass) {
var _class, _temp;
if (ComponentClass.ComponentClass) {
return ComponentClass;
}
var componentName = ComponentClass.displayName || ComponentClass.name;
function getDisplayName() {
var providers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
return 'Provide' + componentName + '(' + Object.keys(providers).join(',') + ')';
}
var Provide = (_temp = _class = function (_Component) {
_inherits(Provide, _Component);
_createClass(Provide, [{
key: 'getChildContext',
value: function getChildContext() {
return {
providers: this.getProviders(),
providerInstances: this.getProviderInstances(),
activeQueries: this.getActiveQueries(),
queryResults: this.getQueryResults(),
partialStates: this.getPartialStates(),
forceDeepUpdate: this.forceDeepUpdate
};
}
}, {
key: 'getProviders',
value: function getProviders() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;
var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.context;
this.providers = this.providers || props.providers || context.providers || {};
return this.providers;
}
}, {
key: 'getProviderInstances',
value: function getProviderInstances() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;
var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.context;
this.providerInstances = this.providerInstances || props.providerInstances || context.providerInstances || {};
return this.providerInstances;
}
}, {
key: 'getActiveQueries',
value: function getActiveQueries() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;
var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.context;
this.activeQueries = this.activeQueries || props.activeQueries || context.activeQueries || {};
return this.activeQueries;
}
}, {
key: 'getQueryResults',
value: function getQueryResults() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;
var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.context;
this.queryResults = this.queryResults || props.queryResults || context.queryResults || {};
return this.queryResults;
}
}, {
key: 'getPartialStates',
value: function getPartialStates() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;
var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.context;
this.partialStates = this.partialStates || props.partialStates || context.partialStates || {};
return this.partialStates;
}
}]);
function Provide(props, context) {
_classCallCheck(this, Provide);
var _this = _possibleConstructorReturn(this, (Provide.__proto__ || Object.getPrototypeOf(Provide)).call(this, props));
_this.render = isServerSide ? function () {
var wrappedInstance = _this.getWrappedInstance();
_this.deinitialize();
return wrappedInstance;
} : function () {
return _this.getWrappedInstance();
};
if (!isServerSide && !context.providers) {
window.rootInstance = _this;
_this.initializeClientStates(props, context);
}
_this.renders = 0;
_this.componentName = componentName;
_this.unmounted = true;
_this.initialize(props, context);
return _this;
}
_createClass(Provide, [{
key: 'componentDidMount',
value: function componentDidMount() {
this.unmounted = isServerSide;
}
}, {
key: 'componentWillUnmount',
value: function componentWillUnmount() {
this.unmounted = true;
this.deinitialize();
}
}, {
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps(nextProps) {
if (!(0, _shallowEqual2.default)(nextProps, this.props)) {
this.deinitialize();
this.initialize(nextProps, this.context);
this.receivedNewProps = true;
}
}
}, {
key: 'shouldComponentUpdate',
value: function shouldComponentUpdate() {
if (this.forceDeepUpdate || this.context.forceDeepUpdate) {
return true;
} else if (this.receivedNewProps) {
this.receivedNewProps = false;
return true;
} else {
return false;
}
}
}, {
key: 'update',
value: function update() {
if (!this.unmounted) {
this.forceUpdate();
}
}
// TODO: improve this
}, {
key: 'initializeClientStates',
value: function initializeClientStates() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;
var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.context;
var _window = window,
clientStates = _window.clientStates;
var fauxInstance = this.getFauxInstance(props, context);
var providers = this.getProviders(props, context);
var findProvider = function findProvider(props) {
for (var key in providers) {
var provider = providers[key];
if ((0, _getRelevantKeys2.default)(provider.reducers, props).length) {
if (typeof provider.defaultKey === 'undefined') {
provider.defaultKey = key;
}
if (typeof provider.key === 'undefined') {
provider.key = provider.defaultKey;
}
return provider;
}
}
};
if (clientStates) {
for (var providerKey in clientStates) {
var state = clientStates[providerKey];
var provider = findProvider(state);
if (provider) {
(0, _instantiateProvider2.default)((0, _instantiateProvider.getTempFauxInstance)(fauxInstance, state), provider);
}
}
}
}
}, {
key: 'initialize',
value: function initialize() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;
var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.context;
var providers = this.getProviders(props, context);
this.relevantProviders = {};
for (var key in providers) {
var provider = providers[key];
var shouldSubscribe = false;
if (typeof provider.defaultKey === 'undefined') {
provider.defaultKey = key;
}
if (typeof provider.key === 'undefined') {
provider.key = provider.defaultKey;
}
this.assignActionCreators(props, context, provider);
if (this.assignReducers(props, context, provider)) {
shouldSubscribe = true;
}
if (this.assignMergers(props, context, provider)) {
shouldSubscribe = true;
}
if (shouldSubscribe) {
this.subscribeToProvider(props, context, provider);
}
}
this.handleQueries(props, context);
this.setDisplayName(props, context);
if (this.doUpdate) {
this.update();
}
}
}, {
key: 'deinitialize',
value: function deinitialize() {
this.unsubscribe();
delete this.relevantProviders;
delete this.componentProps;
delete this.fauxInstance;
delete this.subbedAll;
delete this.query;
delete this.queryOptions;
delete this.queries;
delete this.queriesOptions;
delete this.subscriptions;
delete this.mergers;
delete this.wrappedInstance;
}
}, {
key: 'unsubscribe',
value: function unsubscribe() {
var subscriptions = this.getSubscriptions();
while (subscriptions.length) {
var unsubscribe = subscriptions.shift();
unsubscribe();
}
}
}, {
key: 'setDisplayName',
value: function setDisplayName(props, context) {
Provide.displayName = getDisplayName(this.relevantProviders);
}
}, {
key: 'getComponentProps',
value: function getComponentProps() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;
var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.context;
if (!this.componentProps) {
this.componentProps = _extends({}, ComponentClass.defaultProps, props, { __wrapper: this
});
if (!this.componentProps.ref && ComponentClass.prototype.render) {
this.componentProps.ref = 'wrappedInstance';
}
}
return this.componentProps;
}
}, {
key: 'getFauxInstance',
value: function getFauxInstance(props, context) {
var _this2 = this;
if (!this.fauxInstance) {
var componentProps = this.getComponentProps(props, context);
this.getProviders(props, context);
this.getProviderInstances(props, context);
this.getActiveQueries(props, context);
this.getQueryResults(props, context);
this.getPartialStates(props, context);
this.getSubscriptions(props, context);
this.fauxInstance = _extends({}, Object.getOwnPropertyNames(this).reduce(function (prev, propName) {
return _extends({}, prev, _defineProperty({}, propName, _this2[propName]));
}, {}), {
props: componentProps
});
}
this.fauxInstance.context = context;
return this.fauxInstance;
}
}, {
key: 'getSubscriptions',
value: function getSubscriptions() {
if (!this.subscriptions) {
this.subscriptions = [];
}
return this.subscriptions;
}
}, {
key: 'getMergers',
value: function getMergers() {
if (!this.mergers) {
this.mergers = {};
}
return this.mergers;
}
}, {
key: 'getWrappedInstance',
value: function getWrappedInstance() {
if (this.context.forceDeepUpdate) {
this.doUpdate = true;
}
if (!this.wrappedInstance || this.doUpdate) {
this.renders++;
this.doUpdate = false;
this.wrappedInstance = _react2.default.createElement(ComponentClass, this.getComponentProps());
}
return this.wrappedInstance;
}
}, {
key: 'getProviderInstance',
value: function getProviderInstance(props, context, provider, getReducerKeys) {
return (0, _instantiateProvider2.default)({
fauxInstance: this.getFauxInstance(props, context),
provider: provider,
getReducerKeys: getReducerKeys
});
}
}, {
key: 'assignActionCreators',
value: function assignActionCreators(props, context, provider) {
var actionKeys = (0, _getRelevantKeys2.default)(provider.actions, ComponentClass.propTypes);
if (!actionKeys.length) {
return false;
}
var componentProps = this.getComponentProps(props, context);
var _getProviderInstance = this.getProviderInstance(props, context, provider, true),
actionCreators = _getProviderInstance.actionCreators;
// assign relevant action creators to wrapped component's props
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = actionKeys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var actionKey = _step.value;
if (!props[actionKey]) {
componentProps[actionKey] = actionCreators[actionKey];
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return true;
}
}, {
key: 'assignReducers',
value: function assignReducers(props, context, provider) {
var _this3 = this;
var reducerKeys = (0, _getRelevantKeys2.default)(provider.reducers, ComponentClass.propTypes);
if (!reducerKeys.length) {
return false;
}
var getReducerKeys = {};
var shouldSubscribe = false;
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = reducerKeys[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var reducerKey = _step2.value;
if (typeof props[reducerKey] === 'undefined') {
getReducerKeys[reducerKey] = true;
shouldSubscribe = true;
}
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
if (!shouldSubscribe) {
return false;
}
var subscriptions = this.getSubscriptions();
var componentProps = this.getComponentProps(props, context);
var _getProviderInstance2 = this.getProviderInstance(props, context, provider, getReducerKeys),
store = _getProviderInstance2.store;
var state = store.getState();
// copy the relevant states to the wrapped component's props
// and whenever some state changes, update (mutate) the wrapped props
// and raise the `doUpdate` flag to indicate that the component
// should be updated after the action has taken place
var _loop = function _loop(reducerKey) {
componentProps[reducerKey] = state[reducerKey];
subscriptions.push(store.watch(reducerKey, function (nextState) {
componentProps[reducerKey] = nextState;
_this3.doUpdate = true;
}));
};
for (var reducerKey in getReducerKeys) {
_loop(reducerKey);
}
return true;
}
}, {
key: 'assignMergers',
value: function assignMergers(props, context, provider) {
var _this4 = this;
var merge = provider.merge;
var mergeKeys = (0, _getRelevantKeys2.default)(merge, ComponentClass.propTypes);
if (!mergeKeys.length) {
return false;
}
var getReducerKeys = {};
var shouldSubscribe = false;
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _iterator3 = mergeKeys[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var mergeKey = _step3.value;
if (typeof props[mergeKey] === 'undefined') {
var merger = merge[mergeKey];
var _iteratorNormalCompletion5 = true;
var _didIteratorError5 = false;
var _iteratorError5 = undefined;
try {
for (var _iterator5 = merger.keys[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
var reducerKey = _step5.value;
getReducerKeys[reducerKey] = true;
shouldSubscribe = true;
}
} catch (err) {
_didIteratorError5 = true;
_iteratorError5 = err;
} finally {
try {
if (!_iteratorNormalCompletion5 && _iterator5.return) {
_iterator5.return();
}
} finally {
if (_didIteratorError5) {
throw _iteratorError5;
}
}
}
}
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3.return) {
_iterator3.return();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
if (!shouldSubscribe) {
return false;
}
var mergers = this.getMergers();
var subscriptions = this.getSubscriptions();
var componentProps = this.getComponentProps(props, context);
var _getProviderInstance3 = this.getProviderInstance(props, context, provider, getReducerKeys),
store = _getProviderInstance3.store;
var state = store.getState();
// some of the wrapped component's props might depend on some state,
// possibly merged with props and/or context,
// so we watch for changes to certain `keys`
// and only update props when those `keys` have changed
var _iteratorNormalCompletion4 = true;
var _didIteratorError4 = false;
var _iteratorError4 = undefined;
try {
var _loop2 = function _loop2() {
var mergeKey = _step4.value;
if (!props[mergeKey]) {
(function () {
var merger = merge[mergeKey];
componentProps[mergeKey] = merger.get(state, componentProps, context);
var _iteratorNormalCompletion6 = true;
var _didIteratorError6 = false;
var _iteratorError6 = undefined;
try {
for (var _iterator6 = merger.keys[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {
var _reducerKey = _step6.value;
subscriptions.push(store.watch(_reducerKey, function (nextState) {
// we store the merger temporarily so that we may
// `get` the value only after the action has completed
mergers[mergeKey] = merger;
_this4.doMerge = true;
}));
}
} catch (err) {
_didIteratorError6 = true;
_iteratorError6 = err;
} finally {
try {
if (!_iteratorNormalCompletion6 && _iterator6.return) {
_iterator6.return();
}
} finally {
if (_didIteratorError6) {
throw _iteratorError6;
}
}
}
})();
}
};
for (var _iterator4 = mergeKeys[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
_loop2();
}
} catch (err) {
_didIteratorError4 = true;
_iteratorError4 = err;
} finally {
try {
if (!_iteratorNormalCompletion4 && _iterator4.return) {
_iterator4.return();
}
} finally {
if (_didIteratorError4) {
throw _iteratorError4;
}
}
}
return true;
}
}, {
key: 'subscribeToProvider',
value: function subscribeToProvider(props, context, provider) {
var _this5 = this;
var subscriptions = this.getSubscriptions();
var _getProviderInstance4 = this.getProviderInstance(props, context, provider),
store = _getProviderInstance4.store;
// if any states are relevant, we subscribe to the provider's store;
// and since we're reflecting any changes to relevant states
// by mutating `componentProps` and raising the `doUpdate` flag,
// it's more efficient to simply call `forceUpdate` here
subscriptions.push(store.subscribe(function () {
if (_this5.doMerge) {
var mergers = _this5.getMergers();
var componentProps = _this5.getComponentProps(props, context);
var state = store.getState();
// this is where we `get` any new values which depend on
// some state, possibly merged with props and/or context
for (var mergeKey in mergers) {
var get = mergers[mergeKey].get;
var value = get(state, componentProps, context);
if (componentProps[mergeKey] !== value) {
componentProps[mergeKey] = value;
_this5.doUpdate = true;
}
delete mergers[mergeKey];
}
_this5.doMerge = false;
}
if (_this5.doUpdate) {
_this5.handleQueries(props, context);
_this5.setDisplayName(props, context);
_this5.update();
}
}));
}
}, {
key: 'handleQueries',
value: function handleQueries(props, context) {
var _this6 = this;
var fauxInstance = this.getFauxInstance(props, context);
return (0, _instantiateProvider.handleQueries)(fauxInstance, function (doUpdate) {
if (doUpdate) {
// TODO: should mergers be checked (again) ??
_this6.doUpdate = true;
_this6.update();
}
});
}
}]);
return Provide;
}(_react.Component), _class.ComponentClass = ComponentClass, _class.displayName = getDisplayName(), _class.propTypes = contextTypes, _class.contextTypes = contextTypes, _class.childContextTypes = contextTypes, _class.defaultProps = ComponentClass.defaultProps, _temp);
if (process.env.NODE_ENV !== 'production') {
var componentInstances = ComponentClass.__componentInstances;
if (typeof componentInstances === 'undefined') {
componentInstances = new Set();
ComponentClass.__componentInstances = componentInstances;
allComponentInstances.push(componentInstances);
}
ComponentClass.Provide = Provide;
ComponentClass.setComponentClass = function (NextClass) {
componentInstances = ComponentClass.__componentInstances;
NextClass.__componentInstances = componentInstances;
ComponentClass = NextClass;
Provide.ComponentClass = ComponentClass;
componentName = ComponentClass.displayName || ComponentClass.name;
};
Provide.prototype.componentDidMount = function () {
this.unmounted = isServerSide;
componentInstances.add(this);
};
Provide.prototype.componentWillUnmount = function () {
this.unmounted = true;
this.deinitialize();
componentInstances.delete(this);
};
Provide.prototype.reinitialize = function (props, context, NextClass) {
var _this7 = this;
if (NextClass) {
this.setComponentClass(NextClass);
}
setTimeout(function () {
_this7.doUpdate = true;
_this7.deinitialize();
_this7.initialize(props, context);
});
};
Provide.prototype.setComponentClass = function (NextClass) {
Provide.setComponentClass(NextClass);
this.componentName = componentName;
};
var _iteratorNormalCompletion7 = true;
var _didIteratorError7 = false;
var _iteratorError7 = undefined;
try {
for (var _iterator7 = componentInstances[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {
var componentInstance = _step7.value;
var props = componentInstance.props,
context = componentInstance.context;
componentInstance.reinitialize(props, context, ComponentClass);
}
} catch (err) {
_didIteratorError7 = true;
_iteratorError7 = err;
} finally {
try {
if (!_iteratorNormalCompletion7 && _iterator7.return) {
_iterator7.return();
}
} finally {
if (_didIteratorError7) {
throw _iteratorError7;
}
}
}
}
return (0, _hoistNonReactStatics2.default)(Provide, ComponentClass);
}
function reloadFunctions(oldFunctions, newFunctions) {
for (var key in newFunctions) {
var newFunction = newFunctions[key];
var oldFunction = oldFunctions[key];
if (typeof newFunction === 'function' && newFunction.propTypes && !newFunction.Provide && oldFunction && oldFunction.Provide) {
newFunction.Provide = provide(newFunction);
oldFunction.setComponentClass(newFunction);
newFunction.setComponentClass = oldFunction.setComponentClass;
var _iteratorNormalCompletion8 = true;
var _didIteratorError8 = false;
var _iteratorError8 = undefined;
try {
for (var _iterator8 = oldFunction.__componentInstances[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {
var componentInstance = _step8.value;
var props = componentInstance.props,
context = componentInstance.context;
componentInstance.forceDeepUpdate = true;
componentInstance.reinitialize(props, context, newFunction);
componentInstance.forceDeepUpdate = false;
}
} catch (err) {
_didIteratorError8 = true;
_iteratorError8 = err;
} finally {
try {
if (!_iteratorNormalCompletion8 && _iterator8.return) {
_iterator8.return();
}
} finally {
if (_didIteratorError8) {
throw _iteratorError8;
}
}
}
}
}
if (process.env.NODE_ENV === 'production') {
console.warn('You should only use `reloadInstances` in development!');
}
}
function reloadProviders(providers, providerInstances) {
var _window2 = window,
rootInstance = _window2.rootInstance,
clientStates = _window2.clientStates;
var oldProviders = rootInstance.providers,
oldProviderInstances = rootInstance.providerInstances;
for (var key in providers) {
var provider = providers[key];
var oldProvider = oldProviders[key];
if (!providers.replication && oldProvider && oldProvider.replication) {
provider.replication = oldProvider.replication;
}
}
for (var providerKey in oldProviderInstances) {
var oldProviderInstance = oldProviderInstances[providerKey];
if (clientStates) {
clientStates[providerKey] = oldProviderInstance.store.getState();
}
delete oldProviderInstances[providerKey];
}
rootInstance.providers = providers;
rootInstance.providerInstances = providerInstances || oldProviderInstances;
rootInstance.reinitialize(rootInstance.props, rootInstance.context);
var _iteratorNormalCompletion9 = true;
var _didIteratorError9 = false;
var _iteratorError9 = undefined;
try {
for (var _iterator9 = allComponentInstances[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) {
var componentInstances = _step9.value;
var _iteratorNormalCompletion10 = true;
var _didIteratorError10 = false;
var _iteratorError10 = undefined;
try {
for (var _iterator10 = componentInstances[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) {
var componentInstance = _step10.value;
var props = componentInstance.props,
context = componentInstance.context;
if (componentInstance !== rootInstance) {
context.providers = rootInstance.providers;
context.providerInstances = rootInstance.providerInstances;
componentInstance.providers = rootInstance.providers;
componentInstance.providerInstances = rootInstance.providerInstances;
componentInstance.reinitialize(props, context);
}
}
} catch (err) {
_didIteratorError10 = true;
_iteratorError10 = err;
} finally {
try {
if (!_iteratorNormalCompletion10 && _iterator10.return) {
_iterator10.return();
}
} finally {
if (_didIteratorError10) {
throw _iteratorError10;
}
}
}
}
} catch (err) {
_didIteratorError9 = true;
_iteratorError9 = err;
} finally {
try {
if (!_iteratorNormalCompletion9 && _iterator9.return) {
_iterator9.return();
}
} finally {
if (_didIteratorError9) {
throw _iteratorError9;
}
}
}
if (process.env.NODE_ENV === 'production') {
console.warn('You should only use `reloadProviders` in development!');
}
}