apollo-mobx
Version:
HOC for querying graphql server
79 lines (78 loc) • 2.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var mobx_1 = require("mobx");
var utils_1 = require("./utils");
var Observer = (function () {
function Observer() {
this.data = {};
this.loading = true;
this.networkStatus = 0;
this.version = 0;
}
Observer.prototype.start = function (client, query, _a) {
var _this = this;
var variables = _a.variables, options = tslib_1.__rest(_a, ["variables"]);
if (this.client !== client) {
this.client = client;
this.variables = variables;
this.cleanup();
}
else if (!utils_1.shallowCompare(this.variables, variables)) {
this.loading = true;
this.variables = variables;
this.cleanup();
}
else if (this.query) {
return;
}
return new Promise(function () {
_this.loading = true;
_this.query = client.watchQuery(tslib_1.__assign({ query: query, variables: variables }, options));
_this.query.options.notifyOnNetworkStatusChange = true;
var applyChanges = mobx_1.action(function (res) {
_this.data = res.data;
_this.loading = res.loading;
_this.networkStatus = res.networkStatus;
_this.version++;
});
_this.subscription = _this.query.subscribe({
next: function (result) {
applyChanges(result);
},
error: function (err) {
console.error('err', err);
}
});
});
};
Observer.prototype.finish = function () {
this.loading = false;
this.networkStatus = 0;
};
Observer.prototype.cleanup = function () {
if (this.subscription) {
this.subscription.unsubscribe();
}
};
tslib_1.__decorate([
mobx_1.observable,
tslib_1.__metadata("design:type", Object)
], Observer.prototype, "loading", void 0);
tslib_1.__decorate([
mobx_1.observable,
tslib_1.__metadata("design:type", Object)
], Observer.prototype, "networkStatus", void 0);
tslib_1.__decorate([
mobx_1.observable,
tslib_1.__metadata("design:type", Object)
], Observer.prototype, "version", void 0);
tslib_1.__decorate([
mobx_1.action,
tslib_1.__metadata("design:type", Function),
tslib_1.__metadata("design:paramtypes", []),
tslib_1.__metadata("design:returntype", void 0)
], Observer.prototype, "finish", null);
return Observer;
}());
exports.Observer = Observer;