import * as React from "react"; import { GlobalState } from '../../globalState'; import { Nullable } from 'babylonjs/types'; import { DefaultNodeModel } from '../../components/diagram/defaultNodeModel'; import { ButtonLineComponent } from '../../sharedComponents/buttonLineComponent'; import { LineContainerComponent } from '../../sharedComponents/lineContainerComponent'; import { StringTools } from '../../stringTools'; import { FileButtonLineComponent } from '../../sharedComponents/fileButtonLineComponent'; import { Tools } from 'babylonjs/Misc/tools'; require("./propertyTab.scss"); interface IPropertyTabComponentProps { globalState: GlobalState; } export class PropertyTabComponent extends React.Component }> { constructor(props: IPropertyTabComponentProps) { super(props) this.state = { currentNode: null }; } componentWillMount() { this.props.globalState.onSelectionChangedObservable.add(block => { this.setState({ currentNode: block }); }); } load(file: File) { Tools.ReadFile(file, (data) => { let decoder = new TextDecoder("utf-8"); let serializationObject = JSON.parse(decoder.decode(data)); this.props.globalState.nodeMaterial!.loadFromSerialization(serializationObject, ""); this.props.globalState.onResetRequiredObservable.notifyObservers(); }, undefined, true); } render() { if (this.state.currentNode) { return (
{this.state.currentNode.renderProperties(this.props.globalState)}
); } return (
{ this.props.globalState.nodeMaterial!.setToDefault(); this.props.globalState.onResetRequiredObservable.notifyObservers(); }} /> { this.props.globalState.onZoomToFitRequiredObservable.notifyObservers(); }} /> { this.props.globalState.onReOrganizedRequiredObservable.notifyObservers(); }} /> this.load(file)} accept=".json" /> { let json = JSON.stringify(this.props.globalState.nodeMaterial!.serialize()); StringTools.DownloadAsFile(json, "nodeMaterial.json"); }} /> { StringTools.DownloadAsFile(this.props.globalState.nodeMaterial!.compiledShaders, "shaders.txt"); }} />
); } }