example.tsx 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. import {RcsbFv3DBuilder} from "../../RcsbFv3DBuilder";
  2. import {StructureViewInterface} from "../../RcsbFvStructure/RcsbFvStructure";
  3. import {SequenceViewInterface} from "../../RcsbFvSequence/RcsbFvSequence";
  4. import './example.html';
  5. import {LoadMethod} from "../../RcsbFvStructure/StructurePlugins/MolstarPlugin";
  6. import {
  7. BlockViewSelector,
  8. CustomViewInterface,
  9. FeatureBlockInterface, FeatureViewInterface
  10. } from "../../RcsbFvSequence/SequenceViews/CustomView";
  11. import * as React from "react";
  12. import {
  13. RcsbFv,
  14. RcsbFvDisplayTypes,
  15. RcsbFvRowConfigInterface,
  16. RcsbFvTrackDataElementInterface
  17. } from "@rcsb/rcsb-saguaro";
  18. import {ChainSelectionInterface, RcsbFvSelection} from "../../RcsbFvSelection/RcsbFvSelection";
  19. import {
  20. SaguaroPluginModelMapType,
  21. SaguaroPluginPublicInterface
  22. } from "../../RcsbFvStructure/StructurePlugins/SaguaroPluginInterface";
  23. const additionalContent: (select: BlockViewSelector) => JSX.Element = (select: BlockViewSelector) => {
  24. function changeBlock(select: BlockViewSelector){
  25. select.setActiveBlock("MyBlock_2");
  26. }
  27. function changeBlock2(select: BlockViewSelector){
  28. select.setActiveBlock("MyBlock_1");
  29. }
  30. return (
  31. <div>
  32. <div onClick={()=>{changeBlock(select)}}>
  33. Option 1
  34. </div>
  35. <div onClick={()=>{changeBlock2(select)}}>
  36. Option 2
  37. </div>
  38. </div>
  39. );
  40. }
  41. const rowConfig: Array<RcsbFvRowConfigInterface> = [{
  42. trackId: "blockTrack",
  43. trackHeight: 20,
  44. trackColor: "#F9F9F9",
  45. displayType: RcsbFvDisplayTypes.BLOCK,
  46. displayColor: "#FF0000",
  47. rowTitle: "101M.A",
  48. trackData: [{
  49. begin: 30,
  50. end: 60
  51. }]
  52. }];
  53. const rowConfig2: Array<RcsbFvRowConfigInterface> = [{
  54. trackId: "blockTrack",
  55. trackHeight: 20,
  56. trackColor: "#F9F9F9",
  57. displayType: RcsbFvDisplayTypes.BLOCK,
  58. displayColor: "#00FF00",
  59. rowTitle: "1XXX.B",
  60. trackData: [{
  61. begin: 30,
  62. end: 60
  63. }]
  64. }]
  65. const fv1: FeatureViewInterface = {
  66. boardId:"101m_board",
  67. boardConfig: {
  68. range: {
  69. min: 1,
  70. max: 110
  71. },
  72. trackWidth: 940,
  73. rowTitleWidth: 60,
  74. includeAxis: true
  75. },
  76. rowConfig: rowConfig,
  77. sequenceSelectionCallback: (plugin: SaguaroPluginPublicInterface, selection: RcsbFvSelection, d: RcsbFvTrackDataElementInterface) => {
  78. selection.setSelectionFromRegion("model_1", "A", {begin:d.begin, end:d.end??d.begin});
  79. plugin.select("model_1", "A", d.begin, d.end??d.begin);
  80. },
  81. structureSelectionCallback: (pfv: RcsbFv, selection: RcsbFvSelection) => {
  82. const sel: ChainSelectionInterface | undefined = selection.getSelectionWithCondition("model_1", "A");
  83. if(sel == null)
  84. pfv.clearSelection();
  85. else
  86. pfv.setSelection(sel.regions);
  87. }
  88. }
  89. const fv2: FeatureViewInterface = {
  90. boardId:"1xxx_board",
  91. boardConfig: {
  92. range: {
  93. min: 1,
  94. max: 150
  95. },
  96. trackWidth: 940,
  97. rowTitleWidth: 60,
  98. includeAxis: true
  99. },
  100. rowConfig: rowConfig2,
  101. sequenceSelectionCallback: (plugin: SaguaroPluginPublicInterface, selection: RcsbFvSelection, d: RcsbFvTrackDataElementInterface) => {
  102. selection.setSelectionFromRegion("model_2", "B", {begin:d.begin, end:d.end??d.begin});
  103. plugin.select("model_2", "B", d.begin, d.end??d.begin);
  104. },
  105. structureSelectionCallback: (pfv: RcsbFv, selection: RcsbFvSelection) => {
  106. const sel: ChainSelectionInterface | undefined = selection.getSelectionWithCondition("model_2", "B");
  107. if(sel == null)
  108. pfv.clearSelection();
  109. else
  110. pfv.setSelection(sel.regions);
  111. }
  112. }
  113. const block: FeatureBlockInterface = {
  114. blockId:"MyBlock_1",
  115. blockConfig: [fv1]
  116. };
  117. const block2: FeatureBlockInterface = {
  118. blockId:"MyBlock_2",
  119. blockConfig: [fv2, fv1]
  120. };
  121. const block3: FeatureBlockInterface = {
  122. blockId:"MyBlock_3",
  123. blockConfig: [fv1, fv2]
  124. };
  125. const modelChangeCallback = (modelMap: SaguaroPluginModelMapType) => {
  126. console.log(modelMap);
  127. return {
  128. config:[block, block2, block3],
  129. additionalContent:(select: BlockViewSelector) => {
  130. function changeBlock(select: BlockViewSelector){
  131. select.setActiveBlock("MyBlock_2");
  132. }
  133. function changeBlock2(select: BlockViewSelector){
  134. select.setActiveBlock("MyBlock_1");
  135. }
  136. function changeBlock3(select: BlockViewSelector){
  137. select.setActiveBlock("MyBlock_3");
  138. }
  139. return (
  140. <div>
  141. <div onClick={()=>{changeBlock(select)}}>
  142. Option 1
  143. </div>
  144. <div onClick={()=>{changeBlock2(select)}}>
  145. Option 2
  146. </div>
  147. <div onClick={()=>{changeBlock3(select)}}>
  148. Option 3
  149. </div>
  150. </div>
  151. );
  152. }
  153. };
  154. };
  155. const customConfig: CustomViewInterface = {
  156. config:[block, block2],
  157. additionalContent:additionalContent,
  158. modelChangeCallback:modelChangeCallback
  159. }
  160. const sequenceConfig: SequenceViewInterface = {
  161. type: "custom",
  162. config: customConfig
  163. };
  164. const structureConfig:StructureViewInterface = {
  165. loadConfig: {
  166. method: LoadMethod.loadPdbIds,
  167. params: [{
  168. pdbId: "101m",
  169. id:"model_1"
  170. },{
  171. pdbId: "1xxx",
  172. id:"model_2"
  173. }]
  174. },
  175. pluginConfig: {
  176. showImportControls: true,
  177. showSessionControls: false
  178. }
  179. };
  180. document.addEventListener("DOMContentLoaded", function(event) {
  181. const panel3d = new RcsbFv3DBuilder({
  182. elementId: "pfv",
  183. structurePanelConfig: structureConfig,
  184. sequencePanelConfig: sequenceConfig
  185. });
  186. panel3d.render();
  187. });