UNPKG

@rcsb/rcsb-saguaro

Version:
229 lines (228 loc) 11.2 kB
import { RcsbAxisDisplay } from "../../RcsbBoard/RcsbDisplay/RcsbAxisDisplay"; import { RcsbPinDisplay } from "../../RcsbBoard/RcsbDisplay/RcsbPinDisplay"; import { RcsbBondDisplay } from "../../RcsbBoard/RcsbDisplay/RcsbBondDisplay"; import { RcsbFastSequenceDisplay } from "../../RcsbBoard/RcsbDisplay/RcsbFastSequenceDisplay"; import { RcsbCompositeDisplay } from "../../RcsbBoard/RcsbDisplay/RcsbCompositeDisplay"; import { RcsbBlockDisplay } from "../../RcsbBoard/RcsbDisplay/RcsbBlockDisplay"; import { RcsbLineDisplay } from "../../RcsbBoard/RcsbDisplay/RcsbLineDisplay"; import { RcsbAreaDisplay } from "../../RcsbBoard/RcsbDisplay/RcsbAreaDisplay"; import { RcsbVariantDisplay } from "../../RcsbBoard/RcsbDisplay/RcsbVariantDisplay"; import { RcsbVlineDisplay } from "../../RcsbBoard/RcsbDisplay/RcsbVlineDisplay"; import { RcsbFvTooltipManager } from "../RcsbFvTooltip/RcsbFvTooltipManager"; import { RcsbFvTooltip } from "../RcsbFvTooltip/RcsbFvTooltipImplementation/RcsbFvTooltip"; export class RcsbFvDisplay { constructor(config) { this.displayIds = []; this.displayConfig = config; } initDisplay() { const config = this.displayConfig; if (typeof config.displayType === "string" && config.displayType != "composite" /* RcsbFvDisplayTypes.COMPOSITE */) { const out = RcsbFvDisplay.singleDisplay(config.displayType, config); if (out != null) return out; else throw "Display config " + config + " not supported"; } else if (typeof config.displayType === "string" && config.displayType == "composite" /* RcsbFvDisplayTypes.COMPOSITE */) { return this.composedDisplay(config); } else { throw "Display type " + config.displayType + " not supported"; } } getDisplayIds() { return this.displayIds; } composedDisplay(config) { const display = new RcsbCompositeDisplay(); let i = 0; if (config.displayConfig != undefined) for (let displayItem of config.displayConfig) { let displayId = "displayId_" + Math.random().toString(36).substr(2); if (typeof displayItem.displayId === "string") { displayId = displayItem.displayId; } const displayType = displayItem.displayType; let displayConfig = config; if (config.displayConfig) { displayConfig = RcsbFvDisplay.setDisplayConfig(config, config.displayConfig[i]); i++; } const singleDisplay = RcsbFvDisplay.singleDisplay(displayType, displayConfig); if (singleDisplay != null) { display.addDisplay(displayId, singleDisplay); this.displayIds.push(displayId); } else { throw "Display type " + displayConfig + " not supported"; } } return display; } static setDisplayConfig(config, displayConfig) { return Object.assign(Object.assign({}, config), displayConfig); } static singleDisplay(type, config) { let out; if (config.boardId != undefined && config.trackId != undefined && config.displayColor != undefined) { switch (type) { case "axis" /* RcsbFvDisplayTypes.AXIS */: out = axisDisplay(config.boardId, config.trackId, config.length); break; case "block" /* RcsbFvDisplayTypes.BLOCK */: out = blockDisplay(config.boardId, config.trackId, config.displayColor); break; case "pin" /* RcsbFvDisplayTypes.PIN */: if (config.displayDomain != undefined) out = pinDisplay(config.boardId, config.trackId, config.displayColor, config.displayDomain); else throw "Track displayDomain (yScale) not defined"; break; case "bond" /* RcsbFvDisplayTypes.BOND */: out = bondDisplay(config.boardId, config.trackId, config.displayColor); break; case "sequence" /* RcsbFvDisplayTypes.SEQUENCE */: const dynamicDisplay = config.dynamicDisplay != undefined ? config.dynamicDisplay : false; const nonEmptyDisplay = config.nonEmptyDisplay != undefined ? config.nonEmptyDisplay : false; out = sequenceDisplay(config.boardId, config.trackId, config.displayColor, dynamicDisplay, nonEmptyDisplay); break; case "line" /* RcsbFvDisplayTypes.LINE */: if (config.displayDomain != undefined) out = lineDisplay(config.boardId, config.trackId, config.displayColor, config.displayDomain, config.interpolationType); else throw "Track displayDomain (yScale) not defined"; break; case "area" /* RcsbFvDisplayTypes.AREA */: if (config.displayDomain != undefined) out = areaDisplay(config.boardId, config.trackId, config.displayColor, config.displayDomain, config.interpolationType); else throw "Track displayDomain (yScale) not defined"; break; case "block-area" /* RcsbFvDisplayTypes.BLOCK_AREA */: if (config.displayDomain != undefined) out = areaDisplay(config.boardId, config.trackId, config.displayColor, config.displayDomain, config.interpolationType, true); else throw "Track displayDomain (yScale) not defined"; break; case "multi-area" /* RcsbFvDisplayTypes.MULTI_AREA */: if (config.displayDomain != undefined) out = areaDisplay(config.boardId, config.trackId, config.displayColor, config.displayDomain, config.interpolationType, false, true); else throw "Track displayDomain (yScale) not defined"; break; case "variant" /* RcsbFvDisplayTypes.VARIANT */: out = variantDisplay(config.boardId, config.trackId, config.displayColor); break; case "vline" /* RcsbFvDisplayTypes.VLINE */: out = vlineDisplay(config.boardId, config.trackId, config.displayColor); break; default: throw "Track type " + config.displayType + " is not supported"; } configDisplay(out, config); configTooltip(out, config); } else { console.error(config); throw "Single Display failed missing boardId or displayColor"; } return out; } } function configDisplay(display, config) { if (display != null && typeof config.elementClickCallback === "function") { display.elementSubject.mouseclick.subscribe(({ d, e }) => { var _a; return (_a = config.elementClickCallback) === null || _a === void 0 ? void 0 : _a.call(config, d, e); }); } if (display != null && typeof config.elementEnterCallback === "function") { display.elementSubject.mouseenter.subscribe(({ d, e }) => { var _a; return (_a = config.elementEnterCallback) === null || _a === void 0 ? void 0 : _a.call(config, d, e); }); } if (display != null && typeof config.elementLeaveCallback === "function") { display.elementSubject.mouseleave.subscribe(({ d, e }) => { var _a; return (_a = config.elementLeaveCallback) === null || _a === void 0 ? void 0 : _a.call(config, d, e); }); } if (display != null && typeof config.updateDataOnMove === "function") { display.setUpdateDataOnMove(config.updateDataOnMove); } if (display != null && typeof config.minRatio === "number") { display.setMinRatio(config.minRatio); } if (display != null && typeof config.selectDataInRangeFlag === "boolean") { display.setSelectDataInRange(config.selectDataInRangeFlag); } if (display != null && typeof config.hideEmptyTrackFlag === "boolean") { display.setHideEmptyTrack(config.hideEmptyTrackFlag); } } function configTooltip(display, config) { var _a; if (config.includeTooltip) { const tooltipManager = new RcsbFvTooltipManager(config.boardId, (_a = config.tooltipGenerator) !== null && _a !== void 0 ? _a : new RcsbFvTooltip()); display.elementSubject.mouseenter.subscribe(({ d, e }) => { tooltipManager.showTooltip(d); tooltipManager.showTooltipDescription(d); }); display.elementSubject.mouseleave.subscribe(({ d, e }) => { tooltipManager.hideTooltip(); }); } } function axisDisplay(boardId, trackId, length) { return new RcsbAxisDisplay(boardId, trackId, length); } function sequenceDisplay(boardId, trackId, color, dynamicDisplayFlag, nonEmptyDisplayFlag) { const display = new RcsbFastSequenceDisplay(boardId, trackId); display.setDisplayColor(color); if (dynamicDisplayFlag) { display.setDynamicDisplay(); } if (nonEmptyDisplayFlag) { display.setNonEmptyDisplay(true); } return display; } function blockDisplay(boardId, trackId, color) { const display = new RcsbBlockDisplay(boardId, trackId); display.setDisplayColor(color); return display; } function pinDisplay(boardId, trackId, color, domain) { const display = new RcsbPinDisplay(boardId, trackId); display.setDisplayColor(color); display.yDomain(domain); return display; } function bondDisplay(boardId, trackId, color) { const display = new RcsbBondDisplay(boardId, trackId); display.setDisplayColor(color); return display; } function lineDisplay(boardId, trackId, color, domain, interpolationType) { const display = new RcsbLineDisplay(boardId, trackId); display.setDisplayColor(color); display.yDomain(domain); if (interpolationType != undefined) display.setInterpolationType(interpolationType); return display; } function areaDisplay(boardId, trackId, color, domain, interpolationType, blockAreaFlag, multiAreaFlag) { const display = new RcsbAreaDisplay(boardId, trackId); display.setDisplayColor(color); display.yDomain(domain); if (typeof interpolationType === "string") display.setInterpolationType(interpolationType); if (typeof blockAreaFlag === "boolean") display.setBlockArea(blockAreaFlag); if (typeof multiAreaFlag === "boolean") display.setMultiArea(multiAreaFlag); return display; } function variantDisplay(boardId, trackId, color) { const display = new RcsbVariantDisplay(boardId, trackId); display.setDisplayColor(color); return display; } function vlineDisplay(boardId, trackId, color) { const display = new RcsbVlineDisplay(boardId, trackId); display.setDisplayColor(color); return display; }