RcsbFv3DAlignmentProvider.tsx 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. import * as React from "react";
  2. import {RcsbFv3DAbstract} from "./RcsbFv3DAbstract";
  3. import {
  4. RcsbFvAdditionalConfig,
  5. RcsbFvModulePublicInterface, RcsbModuleDataProviderInterface
  6. } from "@rcsb/rcsb-saguaro-app/build/dist/RcsbFvWeb/RcsbFvModule/RcsbFvModuleInterface";
  7. import uniqid from "uniqid";
  8. import {
  9. LoadMethod,
  10. LoadMolstarInterface,
  11. LoadMolstarReturnType
  12. } from "../RcsbFvStructure/StructureViewers/MolstarViewer/MolstarActionManager";
  13. import {ViewerProps} from "@rcsb/rcsb-molstar/build/src/viewer";
  14. import {StructureViewer} from "../RcsbFvStructure/StructureViewers/StructureViewer";
  15. import {MolstarManagerFactory} from "../RcsbFvStructure/StructureViewers/MolstarViewer/MolstarManagerFactory";
  16. import {
  17. MsaCallbackManagerFactory
  18. } from "../RcsbFvSequence/SequenceViews/RcsbView/CallbackManagerFactoryImplementation/MsaCallbackManager";
  19. import {RcsbFvStructure} from "../RcsbFvStructure/RcsbFvStructure";
  20. import {RcsbFv3DCssConfig} from "./RcsbFv3DComponent";
  21. import {MolstarAlignmentLoader} from "../RcsbFvStructure/StructureViewers/MolstarViewer/MolstarUtils/MolstarAlignmentLoader";
  22. import {MsaBehaviourObserver} from "../RcsbFvStructure/StructureViewerBehaviour/MsaBehaviour";
  23. import {
  24. PolymerEntityInstanceInterface
  25. } from "@rcsb/rcsb-saguaro-app/build/dist/RcsbCollectTools/DataCollectors/PolymerEntityInstancesCollector";
  26. import {HelpLinkComponent} from "../RcsbFvSequence/SequenceViews/RcsbView/Components/HelpLinkComponent";
  27. import {AlignmentResponse} from "@rcsb/rcsb-api-tools/build/RcsbGraphQL/Types/Borrego/GqlTypes";
  28. import {DataContainer} from "../Utils/DataContainer";
  29. import {
  30. MsaPfvManagerFactory, MsaPfvManagerInterface
  31. } from "../RcsbFvSequence/SequenceViews/RcsbView/PfvManagerFactoryImplementation/MsaPfvManagerFactory";
  32. import {buildDataProviderFv} from "@rcsb/rcsb-saguaro-app";
  33. import {
  34. LoadParamsProviderInterface
  35. } from "../RcsbFvStructure/StructureUtils/StructureLoaderInterface";
  36. import {
  37. AlignmentTrajectoryParamsType
  38. } from "../RcsbFvStructure/StructureViewers/MolstarViewer/TrajectoryPresetProvider/AlignmentTrajectoryPresetProvider";
  39. import {
  40. MolstarComponentActionFactory
  41. } from "../RcsbFvStructure/StructureViewers/MolstarViewer/MolstarUtils/MolstarComponentAction";
  42. import {MolstarTools} from "../RcsbFvStructure/StructureViewers/MolstarViewer/MolstarUtils/MolstarTools";
  43. import getModelIdFromTrajectory = MolstarTools.getModelIdFromTrajectory;
  44. import {AbstractViewInterface} from "../RcsbFvSequence/SequenceViews/AbstractView";
  45. import {
  46. AlignmentProviderBehaviour
  47. } from "../RcsbFvSequence/SequenceViews/RcsbView/RcsbViewBehaviour/AlignmentProviderBehaviour";
  48. import {TrajectoryHierarchyPresetProvider} from "molstar/lib/mol-plugin-state/builder/structure/hierarchy-preset";
  49. export interface RcsbFv3DDataProviderInterface {
  50. elementId?: string;
  51. config: {
  52. dataProvider: RcsbModuleDataProviderInterface;
  53. loadParamsProvider?: LoadParamsProviderInterface<{entryId: string; instanceId: string;},LoadMolstarInterface<AlignmentTrajectoryParamsType,LoadMolstarReturnType>>;
  54. title?: string;
  55. subtitle?: string;
  56. additionalContent?(props: AbstractViewInterface): JSX.Element;
  57. };
  58. additionalConfig?: RcsbFvAdditionalConfig;
  59. molstarProps?: Partial<ViewerProps>;
  60. cssConfig?: RcsbFv3DCssConfig;
  61. trajectoryProvider?: TrajectoryHierarchyPresetProvider<AlignmentTrajectoryParamsType,LoadMolstarReturnType>;
  62. }
  63. type AlignmentLoadMolstarType = LoadMolstarInterface<AlignmentTrajectoryParamsType,LoadMolstarReturnType>;
  64. export class RcsbFv3DAlignmentProvider extends RcsbFv3DAbstract<
  65. MsaPfvManagerInterface<[RcsbModuleDataProviderInterface]>,
  66. AlignmentLoadMolstarType|undefined,
  67. LoadMolstarReturnType,
  68. {viewerElement:string|HTMLElement; viewerProps:Partial<ViewerProps>;},
  69. {context:{id:string}; module:RcsbFvModulePublicInterface;}
  70. > {
  71. constructor(params:RcsbFv3DDataProviderInterface){
  72. const elementId: string = params.elementId ?? uniqid("RcsbFv3D_");
  73. const alignmentResponseContainer:DataContainer<AlignmentResponse> = new DataContainer<AlignmentResponse>();
  74. super({
  75. elementId,
  76. sequenceConfig:{
  77. title: params.config.title,
  78. subtitle: params.config.subtitle,
  79. config:{
  80. rcsbId: "external-data",
  81. additionalConfig: params.additionalConfig,
  82. pfvParams:{
  83. id: "external-data",
  84. buildMsaAlignmentFv: buildDataProviderFv,
  85. pfvArgs:[params.config.dataProvider],
  86. alignmentResponseContainer
  87. },
  88. buildPfvOnMount: true,
  89. pfvManagerFactory: new MsaPfvManagerFactory<[RcsbModuleDataProviderInterface]>(),
  90. callbackManagerFactory: new MsaCallbackManagerFactory<{context:{id:string} & Partial<PolymerEntityInstanceInterface>}>({
  91. pluginLoadParamsDefinition,
  92. alignmentResponseContainer
  93. }),
  94. additionalContent: params.config.additionalContent ?? ((props)=>(<HelpLinkComponent {...props} helpHref={"/docs/grouping-structures/groups-1d-3d-alignment"}/>))
  95. },
  96. rcsbViewBehaviour: new AlignmentProviderBehaviour()
  97. },
  98. structureConfig: {
  99. loadConfig: undefined,
  100. structureViewerConfig: {
  101. viewerElement:RcsbFvStructure.componentId(elementId),
  102. viewerProps: params.molstarProps ?? {}
  103. }
  104. },
  105. structureViewer: new StructureViewer<
  106. AlignmentLoadMolstarType,
  107. LoadMolstarReturnType,
  108. {viewerElement:string|HTMLElement,viewerProps:Partial<ViewerProps>}
  109. >( new MolstarManagerFactory(getModelIdFromTrajectory) ),
  110. structureViewerBehaviourObserver: new MsaBehaviourObserver<AlignmentLoadMolstarType,LoadMolstarReturnType>(
  111. new MolstarAlignmentLoader(params.config.loadParamsProvider),
  112. new MolstarComponentActionFactory()
  113. )
  114. });
  115. }
  116. }
  117. const pluginLoadParamsDefinition = (entryId:string)=>({
  118. loadMethod: LoadMethod.loadPdbId,
  119. loadParams:{
  120. entryId
  121. }
  122. })