UNPKG

apollo-mantra

Version:

Tools for integration of apollo with Mantra

95 lines (94 loc) 4.21 kB
"use strict"; var __assign = (this && this.__assign) || Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; Object.defineProperty(exports, "__esModule", { value: true }); var React = require("react"); var config_1 = require("./config"); var helpers_1 = require("./helpers"); ; function waitForData(keys, options) { if (keys === void 0) { keys = ['data']; } if (options === void 0) { options = {}; } return function wait(WrappedComponent) { var func = function (props, context) { var Loading = options.LoadingView ? options.LoadingView : config_1.default.loadingComponent; if (options.waitForAll && config_1.default.store) { if (!helpers_1.queriesFinished(config_1.default.store.getState().apollo)) { return React.createElement(Loading, __assign({}, props)); } } // solve auth if (options.auth || options.roles) { if (config_1.default.isLoggingIn(context)) { return React.createElement(config_1.default.LoggingIn, __assign({}, props)); } if (!config_1.default.userIdSelector(context) || (options.roles && options.roles.length && config_1.default.userRolesSelector(context).every(function (r) { return options.roles.indexOf(r) === -1; }))) { return options.AuthView ? React.createElement(options.AuthView, __assign({}, props)) : React.createElement(config_1.default.authComponent, __assign({}, props)); } } // wait for individual queries for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) { var key = keys_1[_i]; var selector = void 0; if (key.indexOf('.') >= 0) { var splitKey = key.split('.'); key = splitKey[0]; selector = splitKey[1]; } if (!props[key]) { console.error('Loading container did not find key in the apollo result set: ' + key); } if (props[key].errors) { if (Array.isArray(props[key].errors)) { for (var _a = 0, _b = props[key].errors; _a < _b.length; _a++) { var error = _b[_a]; if (error['message']) { console.error(error['message']); } console.error(error); } } else { var m = props[key].errors; if (m.networkError) { console.error(m.networkError.message); console.error(m.networkError.stack); } else if (m.message) { console.error(m.message); console.error(m.stack); } else { console.error(m); } } } if (selector) { if (props[key][selector] == null) { return React.createElement(Loading, __assign({}, props)); } } else if (props[key].loading) { return React.createElement(Loading, __assign({}, props)); } } try { return React.createElement(WrappedComponent, __assign({}, props)); } catch (ex) { console.error(ex.stack); throw ex; } }; func.displayName = "WaitForLoad(" + (WrappedComponent.displayName || 'Component') + ")"; func.contextTypes = options.contextTypes || config_1.default.contextTypes; return func; }; } exports.default = waitForData;