CallbackManagerFactoryInterface.ts 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import {RcsbFvTrackDataElementInterface} from "@rcsb/rcsb-saguaro";
  2. import {
  3. ViewerCallbackManagerInterface, ViewerActionManagerInterface
  4. } from "../../../RcsbFvStructure/StructureViewerInterface";
  5. import {DataContainer} from "../../../Utils/DataContainer";
  6. import {
  7. RcsbFvModulePublicInterface
  8. } from "@rcsb/rcsb-saguaro-app/build/dist/RcsbFvWeb/RcsbFvModule/RcsbFvModuleInterface";
  9. import {PfvManagerInterface} from "./PfvManagerFactoryInterface";
  10. import {RcsbFvStateManager} from "../../../RcsbFvState/RcsbFvStateManager";
  11. export interface CallbackManagerInterface<U> {
  12. structureViewerSelectionCallback(mode:'select'|'hover'): Promise<void>;
  13. featureClickCallback(e:RcsbFvTrackDataElementInterface): void;
  14. highlightHoverCallback(selection: RcsbFvTrackDataElementInterface[]): void;
  15. pfvSelectionChangeCallback(selection: Array<RcsbFvTrackDataElementInterface>): void;
  16. modelChangeCallback(defaultAuthId?: string, defaultOperatorName?:string): Promise<void>;
  17. pfvChangeCallback(args:U): Promise<void>;
  18. }
  19. export interface CallbackManagerFactoryInterface<R,U> {
  20. getCallbackManager(config: CallbackConfigInterface<R>): CallbackManagerInterface<U>;
  21. }
  22. export interface CallbackConfigInterface<R> {
  23. rcsbFvContainer: DataContainer<RcsbFvModulePublicInterface>;
  24. stateManager: RcsbFvStateManager;
  25. structureViewer: ViewerCallbackManagerInterface & ViewerActionManagerInterface<R>;
  26. pfvFactory: PfvManagerInterface;
  27. }
  28. export abstract class AbstractCallbackManager<R,U> implements CallbackManagerInterface<U> {
  29. protected readonly rcsbFvContainer: DataContainer<RcsbFvModulePublicInterface>;
  30. protected readonly stateManager: RcsbFvStateManager;
  31. protected readonly structureViewer: ViewerCallbackManagerInterface & ViewerActionManagerInterface<R>;
  32. protected pfvFactory: PfvManagerInterface;
  33. private readonly isInnerSelection: DataContainer<boolean> = new DataContainer<boolean>();
  34. constructor(config: CallbackConfigInterface<R>) {
  35. this.rcsbFvContainer = config.rcsbFvContainer;
  36. this.stateManager = config.stateManager;
  37. this.structureViewer = config.structureViewer;
  38. this.pfvFactory = config.pfvFactory;
  39. }
  40. public async structureViewerSelectionCallback(mode:'select'|'hover'): Promise<void> {
  41. if(this.rcsbFvContainer.get() == null)
  42. return;
  43. this.isInnerSelection.set(true);
  44. await this.innerStructureViewerSelectionChange(mode);
  45. this.isInnerSelection.set(false);
  46. }
  47. public pfvSelectionChangeCallback(selection: Array<RcsbFvTrackDataElementInterface>): void {
  48. if(this.isInnerSelection.get())
  49. return;
  50. this.innerPfvSelectionChange(selection);
  51. }
  52. public abstract featureClickCallback(e:RcsbFvTrackDataElementInterface): void;
  53. public abstract highlightHoverCallback(selection: RcsbFvTrackDataElementInterface[]): void;
  54. public abstract modelChangeCallback(defaultAuthId?: string, defaultOperatorName?:string): Promise<void>;
  55. public abstract pfvChangeCallback(args: U): Promise<void>;
  56. protected abstract innerStructureViewerSelectionChange(mode: "select" | "hover"): Promise<void> ;
  57. protected abstract innerPfvSelectionChange(selection: Array<RcsbFvTrackDataElementInterface>): void;
  58. }