UNPKG

apollo-mobx

Version:

HOC for querying graphql server

59 lines (58 loc) 3.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var React = require("react"); var mobx_react_1 = require("mobx-react"); var observer_1 = require("./observer"); var uid = 0; function graphql(query, _a) { var _b = _a === void 0 ? {} : _a, options = _b.options, _c = _b.props, props = _c === void 0 ? null : _c, _d = _b.name, name = _d === void 0 ? 'data' : _d, waitForData = _b.waitForData, loadingComponent = _b.loadingComponent; return function (Wrapper) { var ApolloWrappedContainer = (function (_super) { tslib_1.__extends(ApolloWrappedContainer, _super); function ApolloWrappedContainer() { return _super !== null && _super.apply(this, arguments) || this; } ApolloWrappedContainer.prototype.readOptions = function (readOptions, readProps) { if (typeof readOptions === 'function') { return readOptions(readProps); } else { return readOptions; } }; ApolloWrappedContainer.prototype.render = function () { var receivedData = tslib_1.__assign({}, this.observe.data, { loading: this.observe.loading, networkStatus: this.observe.networkStatus, version: this.observe.version }); var modifiedProps = props ? props((_a = {}, _a[name] = receivedData, _a.ownProps = this.props, _a)) : {}; var newProps = tslib_1.__assign({}, this.props, (_b = {}, _b[name] = receivedData, _b), modifiedProps); if (receivedData.loading && waitForData) { var loading = loadingComponent ? loadingComponent() : this.props.client.loadingComponent(); if (!loading) { throw new Error('Apollo-Mobx: Loading component for "waitForData" is not defined.'); } return loading; } return React.createElement(Wrapper, tslib_1.__assign({}, newProps)); var _a, _b; }; ApolloWrappedContainer.prototype.componentWillUpdate = function (nextProps) { var client = nextProps.client; var opts = this.readOptions(options, nextProps) || {}; this.observe.start(client, query, opts); }; ApolloWrappedContainer.prototype.componentWillMount = function () { var client = this.props.client; this.observe = new observer_1.Observer(); var opts = this.readOptions(options, this.props) || {}; this.observe.start(client, query, opts); }; ApolloWrappedContainer = tslib_1.__decorate([ mobx_react_1.inject('client'), mobx_react_1.observer ], ApolloWrappedContainer); return ApolloWrappedContainer; }(React.Component)); return ApolloWrappedContainer; }; } exports.graphql = graphql;