s4s-editor / src /containers /turbo-mode.jsx
soiz1's picture
Upload 2891 files
6bcb42f verified
raw
history blame
1.62 kB
import bindAll from 'lodash.bindall';
import PropTypes from 'prop-types';
import React from 'react';
import {connect} from 'react-redux';
/**
* Turbo Mode component passes toggleTurboMode function to its child.
* It also includes `turboMode` in the props passed to the children.
* It expects this child to be a function with the signature
* function (toggleTurboMode, {turboMode, ...props}) {}
* The component can then be used to attach turbo mode setting functionality
* to any other component:
*
* <TurboMode>{(toggleTurboMode, props) => (
* <MyCoolComponent
* turboEnabled={props.turboMode}
* onClick={toggleTurboMode}
* {...props}
* />
* )}</TurboMode>
*/
class TurboMode extends React.Component {
constructor (props) {
super(props);
bindAll(this, [
'toggleTurboMode'
]);
}
toggleTurboMode () {
this.props.vm.setTurboMode(!this.props.turboMode);
}
render () {
const {
/* eslint-disable no-unused-vars */
children,
vm,
/* eslint-enable no-unused-vars */
...props
} = this.props;
return this.props.children(this.toggleTurboMode, props);
}
}
TurboMode.propTypes = {
children: PropTypes.func,
turboMode: PropTypes.bool,
vm: PropTypes.shape({
setTurboMode: PropTypes.func
})
};
const mapStateToProps = state => ({
vm: state.scratchGui.vm,
turboMode: state.scratchGui.vmStatus.turbo
});
export default connect(
mapStateToProps,
() => ({}) // omit dispatch prop
)(TurboMode);