@rcsb/rcsb-saguaro-app
Version:
RCSB 1D Saguaro Web App
82 lines (81 loc) • 4.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SequenceTrackFactory = void 0;
const tslib_1 = require("tslib");
const GqlTypes_1 = require("@rcsb/rcsb-api-tools/lib/RcsbGraphQL/Types/Borrego/GqlTypes");
const SequenceTrackTitleFactory_1 = require("../TrackTitleFactoryImpl/SequenceTrackTitleFactory");
const TrackUtils_1 = require("./Helper/TrackUtils");
const Assertions_1 = require("../../../../RcsbUtils/Helpers/Assertions");
var assertDefined = Assertions_1.Assertions.assertDefined;
const TagDelimiter_1 = require("@rcsb/rcsb-api-tools/lib/RcsbUtils/TagDelimiter");
class SequenceTrackFactory {
constructor(entityInstanceTranslator, trackTitleFactory) {
this.entityInstanceTranslator = undefined;
this.entityInstanceTranslator = entityInstanceTranslator;
this.trackTitleFactory = trackTitleFactory !== null && trackTitleFactory !== void 0 ? trackTitleFactory : new SequenceTrackTitleFactory_1.SequenceTrackTitleFactory(entityInstanceTranslator);
}
getTrack(alignmentQueryContext, querySequence) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
var _a, _b;
const queryId = (_a = alignmentQueryContext.queryId) !== null && _a !== void 0 ? _a : alignmentQueryContext.groupId;
assertDefined(queryId);
return {
trackId: "mainSequenceTrack_" + ((_b = alignmentQueryContext.queryId) !== null && _b !== void 0 ? _b : alignmentQueryContext.groupId),
displayType: "sequence" /* RcsbFvDisplayTypes.SEQUENCE */,
trackColor: "#F9F9F9",
displayColor: "#000000",
rowTitle: yield this.trackTitleFactory.getTrackTitle(alignmentQueryContext),
rowPrefix: yield this.trackTitleFactory.getTrackTitlePrefix(alignmentQueryContext),
titleFlagColor: yield this.trackTitleFactory.getTrackTitleFlagColor(alignmentQueryContext),
nonEmptyDisplay: true,
overlap: true,
trackData: this.buildSequenceData({
sequence: querySequence,
begin: 1,
oriBegin: undefined,
queryId,
targetId: "",
from: alignmentQueryContext.from,
to: undefined
}, "from")
};
});
}
buildSequenceData(config, source) {
const sequenceData = new Array();
const id = source === "from" ? config.queryId : config.targetId;
config.sequence.split("").forEach((s, i) => {
const c = config[source];
if (!c)
return;
const o = {
begin: (config.begin + i),
oriBegin: typeof config.oriBegin === "number" ? config.oriBegin + i : undefined,
sourceId: id,
source: TrackUtils_1.TrackUtils.transformSourceFromTarget(id, c),
provenanceName: TrackUtils_1.TrackUtils.getProvenanceConfigFormTarget(id, c).name,
provenanceColor: TrackUtils_1.TrackUtils.getProvenanceConfigFormTarget(id, c).color,
label: s,
name: `RES ${s}`
};
sequenceData.push(this.addAuthorResIds(o, {
from: config.from,
to: config.to,
queryId: config.queryId,
targetId: config.targetId
}));
});
return sequenceData;
}
//TODO this method can be defined in a helper
addAuthorResIds(e, alignmentContext) {
let o = e;
if (this.entityInstanceTranslator != null) {
this.entityInstanceTranslator.addAuthorResIds(o, alignmentContext);
}
if (alignmentContext.to == GqlTypes_1.SequenceReference.PdbInstance && o.sourceId != null && this.entityInstanceTranslator != null)
o.sourceId = o.sourceId.split(TagDelimiter_1.TagDelimiter.instance)[0] + TagDelimiter_1.TagDelimiter.instance + this.entityInstanceTranslator.translateAsymToAuth(o.sourceId.split(TagDelimiter_1.TagDelimiter.instance)[1]);
return o;
}
}
exports.SequenceTrackFactory = SequenceTrackFactory;