penguinmod-editor-2 / src /containers /slider-monitor.jsx
soiz1's picture
Upload 2891 files
6bcb42f verified
import bindAll from 'lodash.bindall';
import PropTypes from 'prop-types';
import React from 'react';
import VM from 'scratch-vm';
import { setVariableValue } from '../lib/variable-utils';
import { connect } from 'react-redux';
import SliderMonitorComponent from '../components/monitor/slider-monitor.jsx';
class SliderMonitor extends React.Component {
constructor(props) {
super(props);
bindAll(this, [
'handleSliderUpdate'
]);
this.state = {
value: props.value
};
}
componentWillReceiveProps(nextProps) {
if (this.state.value !== nextProps.value) {
this.setState({ value: nextProps.value });
}
}
handleSliderUpdate(e) {
this.setState({ value: Number(e.target.value) });
const { vm, targetId, id: variableId } = this.props;
setVariableValue(vm, targetId, variableId, Number(e.target.value));
}
render() {
const {
vm, // eslint-disable-line no-unused-vars
value, // eslint-disable-line no-unused-vars
...props
} = this.props;
return (
<SliderMonitorComponent
{...props}
value={this.state.value}
onSliderUpdate={this.handleSliderUpdate}
/>
);
}
}
SliderMonitor.propTypes = {
id: PropTypes.string,
targetId: PropTypes.string,
value: PropTypes.oneOfType([
PropTypes.number,
PropTypes.string
]),
vm: PropTypes.instanceOf(VM)
};
const mapStateToProps = state => ({ vm: state.scratchGui.vm });
export default connect(mapStateToProps)(SliderMonitor);