@rcsb/rcsb-saguaro-app
Version:
RCSB 1D Saguaro Web App
109 lines (108 loc) • 5.71 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.AlignmentCollector = 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");
const Assertions_1 = require("../../RcsbUtils/Helpers/Assertions");
var assertElementListDefined = Assertions_1.Assertions.assertElementListDefined;
class AlignmentCollector {
constructor() {
this.requestStatus = "complete";
this.rcsbFvQuery = RcsbClient_1.rcsbClient;
this.targetsSubject = new rxjs_1.Subject();
this.alignmentResponseSubject = new rxjs_1.Subject();
this.alignmentLengthSubject = new rxjs_1.Subject();
}
collect(requestConfig, filter) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
var _a, _b;
this.requestStatus = "pending";
this.alignmentResponse = yield this.requestAlignment(requestConfig);
const targetAlignment = (_a = this.alignmentResponse) === null || _a === void 0 ? void 0 : _a.target_alignments;
if (targetAlignment) {
assertElementListDefined(targetAlignment);
this.alignmentResponse.target_alignments = !filter ? targetAlignment : targetAlignment === null || targetAlignment === void 0 ? void 0 : targetAlignment.filter(ta => { var _a; return filter.includes((_a = ta === null || ta === void 0 ? void 0 : ta.target_id) !== null && _a !== void 0 ? _a : "not-included"); });
}
this.alignmentResponse = typeof ((_b = requestConfig.externalTrackBuilder) === null || _b === void 0 ? void 0 : _b.filterAlignments) === "function" ? yield requestConfig.externalTrackBuilder.filterAlignments({ alignments: this.alignmentResponse }) : this.alignmentResponse;
this.complete();
return this.alignmentResponse;
});
}
getTargets() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
return new Promise((resolve, reject) => {
var _a, _b;
if (this.requestStatus === "complete") {
const targetIds = (_b = (_a = this.alignmentResponse) === null || _a === void 0 ? void 0 : _a.target_alignments) === null || _b === void 0 ? void 0 : _b.map(ta => ta === null || ta === void 0 ? void 0 : ta.target_id);
assertElementListDefined(targetIds);
resolve(targetIds);
}
else {
ObservableHelper_1.ObservableHelper.oneTimeSubscription(resolve, this.targetsSubject);
}
});
});
}
getAlignment() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
return new Promise((resolve, reject) => {
if (this.requestStatus === "complete") {
resolve(this.alignmentResponse);
}
else {
ObservableHelper_1.ObservableHelper.oneTimeSubscription(resolve, this.alignmentResponseSubject);
}
});
});
}
getAlignmentLength() {
return new Promise((resolve, reject) => {
var _a, _b, _c;
if (this.requestStatus === "complete") {
resolve((_c = ((_b = (_a = this.alignmentResponse.query_sequence) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : this.alignmentResponse.alignment_length)) !== null && _c !== void 0 ? _c : -1);
}
else {
ObservableHelper_1.ObservableHelper.oneTimeSubscription(resolve, this.alignmentLengthSubject);
}
});
}
requestAlignment(requestConfig) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
this.requestStatus = "pending";
if (requestConfig.queryId && requestConfig.from && requestConfig.to) {
return yield this.rcsbFvQuery.requestAlignment({
queryId: requestConfig.queryId,
from: requestConfig.from,
to: requestConfig.to
});
}
else {
if (requestConfig.group && requestConfig.groupId && requestConfig.page) {
return yield this.rcsbFvQuery.requestGroupAlignment({
group: requestConfig.group,
groupId: requestConfig.groupId,
page: requestConfig.page,
excludeLogo: requestConfig.excludeLogo,
filter: requestConfig.filter
});
}
else {
return {};
}
}
});
}
complete() {
var _a, _b, _c, _d, _e;
this.requestStatus = "complete";
const targetIds = (_b = (_a = this.alignmentResponse.target_alignments) === null || _a === void 0 ? void 0 : _a.map(ta => ta === null || ta === void 0 ? void 0 : ta.target_id)) !== null && _b !== void 0 ? _b : [];
assertElementListDefined(targetIds);
this.targetsSubject.next(targetIds);
this.alignmentResponseSubject.next(this.alignmentResponse);
this.alignmentLengthSubject.next((_e = ((_d = (_c = this.alignmentResponse.query_sequence) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : this.alignmentResponse.alignment_length)) !== null && _e !== void 0 ? _e : -1);
console.info("Alignment Processing Complete");
}
}
exports.AlignmentCollector = AlignmentCollector;