react-select-plus
Version:
A fork of react-select with support for option groups
97 lines (83 loc) • 2.63 kB
JavaScript
;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
function isGroup(option) {
return option && Array.isArray(option.options);
}
function menuRenderer(_ref) {
var focusedOption = _ref.focusedOption;
var instancePrefix = _ref.instancePrefix;
var labelKey = _ref.labelKey;
var onFocus = _ref.onFocus;
var onOptionRef = _ref.onOptionRef;
var onSelect = _ref.onSelect;
var optionClassName = _ref.optionClassName;
var optionComponent = _ref.optionComponent;
var optionGroupComponent = _ref.optionGroupComponent;
var optionRenderer = _ref.optionRenderer;
var options = _ref.options;
var valueArray = _ref.valueArray;
var valueKey = _ref.valueKey;
var OptionGroup = optionGroupComponent;
var Option = optionComponent;
var renderLabel = optionRenderer || this.getOptionLabel;
var renderOptions = function renderOptions(optionsSubset) {
return optionsSubset.map(function (option, i) {
if (isGroup(option)) {
var optionGroupClass = (0, _classnames2['default'])({
'Select-option-group': true
});
return _react2['default'].createElement(
OptionGroup,
{
className: optionGroupClass,
key: 'option-group-' + i,
label: renderLabel(option),
option: option,
optionIndex: i
},
renderOptions(option.options)
);
} else {
var _ret = (function () {
var isSelected = valueArray && valueArray.indexOf(option) > -1;
var isFocused = option === focusedOption;
var optionRef = isFocused ? 'focused' : null;
var optionClass = (0, _classnames2['default'])(optionClassName, {
'Select-option': true,
'is-selected': isSelected,
'is-focused': isFocused,
'is-disabled': option.disabled
});
return {
v: _react2['default'].createElement(
Option,
{
className: optionClass,
instancePrefix: instancePrefix,
isDisabled: option.disabled,
isFocused: isFocused,
isSelected: isSelected,
key: 'option-' + i + '-' + option[valueKey],
onFocus: onFocus,
onSelect: onSelect,
option: option,
optionIndex: i,
ref: function (ref) {
onOptionRef(ref, isFocused);
}
},
renderLabel(option, i)
)
};
})();
if (typeof _ret === 'object') return _ret.v;
}
});
};
return renderOptions(options);
}
module.exports = menuRenderer;