apollo-mobx
Version:
HOC for querying graphql server
59 lines (58 loc) • 3.06 kB
JavaScript
;
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;