rk-rc-select
Version:
146 lines (128 loc) • 4.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _util = require('./util');
var _rkRcMenu = require('rk-rc-menu');
var _warning = require('warning');
var _warning2 = _interopRequireDefault(_warning);
var _OptGroup = require('./OptGroup');
var _OptGroup2 = _interopRequireDefault(_OptGroup);
var _Option = require('./Option');
var _Option2 = _interopRequireDefault(_Option);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
exports["default"] = {
filterOption: function filterOption(input, child) {
if (!input) {
return true;
}
var filterOption = this.props.filterOption;
if (!filterOption) {
return true;
}
if (child.props.disabled) {
return false;
}
return filterOption.call(this, input, child);
},
renderFilterOptions: function renderFilterOptions(inputValue) {
return this.renderFilterOptionsFromChildren(this.props.children, true, inputValue);
},
renderFilterOptionsFromChildren: function renderFilterOptionsFromChildren(children, showNotFound, iv) {
var _this = this;
var sel = [];
var props = this.props;
var inputValue = iv === undefined ? this.state.inputValue : iv;
var childrenKeys = [];
var tags = props.tags;
_react2["default"].Children.forEach(children, function (child) {
if (child.type === _OptGroup2["default"]) {
var innerItems = _this.renderFilterOptionsFromChildren(child.props.children, false);
if (innerItems.length) {
var label = child.props.label;
var key = child.key;
if (!key && typeof label === 'string') {
key = label;
} else if (!label && key) {
label = key;
}
sel.push(_react2["default"].createElement(
_rkRcMenu.ItemGroup,
{ key: key, title: label },
innerItems
));
}
return;
}
(0, _warning2["default"])(child.type === _Option2["default"], 'the children of `Select` should be `Select.Option` or `Select.OptGroup`, ' + ('instead of `' + (child.type.name || child.type.displayName || child.type) + '`.'));
var childValue = (0, _util.getValuePropValue)(child);
if (_this.filterOption(inputValue, child)) {
sel.push(_react2["default"].createElement(_rkRcMenu.Item, (0, _extends3["default"])({
style: _util.UNSELECTABLE_STYLE,
attribute: _util.UNSELECTABLE_ATTRIBUTE,
value: childValue,
key: childValue
}, child.props)));
}
if (tags && !child.props.disabled) {
childrenKeys.push(childValue);
}
});
if (tags) {
// tags value must be string
var value = this.state.value || [];
value = value.filter(function (singleValue) {
return childrenKeys.indexOf(singleValue.key) === -1 && (!inputValue || String(singleValue.key).indexOf(String(inputValue)) > -1);
});
sel = sel.concat(value.map(function (singleValue) {
var key = singleValue.key;
return _react2["default"].createElement(
_rkRcMenu.Item,
{
style: _util.UNSELECTABLE_STYLE,
attribute: _util.UNSELECTABLE_ATTRIBUTE,
value: key,
key: key
},
key
);
}));
if (inputValue) {
var notFindInputItem = sel.every(function (option) {
return (0, _util.getValuePropValue)(option) !== inputValue;
});
if (notFindInputItem) {
sel.unshift(_react2["default"].createElement(
_rkRcMenu.Item,
{
style: _util.UNSELECTABLE_STYLE,
attribute: _util.UNSELECTABLE_ATTRIBUTE,
value: inputValue,
key: inputValue
},
inputValue
));
}
}
}
if (!sel.length && showNotFound && props.notFoundContent) {
sel = [_react2["default"].createElement(
_rkRcMenu.Item,
{
style: _util.UNSELECTABLE_STYLE,
attribute: _util.UNSELECTABLE_ATTRIBUTE,
disabled: true,
value: 'NOT_FOUND',
key: 'NOT_FOUND'
},
props.notFoundContent
)];
}
return sel;
}
};
module.exports = exports['default'];