UNPKG

@rcsb/rcsb-saguaro-3d

Version:
49 lines (48 loc) 2.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AlignmentProviderBehaviour = void 0; const tslib_1 = require("tslib"); const TagDelimiter_1 = require("@rcsb/rcsb-api-tools/lib/RcsbUtils/TagDelimiter"); class AlignmentProviderBehaviour { constructor() { this.subscription = undefined; } observe(rcsbFvContainer, stateManager) { this.subscription = stateManager.subscribe((o) => tslib_1.__awaiter(this, void 0, void 0, function* () { if (o.type == "model-ready" && o.data) yield loadNextModel(o.data, rcsbFvContainer, stateManager); })); } unsubscribe() { var _a; (_a = this.subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); } } exports.AlignmentProviderBehaviour = AlignmentProviderBehaviour; function loadNextModel(data, rcsbFvContainer, stateManager) { return tslib_1.__awaiter(this, void 0, void 0, function* () { var _a, _b; const alignments = yield ((_a = rcsbFvContainer.get()) === null || _a === void 0 ? void 0 : _a.getAlignmentResponse()); if (!alignments || !alignments.target_alignments) return; if (data.who == "user") return; const pdb = data.pdb; const targetAlignment = data.targetAlignment; const index = alignments.target_alignments.findIndex(ta => (ta === null || ta === void 0 ? void 0 : ta.target_id) == `${pdb.entryId}${TagDelimiter_1.TagDelimiter.instance}${pdb.instanceId}`); if (typeof index === "undefined" || index < 0 || index == (alignments.target_alignments.length - 1)) return; const targetId = (_b = alignments.target_alignments[index + 1]) === null || _b === void 0 ? void 0 : _b.target_id; if (!targetId) return; stateManager.next({ type: "model-change", view: "1d-view", data: { pdb: TagDelimiter_1.TagDelimiter.parseInstance(targetId), targetAlignment, who: "auto" } }); }); }