UNPKG

@rcsb/rcsb-saguaro-app

Version:
111 lines 7.37 kB
import { __awaiter } from "tslib"; import { RcsbFvInstance } from "../RcsbFvModule/RcsbFvInstance"; import { RcsbFvCoreBuilder } from "./RcsbFvCoreBuilder"; import { RcsbFvInterface } from "../RcsbFvModule/RcsbFvInterface"; import { rcsbRequestCtxManager } from "../../RcsbRequest/RcsbRequestContextManager"; import { TagDelimiter } from "@rcsb/rcsb-api-tools/lib/RcsbUtils/TagDelimiter"; //TODO Find a better structure for change callbacks export class RcsbFvInstanceBuilder { static buildMultipleInstanceSequenceFv(elementFvId_1, elementEntrySelectId_1, elementInstanceSelectId_1, entryIdList_1) { return __awaiter(this, arguments, void 0, function* (elementFvId, elementEntrySelectId, elementInstanceSelectId, entryIdList, config = {}, additionalConfig) { 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 __awaiter(this, void 0, void 0, function* () { const entityInstanceTranslator = yield rcsbRequestCtxManager.getEntityToInstance(entryId); const result = entityInstanceTranslator.getData(); if (result.length == 0) { 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 __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: () => __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.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 __awaiter(this, void 0, void 0, function* () { return new Promise((resolve, reject) => { try { const entryId = instanceId.split(TagDelimiter.instance)[0]; const asymId = instanceId.split(TagDelimiter.instance)[1]; RcsbFvCoreBuilder.getPolymerEntityInstanceMapAndBuildFv(elementId, entryId, module === "interface" ? RcsbFvInterface : 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); } }); }); } } //# sourceMappingURL=RcsbFvInstanceBuilder.js.map