import * as React from "react"; import { Observable } from "babylonjs"; import { PropertyChangedEvent } from "../../propertyChangedEvent"; interface ISliderLineComponentProps { label: string, target: any, propertyName: string, minimum: number, maximum: number, step: number, onPropertyChangedObservable?: Observable } export class SliderLineComponent extends React.Component { private _localChange = false; constructor(props: ISliderLineComponentProps) { super(props); this.state = { value: this.props.target[this.props.propertyName] }; } shouldComponentUpdate(nextProps: ISliderLineComponentProps, nextState: { value: number }) { const currentState = nextProps.target[nextProps.propertyName]; if (currentState !== nextState.value || this._localChange) { nextState.value = currentState; this._localChange = false; return true; } return false; } onChange(newValueString: any) { this._localChange = true; const newValue = parseFloat(newValueString); if (this.props.onPropertyChangedObservable) { this.props.onPropertyChangedObservable.notifyObservers({ object: this.props.target, property: this.props.propertyName, value: newValue, initialValue: this.state.value }); } this.props.target[this.props.propertyName] = newValue; this.setState({ value: newValue }); } render() { return (
{this.props.label}
{this.state.value ? this.state.value.toFixed(2) : "0"}  this.onChange(evt.target.value)} />
); } }