import * as React from "react"; import { Nullable } from "babylonjs/types"; import { Observer, Observable } from "babylonjs/Misc/observable"; interface IRadioButtonLineComponentProps { onSelectionChangedObservable: Observable; label: string; isSelected: () => boolean; onSelect: () => void; } export class RadioButtonLineComponent extends React.Component { private _onSelectionChangedObserver: Nullable>; constructor(props: IRadioButtonLineComponentProps) { super(props); this.state = { isSelected: this.props.isSelected() }; } componentDidMount() { this._onSelectionChangedObserver = this.props.onSelectionChangedObservable.add((value) => { this.setState({ isSelected: value === this }); }); } componentWillUnmount() { if (this._onSelectionChangedObserver) { this.props.onSelectionChangedObservable.remove(this._onSelectionChangedObserver); this._onSelectionChangedObserver = null; } } onChange() { this.props.onSelect(); this.props.onSelectionChangedObservable.notifyObservers(this); } render() { return (
{this.props.label}
this.onChange()} />
); } }