provide-page
Version:
Provides automatic server-side rendering and actions (regardless of whether or not client has JavaScript enabled) to React components. Use in conjunction with `provide-router`.
75 lines (61 loc) • 2.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = extractStates;
exports.extractServerStates = extractServerStates;
exports.extractClientStates = extractClientStates;
function extractStates(providerInstances, getStates) {
var states = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
states = extractServerStates(providerInstances, getStates, states);
return {
states: states,
clientStates: extractClientStates(providerInstances, states)
};
}
function extractServerStates(providerInstances, getStates) {
var states = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
for (var providerKey in providerInstances) {
var providerInstance = providerInstances[providerKey];
if (!states[providerKey] || !providerInstance.store.key) {
states[providerKey] = providerInstance.store.getState();
}
}
return getStates ? getStates(states) : states;
}
function extractClientStates(providerInstances, states) {
var clientStates = {};
for (var providerKey in states) {
var providerInstance = providerInstances[providerKey];
var clientStateKeys = providerInstance && providerInstance.clientStateKeys;
var state = states[providerKey];
if (typeof clientStateKeys === 'undefined') {
clientStates[providerKey] = state;
} else if (clientStateKeys && clientStateKeys.length && state) {
clientStates[providerKey] = {};
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = clientStateKeys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var stateKey = _step.value;
clientStates[providerKey][stateKey] = state[stateKey];
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
}
}
return clientStates;
}