framePropertyComponent.tsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import * as React from "react";
  2. import { LineContainerComponent } from '../../sharedComponents/lineContainerComponent';
  3. import { GraphFrame } from '../graphFrame';
  4. import { GlobalState } from '../../globalState';
  5. import { Color3LineComponent } from '../../sharedComponents/color3LineComponent';
  6. import { TextInputLineComponent } from '../../sharedComponents/textInputLineComponent';
  7. import { ButtonLineComponent } from '../../sharedComponents/buttonLineComponent';
  8. import { Nullable } from 'babylonjs/types';
  9. import { Observer } from 'babylonjs/Misc/observable';
  10. export interface IFramePropertyTabComponentProps {
  11. globalState: GlobalState
  12. frame: GraphFrame;
  13. }
  14. export class FramePropertyTabComponent extends React.Component<IFramePropertyTabComponentProps> {
  15. private onFrameExpandStateChangedObserver: Nullable<Observer<GraphFrame>>;
  16. constructor(props: IFramePropertyTabComponentProps) {
  17. super(props)
  18. }
  19. componentDidMount() {
  20. this.onFrameExpandStateChangedObserver = this.props.frame.onExpandStateChanged.add(() => this.forceUpdate());
  21. }
  22. componentWillUnmount() {
  23. if (this.onFrameExpandStateChangedObserver) {
  24. this.props.frame.onExpandStateChanged.remove(this.onFrameExpandStateChangedObserver);
  25. this.onFrameExpandStateChangedObserver = null;
  26. }
  27. }
  28. render() {
  29. return (
  30. <div id="propertyTab">
  31. <div id="header">
  32. <img id="logo" src="https://www.babylonjs.com/Assets/logo-babylonjs-social-twitter.png" />
  33. <div id="title">
  34. NODE MATERIAL EDITOR
  35. </div>
  36. </div>
  37. <div>
  38. <LineContainerComponent title="GENERAL">
  39. <TextInputLineComponent globalState={this.props.globalState} label="Name" propertyName="name" target={this.props.frame} />
  40. <Color3LineComponent globalState={this.props.globalState} label="Color" target={this.props.frame} propertyName="color"></Color3LineComponent>
  41. {
  42. !this.props.frame.isCollapsed &&
  43. <ButtonLineComponent label="Collapse" onClick={() => {
  44. this.props.frame!.isCollapsed = true;
  45. }} />
  46. }
  47. {
  48. this.props.frame.isCollapsed &&
  49. <ButtonLineComponent label="Expand" onClick={() => {
  50. this.props.frame!.isCollapsed = false;
  51. }} />
  52. }
  53. {/* <ButtonLineComponent label="Export" onClick={() => {
  54. this.state.currentFrame!.export();
  55. }} /> */}
  56. </LineContainerComponent>
  57. </div>
  58. </div>
  59. );
  60. }
  61. }