@render-props/choices
Version:
A state container which provides an interface for making selections from a group of choices. The `Choices` component itself is a context provider which can be used with the `Choice` and `ChoicesConsumer` components for deep-tree selections. It does not ha
62 lines (46 loc) • 1.53 kB
JavaScript
'use strict'
var _interopRequireDefault = require('@babel/runtime/helpers/interopRequireDefault')
exports.__esModule = true
exports.default = _default
var _extends2 = _interopRequireDefault(
require('@babel/runtime/helpers/extends')
)
var _react = _interopRequireDefault(require('react'))
var _propTypes = _interopRequireDefault(require('prop-types'))
var _ChoicesContext = _interopRequireDefault(require('./ChoicesContext'))
class Choice extends _react.default.Component {
constructor(props) {
super(props)
this.select = () => this.props.select(this.props.value)
this.deselect = () => this.props.deselect(this.props.value)
this.toggle = () => this.props.toggle(this.props.value)
this.delete = () => this.props.deleteChoice(this.props.value)
this.choiceContext = {
select: this.select,
deselect: this.deselect,
toggle: this.toggle,
delete: this.delete,
isSelected: this.props.isSelected(props.value),
}
}
render() {
this.choiceContext.isSelected = this.props.isSelected(this.props.value)
return this.props.children(this.choiceContext)
}
}
Choice.propTypes = {
children: _propTypes.default.func.isRequired,
value: _propTypes.default.any.isRequired,
}
function _default(props) {
return _react.default.createElement(
_ChoicesContext.default.Consumer,
null,
function(choicesContext) {
return _react.default.createElement(
Choice,
(0, _extends2.default)({}, choicesContext, props)
)
}
)
}