genericNodeWidget.tsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import * as React from "react";
  2. import { Nullable } from 'babylonjs/types';
  3. import { GlobalState } from '../../../globalState';
  4. import { GenericNodeModel } from './genericNodeModel';
  5. import { PortHelper } from '../portHelper';
  6. /**
  7. * GenericNodeWidgetProps
  8. */
  9. export interface GenericNodeWidgetProps {
  10. node: Nullable<GenericNodeModel>;
  11. globalState: GlobalState;
  12. }
  13. /**
  14. * GenericNodeWidgetState
  15. */
  16. export interface GenericNodeWidgetState {
  17. }
  18. /**
  19. * Used to display a node block for the node editor
  20. */
  21. export class GenericNodeWidget extends React.Component<GenericNodeWidgetProps, GenericNodeWidgetState> {
  22. /**
  23. * Creates a GenericNodeWidget
  24. * @param props
  25. */
  26. constructor(props: GenericNodeWidgetProps) {
  27. super(props);
  28. this.state = {};
  29. if (this.props.node) {
  30. this.props.node.addListener({
  31. selectionChanged: () => {
  32. let selected = (this.props.node as any).selected;
  33. this.props.globalState.onSelectionChangedObservable.notifyObservers(selected ? this.props.node : null);
  34. }
  35. });
  36. }
  37. }
  38. render() {
  39. // Header label
  40. var header = "";
  41. if (this.props.node && this.props.node.block) {
  42. header = this.props.node.block.name;
  43. }
  44. // Input/Output ports
  45. var outputPorts = PortHelper.GenerateOutputPorts(this.props.node, false);
  46. var inputPorts = PortHelper.GenerateInputPorts(this.props.node);
  47. return (
  48. <div className={"diagramBlock" + (outputPorts.length === 0 ? " output" : "")}>
  49. <div className="header">
  50. {header}
  51. </div>
  52. <div className="inputs">
  53. {inputPorts}
  54. </div>
  55. <div className="outputs">
  56. {outputPorts}
  57. </div>
  58. </div>
  59. );
  60. }
  61. }