@rcsb/rcsb-saguaro-app
Version:
RCSB 1D Saguaro Web App
91 lines • 4.6 kB
JavaScript
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