AbstractView.tsx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import * as React from "react";
  2. import * as classes from '../../styles/RcsbFvStyle.module.scss';
  3. import {RcsbFvDOMConstants} from "../../RcsbFvConstants/RcsbFvConstants";
  4. import {
  5. SaguaroPluginInterface,
  6. SaguaroPluginModelMapType
  7. } from "../../RcsbFvStructure/StructurePlugins/SaguaroPluginInterface";
  8. import { RcsbFvSelection} from "../../RcsbFvSelection/RcsbFvSelection";
  9. export interface AbstractViewInterface {
  10. componentId: string;
  11. title?: string;
  12. subtitle?: string;
  13. plugin: SaguaroPluginInterface;
  14. selection: RcsbFvSelection;
  15. }
  16. export abstract class AbstractView<P,S> extends React.Component <P & AbstractViewInterface, S> {
  17. protected componentDivId: string;
  18. protected pfvDivId: string;
  19. constructor(props:P & AbstractViewInterface) {
  20. super(props);
  21. this.componentDivId = props.componentId+"_"+RcsbFvDOMConstants.PFV_DIV;
  22. this.pfvDivId = props.componentId+"_"+RcsbFvDOMConstants.PFV_APP_ID;
  23. }
  24. render():JSX.Element {
  25. return (
  26. <div id={this.componentDivId} style={{width: "100%", height:"100%"}} >
  27. {this.createTitle()}
  28. {this.createSubtitle()}
  29. {this.additionalContent()}
  30. <div id ={this.pfvDivId} />
  31. </div>
  32. );
  33. }
  34. componentDidMount() {
  35. this.props.plugin.setSelectCallback(this.structureSelectionCallback.bind(this));
  36. this.props.plugin.setModelChangeCallback(this.modelChangeCallback.bind(this));
  37. window.addEventListener('resize', this.updatePfvDimensions.bind(this));
  38. }
  39. private createTitle(): JSX.Element | null{
  40. if(this.props.title)
  41. return (<div id={RcsbFvDOMConstants.TITLE_ID} className={classes.rcsbFvTitle}>{this.props.title}</div>)
  42. return null;
  43. }
  44. private createSubtitle(): JSX.Element | null{
  45. if(this.props.subtitle)
  46. return (<div id={RcsbFvDOMConstants.SUBTITLE_ID} className={classes.rcsbFvSubtitle}>{this.props.subtitle}</div>)
  47. return null;
  48. }
  49. protected structureSelectionCallback(): void{}
  50. protected modelChangeCallback(modelMap:SaguaroPluginModelMapType): void{}
  51. protected updatePfvDimensions(): void{}
  52. protected additionalContent(): JSX.Element | null {
  53. return null;
  54. }
  55. }