@rcsb/rcsb-saguaro-app
Version:
RCSB 1D Saguaro Web App
95 lines (94 loc) • 4.86 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.AnnotationCollector = void 0;
const tslib_1 = require("tslib");
const RcsbClient_1 = require("../../RcsbGraphQL/RcsbClient");
const rxjs_1 = require("rxjs");
const ObservableHelper_1 = require("../../RcsbUtils/Helpers/ObservableHelper");
class AnnotationCollector {
constructor() {
this.rcsbFvQuery = RcsbClient_1.rcsbClient;
this.requestStatus = "complete";
this.rawFeaturesSubject = new rxjs_1.Subject();
this.annotationFeaturesSubject = new rxjs_1.Subject();
}
collect(requestConfig) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
var _a;
this.requestStatus = "pending";
this.annotationFeatures = yield this.requestAnnotations(requestConfig);
if (typeof (requestConfig === null || requestConfig === void 0 ? void 0 : requestConfig.annotationGenerator) === "function") {
const generatedFeatures = yield requestConfig.annotationGenerator(this.annotationFeatures);
if (generatedFeatures && generatedFeatures.filter((f) => (f != null)).length > 0)
this.annotationFeatures = this.annotationFeatures.concat(generatedFeatures.filter((f) => (f != null)));
}
if (typeof (requestConfig === null || requestConfig === void 0 ? void 0 : requestConfig.annotationFilter) === "function") {
this.annotationFeatures = yield requestConfig.annotationFilter(this.annotationFeatures);
}
if (typeof ((_a = requestConfig === null || requestConfig === void 0 ? void 0 : requestConfig.externalTrackBuilder) === null || _a === void 0 ? void 0 : _a.filterFeatures) === "function")
this.annotationFeatures = yield requestConfig.externalTrackBuilder.filterFeatures({ annotations: this.annotationFeatures, rcsbContext: requestConfig.rcsbContext });
this.rawFeatures = this.annotationFeatures.flatMap(af => { var _a; return (_a = af.features) !== null && _a !== void 0 ? _a : []; });
this.complete();
return this.annotationFeatures;
});
}
getFeatures() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
return new Promise((resolve, reject) => {
if (this.requestStatus === "complete") {
resolve(this.rawFeatures);
}
else {
ObservableHelper_1.ObservableHelper.oneTimeSubscription(resolve, this.rawFeaturesSubject);
}
});
});
}
getAnnotationFeatures() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
return new Promise((resolve, reject) => {
if (this.requestStatus === "complete") {
resolve(this.annotationFeatures);
}
else {
ObservableHelper_1.ObservableHelper.oneTimeSubscription(resolve, this.annotationFeaturesSubject);
}
});
});
}
requestAnnotations(requestConfig) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
if (requestConfig.group && requestConfig.groupId && requestConfig.sources)
if (requestConfig.isSummary)
return yield this.rcsbFvQuery.requestRcsbPdbGroupAnnotationsSummary({
group: requestConfig.group,
groupId: requestConfig.groupId,
sources: requestConfig.sources,
filters: requestConfig.filters
});
else
return yield this.rcsbFvQuery.requestRcsbPdbGroupAnnotations({
group: requestConfig.group,
groupId: requestConfig.groupId,
sources: requestConfig.sources,
filters: requestConfig.filters
});
else if (requestConfig.queryId && requestConfig.reference && requestConfig.sources)
return yield this.rcsbFvQuery.requestRcsbPdbAnnotations({
queryId: requestConfig.queryId,
reference: requestConfig.reference,
sources: requestConfig.sources,
filters: requestConfig.filters,
range: requestConfig.range
});
throw new Error(`Annotation query error`);
});
}
complete() {
this.requestStatus = "complete";
this.annotationFeaturesSubject.next(this.annotationFeatures);
this.rawFeaturesSubject.next(this.rawFeatures);
console.info("Features Processing Complete");
}
}
exports.AnnotationCollector = AnnotationCollector;