UniprotRowTitleComponent.tsx 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*
  2. * Copyright (c) 2021 RCSB PDB and contributors, licensed under MIT, See LICENSE file for more info.
  3. * @author Joan Segura Mora <joan.segura@rcsb.org>
  4. */
  5. import * as React from "react";
  6. import {RcsbFvRowTitleInterface} from "@rcsb/rcsb-saguaro/build/RcsbFv/RcsbFvRow/RcsbFvRowTitle";
  7. import {RcsbFvRowConfigInterface} from "@rcsb/rcsb-saguaro";
  8. import {
  9. AlignmentRequestContextType
  10. } from "@rcsb/rcsb-saguaro-app/build/dist/RcsbFvWeb/RcsbFvFactories/RcsbFvTrackFactory/TrackFactoryImpl/AlignmentTrackFactory";
  11. import {TargetAlignment} from "@rcsb/rcsb-api-tools/build/RcsbGraphQL/Types/Borrego/GqlTypes";
  12. import {RcsbFvStateManager} from "../../../../../RcsbFvState/RcsbFvStateManager";
  13. import {Subscription} from "rxjs";
  14. import {TagDelimiter} from "@rcsb/rcsb-saguaro-app";
  15. import {UniprotRowTitleCheckbox} from "./UniprotRowTitleCheckbox";
  16. interface UniprotRowTitleInterface extends RcsbFvRowTitleInterface {
  17. alignmentContext: AlignmentRequestContextType;
  18. targetAlignment: TargetAlignment;
  19. stateManager:RcsbFvStateManager;
  20. }
  21. interface UniprotRowTitleState {
  22. expandTitle: boolean;
  23. disabled: boolean;
  24. }
  25. export class UniprotRowTitleComponent extends React.Component <UniprotRowTitleInterface, UniprotRowTitleState> {
  26. private readonly configData : RcsbFvRowConfigInterface;
  27. private subscription: Subscription;
  28. readonly state = {
  29. expandTitle: false,
  30. disabled: true
  31. };
  32. constructor(props: UniprotRowTitleInterface) {
  33. super(props);
  34. this.configData = this.props.data;
  35. }
  36. public render(): JSX.Element{
  37. return <div style={{textAlign:"right"}}>
  38. <a href={`/structure/${TagDelimiter.parseEntity(this.props.targetAlignment.target_id!).entryId}#entity-${TagDelimiter.parseEntity(this.props.targetAlignment.target_id!).entityId}`}>{this.props.targetAlignment.target_id}</a>
  39. <UniprotRowTitleCheckbox disabled={this.state.disabled} {...TagDelimiter.parseEntity(this.props.targetAlignment.target_id!)} tag={"aligned"} stateManager={this.props.stateManager}/>
  40. <UniprotRowTitleCheckbox disabled={this.state.disabled} {...TagDelimiter.parseEntity(this.props.targetAlignment.target_id!)} tag={"polymer"} stateManager={this.props.stateManager}/>
  41. <UniprotRowTitleCheckbox disabled={this.state.disabled} {...TagDelimiter.parseEntity(this.props.targetAlignment.target_id!)} tag={"non-polymer"} stateManager={this.props.stateManager}/>
  42. </div>;
  43. }
  44. public componentDidMount(): void {
  45. this.subscribe();
  46. }
  47. public componentWillUnmount() {
  48. this.subscription.unsubscribe();
  49. }
  50. private subscribe(): void{
  51. this.subscription = this.props.stateManager.subscribe<"representation-change",{label:string;isHidden:boolean;}>((o)=>{
  52. if(o.type == "model-change" && o.view == "3d-view")
  53. this.modelChange();
  54. })
  55. }
  56. private modelChange(): void {
  57. if(this.props.targetAlignment.target_id && this.props.stateManager.assemblyModelSate.getMap().has(this.props.targetAlignment.target_id)){
  58. if(this.state.disabled)
  59. this.setState({disabled:false})
  60. }else if(!this.state.disabled){
  61. this.setState({disabled:true})
  62. }
  63. }
  64. }