@rcsb/rcsb-saguaro-app
Version:
RCSB 1D Saguaro Web App
115 lines (114 loc) • 7.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RcsbFvInstanceBuilder = void 0;
const tslib_1 = require("tslib");
const RcsbFvInstance_1 = require("../RcsbFvModule/RcsbFvInstance");
const RcsbFvCoreBuilder_1 = require("./RcsbFvCoreBuilder");
const RcsbFvInterface_1 = require("../RcsbFvModule/RcsbFvInterface");
const RcsbRequestContextManager_1 = require("../../RcsbRequest/RcsbRequestContextManager");
const TagDelimiter_1 = require("@rcsb/rcsb-api-tools/lib/RcsbUtils/TagDelimiter");
//TODO Find a better structure for change callbacks
class RcsbFvInstanceBuilder {
static buildMultipleInstanceSequenceFv(elementFvId_1, elementEntrySelectId_1, elementInstanceSelectId_1, entryIdList_1) {
return tslib_1.__awaiter(this, arguments, void 0, function* (elementFvId, elementEntrySelectId, elementInstanceSelectId, entryIdList, config = {}, additionalConfig) {
RcsbFvCoreBuilder_1.RcsbFvCoreBuilder.buildSelectButton(elementFvId, elementEntrySelectId, entryIdList.map(entryId => {
return {
label: entryId,
shortLabel: entryId,
onChange: () => {
RcsbFvInstanceBuilder.buildInstanceSequenceFv(elementFvId, elementInstanceSelectId, entryId, Object.assign(Object.assign({}, config), { displayAuthId: true }), additionalConfig);
}
};
}), { addTitle: true, dropdownTitle: "PDB" });
const entryId = entryIdList[0];
return yield RcsbFvInstanceBuilder.buildInstanceSequenceFv(elementFvId, elementInstanceSelectId, entryId, Object.assign(Object.assign({}, config), { displayAuthId: true }), additionalConfig);
});
}
static buildInstanceSequenceFv(elementFvId, elementSelectId, entryId, config, additionalConfig) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const entityInstanceTranslator = yield RcsbRequestContextManager_1.rcsbRequestCtxManager.getEntityToInstance(entryId);
const result = entityInstanceTranslator.getData();
if (result.length == 0) {
RcsbFvCoreBuilder_1.RcsbFvCoreBuilder.showMessage(elementFvId, "No sequence features are available");
throw new Error("No sequence features are available");
}
else {
return RcsbFvInstanceBuilder.buildSelectorInstanceFv(result, elementFvId, elementSelectId, entryId, config, additionalConfig);
}
});
}
static buildSelectorInstanceFv(instanceList, elementFvId, elementSelectId, entryId, config, additionalConfig) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
var _a;
const filteredInstanceList = instanceList.filter(i => (config.filterInstances == null || config.filterInstances.has(i.asymId)));
const groupedInstances = new Map();
filteredInstanceList.forEach((instance) => {
var _a;
if (!groupedInstances.has(instance.entityId))
groupedInstances.set(instance.entityId, new Array());
const label = instance.asymId === instance.authId ? instance.asymId : `${instance.asymId} [auth ${instance.authId}]`;
(_a = groupedInstances.get(instance.entityId)) === null || _a === void 0 ? void 0 : _a.push({
name: instance.name + " - " + instance.taxNames.join(", "),
label: label,
groupLabel: `ENTITY ${instance.entityId} - ${instance.name}`,
shortLabel: config.displayAuthId === true ? instance.authId : label,
optId: instance.asymId,
onChange: () => tslib_1.__awaiter(this, void 0, void 0, function* () {
out.getFv().reset();
let externalContext;
if (typeof config.beforeChangeCallback === "function")
externalContext = config.beforeChangeCallback(instance, out);
const rcsbContext = Object.assign(Object.assign(Object.assign({}, additionalConfig === null || additionalConfig === void 0 ? void 0 : additionalConfig.rcsbContext), externalContext), instance);
yield RcsbFvInstanceBuilder.buildInstanceFv(elementFvId, instance.rcsbId, Object.assign(Object.assign({}, additionalConfig), { rcsbContext: rcsbContext }), config.module);
if (typeof config.onChangeCallback === "function")
config.onChangeCallback(instance, out);
})
});
});
let index = 0;
if (config.defaultValue != null) {
const n = filteredInstanceList.findIndex(a => {
return a.asymId === config.defaultValue;
});
if (n >= 0)
index = n;
else
config.defaultValue = undefined;
}
RcsbFvCoreBuilder_1.RcsbFvCoreBuilder.buildSelectButton(elementFvId, elementSelectId, Array.from(groupedInstances.values()).map((group, n) => {
var _a;
return ({
label: (_a = group[0].groupLabel) !== null && _a !== void 0 ? _a : `Group ${n}`,
options: group
});
}), { addTitle: true, defaultValue: config.defaultValue, dropdownTitle: ((_a = config.dropdownTitle) !== null && _a !== void 0 ? _a : "INSTANCE"), width: config.displayAuthId === true ? 70 : undefined, optionProps: config.selectButtonOptionProps });
let externalContext;
if (typeof config.beforeChangeCallback === "function")
externalContext = config.beforeChangeCallback(filteredInstanceList[index], undefined);
const rcsbContext = Object.assign(Object.assign(Object.assign({}, additionalConfig === null || additionalConfig === void 0 ? void 0 : additionalConfig.rcsbContext), externalContext), filteredInstanceList[index]);
const out = yield RcsbFvInstanceBuilder.buildInstanceFv(elementFvId, filteredInstanceList[index].rcsbId, Object.assign(Object.assign({}, additionalConfig), { rcsbContext: rcsbContext }), config.module);
if (typeof config.onChangeCallback === "function")
config.onChangeCallback(filteredInstanceList[index], out);
return out;
});
}
static buildInstanceFv(elementId, instanceId, additionalConfig, module) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
return new Promise((resolve, reject) => {
try {
const entryId = instanceId.split(TagDelimiter_1.TagDelimiter.instance)[0];
const asymId = instanceId.split(TagDelimiter_1.TagDelimiter.instance)[1];
RcsbFvCoreBuilder_1.RcsbFvCoreBuilder.getPolymerEntityInstanceMapAndBuildFv(elementId, entryId, module === "interface" ? RcsbFvInterface_1.RcsbFvInterface : RcsbFvInstance_1.RcsbFvInstance, {
instanceId: instanceId,
additionalConfig: Object.assign(Object.assign({}, additionalConfig), { rcsbContext: Object.assign(Object.assign({}, additionalConfig === null || additionalConfig === void 0 ? void 0 : additionalConfig.rcsbContext), { entryId: entryId, asymId: asymId }) }),
resolve: resolve
});
}
catch (e) {
reject(e);
}
});
});
}
}
exports.RcsbFvInstanceBuilder = RcsbFvInstanceBuilder;