UNPKG

@rcsb/rcsb-saguaro-app

Version:
115 lines (114 loc) 7.72 kB
"use strict"; 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;