UNPKG

@rcsb/rcsb-saguaro-app

Version:
109 lines (108 loc) 5.71 kB
"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;