@rcsb/rcsb-saguaro-3d
Version:
RCSB Molstar/Saguaro Web App
49 lines (48 loc) • 2.11 kB
JavaScript
;
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"
}
});
});
}