import {RcsbFv3DBuilder} from "../../RcsbFv3DBuilder"; import {StructureViewInterface} from "../../RcsbFvStructure/RcsbFvStructure"; import {SequenceViewInterface} from "../../RcsbFvSequence/RcsbFvSequence"; import './example.html'; import {LoadMethod} from "../../RcsbFvStructure/StructurePlugins/MolstarPlugin"; import { BlockViewSelector, CustomViewInterface, FeatureBlockInterface, FeatureViewInterface } from "../../RcsbFvSequence/SequenceViews/CustomView"; import * as React from "react"; import { RcsbFv, RcsbFvDisplayTypes, RcsbFvRowConfigInterface, RcsbFvTrackDataElementInterface } from "@rcsb/rcsb-saguaro"; import {ChainSelectionInterface, RcsbFvSelection} from "../../RcsbFvSelection/RcsbFvSelection"; import { SaguaroPluginModelMapType, SaguaroPluginPublicInterface } from "../../RcsbFvStructure/StructurePlugins/SaguaroPluginInterface"; const additionalContent: (select: BlockViewSelector) => JSX.Element = (select: BlockViewSelector) => { function changeBlock(select: BlockViewSelector){ select.setActiveBlock("MyBlock_2"); } function changeBlock2(select: BlockViewSelector){ select.setActiveBlock("MyBlock_1"); } return (
{changeBlock(select)}}> Option 1
{changeBlock2(select)}}> Option 2
); } const rowConfig: Array = [{ trackId: "blockTrack", trackHeight: 20, trackColor: "#F9F9F9", displayType: RcsbFvDisplayTypes.BLOCK, displayColor: "#FF0000", rowTitle: "101M.A", trackData: [{ begin: 30, end: 60 }] }]; const rowConfig2: Array = [{ trackId: "blockTrack", trackHeight: 20, trackColor: "#F9F9F9", displayType: RcsbFvDisplayTypes.BLOCK, displayColor: "#00FF00", rowTitle: "1XXX.B", trackData: [{ begin: 30, end: 60 }] }] const fv1: FeatureViewInterface = { boardId:"101m_board", boardConfig: { range: { min: 1, max: 110 }, trackWidth: 940, rowTitleWidth: 60, includeAxis: true }, rowConfig: rowConfig, sequenceSelectionCallback: (plugin: SaguaroPluginPublicInterface, selection: RcsbFvSelection, d: RcsbFvTrackDataElementInterface) => { selection.setSelectionFromRegion("model_1", "A", {begin:d.begin, end:d.end??d.begin}); plugin.select("model_1", "A", d.begin, d.end??d.begin); }, structureSelectionCallback: (pfv: RcsbFv, selection: RcsbFvSelection) => { const sel: ChainSelectionInterface | undefined = selection.getSelectionWithCondition("model_1", "A"); if(sel == null) pfv.clearSelection(); else pfv.setSelection(sel.regions); } } const fv2: FeatureViewInterface = { boardId:"1xxx_board", boardConfig: { range: { min: 1, max: 150 }, trackWidth: 940, rowTitleWidth: 60, includeAxis: true }, rowConfig: rowConfig2, sequenceSelectionCallback: (plugin: SaguaroPluginPublicInterface, selection: RcsbFvSelection, d: RcsbFvTrackDataElementInterface) => { selection.setSelectionFromRegion("model_2", "B", {begin:d.begin, end:d.end??d.begin}); plugin.select("model_2", "B", d.begin, d.end??d.begin); }, structureSelectionCallback: (pfv: RcsbFv, selection: RcsbFvSelection) => { const sel: ChainSelectionInterface | undefined = selection.getSelectionWithCondition("model_2", "B"); if(sel == null) pfv.clearSelection(); else pfv.setSelection(sel.regions); } } const block: FeatureBlockInterface = { blockId:"MyBlock_1", blockConfig: [fv1] }; const block2: FeatureBlockInterface = { blockId:"MyBlock_2", blockConfig: [fv2, fv1] }; const block3: FeatureBlockInterface = { blockId:"MyBlock_3", blockConfig: [fv1, fv2] }; const modelChangeCallback = (modelMap: SaguaroPluginModelMapType) => { console.log(modelMap); return { config:[block, block2, block3], additionalContent:(select: BlockViewSelector) => { function changeBlock(select: BlockViewSelector){ select.setActiveBlock("MyBlock_2"); } function changeBlock2(select: BlockViewSelector){ select.setActiveBlock("MyBlock_1"); } function changeBlock3(select: BlockViewSelector){ select.setActiveBlock("MyBlock_3"); } return (
{changeBlock(select)}}> Option 1
{changeBlock2(select)}}> Option 2
{changeBlock3(select)}}> Option 3
); } }; }; const customConfig: CustomViewInterface = { config:[block, block2], additionalContent:additionalContent, modelChangeCallback:modelChangeCallback } const sequenceConfig: SequenceViewInterface = { type: "custom", config: customConfig }; const structureConfig:StructureViewInterface = { loadConfig: { method: LoadMethod.loadPdbIds, params: [{ pdbId: "101m", id:"model_1" },{ pdbId: "1xxx", id:"model_2" }] }, pluginConfig: { showImportControls: true, showSessionControls: false } }; document.addEventListener("DOMContentLoaded", function(event) { const panel3d = new RcsbFv3DBuilder({ elementId: "pfv", structurePanelConfig: structureConfig, sequencePanelConfig: sequenceConfig }); panel3d.render(); });