Spaces:
Build error
Build error
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); | |