headerComponent.tsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import * as React from "react";
  2. import { GlobalState } from '../globalState';
  3. import LogoImage from "../imgs/logo.svg";
  4. import { Engine } from 'babylonjs/Engines/engine';
  5. import { CommandBarComponent } from './commandBarComponent';
  6. import { Utilities } from '../tools/utilities';
  7. require("../scss/header.scss");
  8. interface IHeaderComponentProps {
  9. globalState: GlobalState;
  10. }
  11. export class HeaderComponent extends React.Component<IHeaderComponentProps> {
  12. private _refVersionNumber: React.RefObject<HTMLSpanElement>;
  13. public constructor(props: IHeaderComponentProps) {
  14. super(props);
  15. this._refVersionNumber = React.createRef();
  16. this.props.globalState.onLanguageChangedObservable.add(() => {
  17. this.updateDescription();
  18. });
  19. this.props.globalState.onRunExecutedObservable.add(() => {
  20. this.updateDescription();
  21. });
  22. }
  23. updateDescription() {
  24. this._refVersionNumber.current!.innerHTML = Engine.Version;
  25. if (Engine.LastCreatedEngine) {
  26. this._refVersionNumber.current!.innerHTML += ` (${Engine.LastCreatedEngine.name}${Engine.LastCreatedEngine.version > 1 ? Engine.LastCreatedEngine.version : ""})`;
  27. }
  28. }
  29. componentDidMount() {
  30. this.updateDescription();
  31. }
  32. public render() {
  33. return (
  34. <div id="pg-header">
  35. <div className="logo-area">
  36. <LogoImage />
  37. <div className="version"><div className="version-text">Playground&nbsp;</div><span className="version-number" ref={this._refVersionNumber}></span></div>
  38. </div>
  39. <div className="command-bar">
  40. {
  41. this.props.globalState.language === "JS" &&
  42. <>
  43. <div className="language-button active background-ts" onClick={() => {
  44. Utilities.SwitchLanguage("TS", this.props.globalState);
  45. }}>TS</div>
  46. <div className="language-button background-js">Javascript</div>
  47. </>
  48. }
  49. {
  50. this.props.globalState.language === "TS" &&
  51. <>
  52. <div className="language-button active background-js" onClick={() => {
  53. Utilities.SwitchLanguage("JS", this.props.globalState);
  54. }}>JS</div>
  55. <div className="language-button background-ts">TypeScript</div>
  56. </>
  57. }
  58. <CommandBarComponent globalState={this.props.globalState} />
  59. </div>
  60. </div>
  61. )
  62. }
  63. }