UNPKG

@rcsb/rcsb-saguaro-app

Version:
91 lines 4.6 kB
import { __awaiter } from "tslib"; import { rcsbClient } from "../../RcsbGraphQL/RcsbClient"; import { Subject } from "rxjs"; import { ObservableHelper } from "../../RcsbUtils/Helpers/ObservableHelper"; export class AnnotationCollector { constructor() { this.rcsbFvQuery = rcsbClient; this.requestStatus = "complete"; this.rawFeaturesSubject = new Subject(); this.annotationFeaturesSubject = new Subject(); } collect(requestConfig) { return __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 = [].concat.apply([], this.annotationFeatures.map(af => af.features)); this.complete(); return this.annotationFeatures; }); } getFeatures() { return __awaiter(this, void 0, void 0, function* () { return new Promise((resolve, reject) => { if (this.requestStatus === "complete") { resolve(this.rawFeatures); } else { ObservableHelper.oneTimeSubscription(resolve, this.rawFeaturesSubject); } }); }); } getAnnotationFeatures() { return __awaiter(this, void 0, void 0, function* () { return new Promise((resolve, reject) => { if (this.requestStatus === "complete") { resolve(this.annotationFeatures); } else { ObservableHelper.oneTimeSubscription(resolve, this.annotationFeaturesSubject); } }); }); } requestAnnotations(requestConfig) { return __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"); } } //# sourceMappingURL=AnnotationCollector.js.map