rsuite
Version:
A suite of react components
929 lines (727 loc) • 30.7 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = void 0;
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
var _isArray2 = _interopRequireDefault(require("lodash/isArray"));
var _isFunction2 = _interopRequireDefault(require("lodash/isFunction"));
var _isNil2 = _interopRequireDefault(require("lodash/isNil"));
var _omit2 = _interopRequireDefault(require("lodash/omit"));
var _pick2 = _interopRequireDefault(require("lodash/pick"));
var _remove2 = _interopRequireDefault(require("lodash/remove"));
var _clone2 = _interopRequireDefault(require("lodash/clone"));
var _isUndefined2 = _interopRequireDefault(require("lodash/isUndefined"));
var _get2 = _interopRequireDefault(require("lodash/get"));
var React = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _classnames = _interopRequireDefault(require("classnames"));
var _domLib = require("dom-lib");
var _shallowEqual = _interopRequireDefault(require("../utils/shallowEqual"));
var _treeUtils = require("../utils/treeUtils");
var _utils = require("../utils");
var _Picker = require("../Picker");
var _DropdownMenu = _interopRequireWildcard(require("../Picker/DropdownMenu"));
var _InputAutosize = _interopRequireDefault(require("./InputAutosize"));
var _InputSearch = _interopRequireDefault(require("./InputSearch"));
var _Tag = _interopRequireDefault(require("../Tag"));
var _propTypes2 = require("../Picker/propTypes");
var InputPicker =
/*#__PURE__*/
function (_React$Component) {
(0, _inheritsLoose2.default)(InputPicker, _React$Component);
InputPicker.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {
if (nextProps.data && !(0, _shallowEqual.default)(nextProps.data, prevState.data)) {
return {
data: nextProps.data,
newData: [],
focusItemValue: (0, _get2.default)(nextProps, "data.0." + nextProps.valueKey)
};
}
return null;
};
function InputPicker(props) {
var _this;
_this = _React$Component.call(this, props) || this;
_this.menuContainerRef = void 0;
_this.positionRef = void 0;
_this.toggleWrapperRef = void 0;
_this.toggleRef = void 0;
_this.triggerRef = void 0;
_this.inputRef = void 0;
_this.getFocusableMenuItems = function () {
var menuItems = _this.menuContainerRef.current.menuItems;
if (!menuItems) {
return [];
}
var items = Object.values(menuItems).map(function (item) {
return item.props.getItemData();
});
return (0, _treeUtils.filterNodesOfTree)(items, function (item) {
return _this.shouldDisplay(item);
});
};
_this.getToggleInstance = function () {
return _this.toggleRef.current;
};
_this.focusNextMenuItem = function () {
var valueKey = _this.props.valueKey;
_this.findNode(function (items, index) {
var focusItem = items[index + 1];
if (!(0, _isUndefined2.default)(focusItem)) {
_this.setState({
focusItemValue: focusItem[valueKey]
});
}
});
};
_this.focusPrevMenuItem = function () {
var valueKey = _this.props.valueKey;
_this.findNode(function (items, index) {
var focusItem = items[index - 1];
if (!(0, _isUndefined2.default)(focusItem)) {
_this.setState({
focusItemValue: focusItem[valueKey]
});
}
});
};
_this.handleKeyDown = function (event) {
if (!_this.menuContainerRef.current) {
return;
}
var multi = _this.props.multi;
(0, _Picker.onMenuKeyDown)(event, {
down: _this.focusNextMenuItem,
up: _this.focusPrevMenuItem,
enter: multi ? _this.selectFocusMenuCheckItem : _this.selectFocusMenuItem,
esc: _this.handleCloseDropdown,
del: multi ? _this.removeLastItem : _this.handleClean
});
};
_this.handleClick = function () {
_this.focusInput();
};
_this.selectFocusMenuItem = function (event) {
var _this$state = _this.state,
focusItemValue = _this$state.focusItemValue,
searchKeyword = _this$state.searchKeyword;
var _this$props = _this.props,
valueKey = _this$props.valueKey,
data = _this$props.data,
disabledItemValues = _this$props.disabledItemValues;
if (!focusItemValue || !data) {
return;
} // If the value is disabled in this option, it is returned.
if (disabledItemValues === null || disabledItemValues === void 0 ? void 0 : disabledItemValues.some(function (item) {
return item === focusItemValue;
})) {
return;
} // Find active `MenuItem` by `value`
var focusItem = (0, _treeUtils.findNodeOfTree)(_this.getAllData(), function (item) {
return (0, _shallowEqual.default)(item[valueKey], focusItemValue);
});
if (!focusItem && focusItemValue === searchKeyword) {
focusItem = _this.createOption(searchKeyword);
}
_this.setState({
value: focusItemValue,
searchKeyword: ''
});
_this.handleSelect(focusItemValue, focusItem, event);
_this.handleChange(focusItemValue, event);
_this.handleCloseDropdown();
};
_this.selectFocusMenuCheckItem = function (event) {
var _this$props2 = _this.props,
valueKey = _this$props2.valueKey,
disabledItemValues = _this$props2.disabledItemValues;
var focusItemValue = _this.state.focusItemValue;
var value = _this.getValue();
var data = _this.getAllData();
if (!focusItemValue || !data) {
return;
} // If the value is disabled in this option, it is returned.
if (disabledItemValues === null || disabledItemValues === void 0 ? void 0 : disabledItemValues.some(function (item) {
return item === focusItemValue;
})) {
return;
}
if (!value.some(function (v) {
return (0, _shallowEqual.default)(v, focusItemValue);
})) {
value.push(focusItemValue);
} else {
(0, _remove2.default)(value, function (itemVal) {
return (0, _shallowEqual.default)(itemVal, focusItemValue);
});
}
var focusItem = data.find(function (item) {
return (0, _shallowEqual.default)((0, _get2.default)(item, valueKey), focusItemValue);
});
if (!focusItem) {
focusItem = _this.createOption(focusItemValue);
}
_this.setState({
value: value,
searchKeyword: ''
}, _this.updatePosition);
_this.handleSelect(value, focusItem, event);
_this.handleChange(value, event);
};
_this.handleItemSelect = function (value, item, event) {
var nextState = {
value: value,
focusItemValue: value,
searchKeyword: ''
};
_this.setState(nextState);
_this.handleSelect(value, item, event);
_this.handleChange(value, event);
_this.handleCloseDropdown();
};
_this.handleCheckItemSelect = function (nextItemValue, item, event, checked) {
var value = _this.getValue();
if (checked) {
value.push(nextItemValue);
} else {
(0, _remove2.default)(value, function (itemVal) {
return (0, _shallowEqual.default)(itemVal, nextItemValue);
});
}
var nextState = {
value: value,
searchKeyword: '',
focusItemValue: nextItemValue
};
_this.setState(nextState, _this.updatePosition);
_this.handleSelect(value, item, event);
_this.handleChange(value, event);
_this.focusInput();
};
_this.handleSelect = function (value, item, event) {
var _this$props3 = _this.props,
onSelect = _this$props3.onSelect,
creatable = _this$props3.creatable;
var newData = _this.state.newData;
onSelect === null || onSelect === void 0 ? void 0 : onSelect(value, item, event);
if (creatable && item.create) {
delete item.create;
_this.setState({
newData: newData.concat(item)
});
}
};
_this.handleSearch = function (searchKeyword, event) {
var _filteredData$;
var _this$props4 = _this.props,
onSearch = _this$props4.onSearch,
valueKey = _this$props4.valueKey;
var filteredData = (0, _treeUtils.filterNodesOfTree)(_this.getAllData(), function (item) {
return _this.shouldDisplay(item, searchKeyword);
});
var nextState = {
searchKeyword: searchKeyword,
focusItemValue: (filteredData === null || filteredData === void 0 ? void 0 : (_filteredData$ = filteredData[0]) === null || _filteredData$ === void 0 ? void 0 : _filteredData$[valueKey]) || searchKeyword
};
_this.setState(nextState, _this.updatePosition);
onSearch === null || onSearch === void 0 ? void 0 : onSearch(searchKeyword, event);
};
_this.handleOpenDropdown = function () {
var _this$triggerRef$curr, _this$triggerRef$curr2;
(_this$triggerRef$curr = _this.triggerRef.current) === null || _this$triggerRef$curr === void 0 ? void 0 : (_this$triggerRef$curr2 = _this$triggerRef$curr.show) === null || _this$triggerRef$curr2 === void 0 ? void 0 : _this$triggerRef$curr2.call(_this$triggerRef$curr);
};
_this.handleCloseDropdown = function () {
var _this$triggerRef$curr3, _this$triggerRef$curr4;
(_this$triggerRef$curr3 = _this.triggerRef.current) === null || _this$triggerRef$curr3 === void 0 ? void 0 : (_this$triggerRef$curr4 = _this$triggerRef$curr3.hide) === null || _this$triggerRef$curr4 === void 0 ? void 0 : _this$triggerRef$curr4.call(_this$triggerRef$curr3);
};
_this.open = function () {
var _this$handleOpenDropd, _this2;
(_this$handleOpenDropd = (_this2 = _this).handleOpenDropdown) === null || _this$handleOpenDropd === void 0 ? void 0 : _this$handleOpenDropd.call(_this2);
};
_this.close = function () {
var _this$handleCloseDrop, _this3;
(_this$handleCloseDrop = (_this3 = _this).handleCloseDropdown) === null || _this$handleCloseDrop === void 0 ? void 0 : _this$handleCloseDrop.call(_this3);
};
_this.handleChange = function (value, event) {
var _this$props$onChange, _this$props5;
(_this$props$onChange = (_this$props5 = _this.props).onChange) === null || _this$props$onChange === void 0 ? void 0 : _this$props$onChange.call(_this$props5, value, event);
};
_this.handleClean = function (event) {
var _this$props6 = _this.props,
disabled = _this$props6.disabled,
onClean = _this$props6.onClean;
var searchKeyword = _this.state.searchKeyword;
if (disabled || searchKeyword !== '') {
return;
}
var nextState = {
value: null,
focusItemValue: null,
searchKeyword: ''
};
_this.setState(nextState);
_this.handleChange(null, event);
_this.updatePosition();
onClean === null || onClean === void 0 ? void 0 : onClean(event);
};
_this.handleEntered = function () {
var _this$props$onOpen, _this$props7;
(_this$props$onOpen = (_this$props7 = _this.props).onOpen) === null || _this$props$onOpen === void 0 ? void 0 : _this$props$onOpen.call(_this$props7);
};
_this.handleExited = function () {
var _this$props8 = _this.props,
onClose = _this$props8.onClose,
multi = _this$props8.multi;
var value = _this.getValue();
onClose === null || onClose === void 0 ? void 0 : onClose();
_this.setState({
focusItemValue: multi ? (0, _get2.default)(value, 0) : value,
searchKeyword: ''
});
};
_this.handleEnter = function () {
_this.focusInput();
_this.setState({
open: true
});
};
_this.handleExit = function () {
_this.blurInput();
_this.setState({
open: false
});
};
_this.handleRemoveItemByTag = function (tag, event) {
event.stopPropagation();
var value = _this.getValue();
(0, _remove2.default)(value, function (itemVal) {
return (0, _shallowEqual.default)(itemVal, tag);
});
_this.setState({
value: value
}, _this.updatePosition);
_this.handleChange(value, event);
};
_this.handleInputFocus = function () {
var _this$triggerRef$curr5;
_this.setState({
open: true
});
(_this$triggerRef$curr5 = _this.triggerRef.current) === null || _this$triggerRef$curr5 === void 0 ? void 0 : _this$triggerRef$curr5.show();
};
_this.removeLastItem = function (event) {
var tagName = (0, _get2.default)(event, 'target.tagName');
if (tagName !== 'INPUT') {
_this.focusInput();
return;
}
if (tagName === 'INPUT' && (0, _get2.default)(event, 'target.value')) {
return;
}
var value = _this.getValue();
value.pop();
_this.setState({
value: value
}, _this.updatePosition);
_this.handleChange(value, event);
};
_this.addPrefix = function (name) {
return (0, _utils.prefix)(_this.props.classPrefix)(name);
};
_this.renderMenuItem = function (label, item) {
var _this$props9 = _this.props,
locale = _this$props9.locale,
renderMenuItem = _this$props9.renderMenuItem;
var newLabel = item.create ? React.createElement("span", null, (0, _utils.tplTransform)(locale.createOption, label)) : label;
return renderMenuItem ? renderMenuItem(newLabel, item) : newLabel;
};
var defaultValue = props.defaultValue,
groupBy = props.groupBy,
_valueKey = props.valueKey,
labelKey = props.labelKey,
defaultOpen = props.defaultOpen,
_multi = props.multi,
_data = props.data;
var _value = _multi ? defaultValue || [] : defaultValue;
var _focusItemValue = _multi ? (0, _get2.default)(_value, 0) : defaultValue;
_this.state = {
data: _data,
value: _value,
focusItemValue: _focusItemValue,
searchKeyword: '',
newData: [],
open: defaultOpen,
maxWidth: 100
};
if (groupBy === _valueKey || groupBy === labelKey) {
throw Error('`groupBy` can not be equal to `valueKey` and `labelKey`');
}
_this.menuContainerRef = React.createRef();
_this.positionRef = React.createRef();
_this.toggleWrapperRef = React.createRef();
_this.toggleRef = React.createRef();
_this.triggerRef = React.createRef();
_this.inputRef = React.createRef();
return _this;
}
var _proto = InputPicker.prototype;
_proto.componentDidMount = function componentDidMount() {
if (this.toggleWrapperRef.current) {
var maxWidth = (0, _domLib.getWidth)(this.toggleWrapperRef.current);
this.setState({
maxWidth: maxWidth
});
}
};
_proto.getValue = function getValue() {
var _this$props10 = this.props,
value = _this$props10.value,
multi = _this$props10.multi;
var nextValue = (0, _isUndefined2.default)(value) ? this.state.value : value;
if (multi) {
return (0, _clone2.default)(nextValue) || [];
}
return nextValue;
};
_proto.getAllData = function getAllData() {
var data = this.props.data;
var newData = this.state.newData;
return [].concat(data, newData);
};
_proto.getAllDataAndCache = function getAllDataAndCache() {
var cacheData = this.props.cacheData;
var data = this.getAllData();
return [].concat(data, cacheData);
};
_proto.getDateItem = function getDateItem(value) {
var _this$props11 = this.props,
placeholder = _this$props11.placeholder,
valueKey = _this$props11.valueKey,
labelKey = _this$props11.labelKey; // Find active `MenuItem` by `value`
var activeItem = (0, _treeUtils.findNodeOfTree)(this.getAllDataAndCache(), function (item) {
return (0, _shallowEqual.default)(item[valueKey], value);
});
var displayElement = placeholder;
if ((0, _get2.default)(activeItem, labelKey)) {
displayElement = (0, _get2.default)(activeItem, labelKey);
}
return {
isValid: !!activeItem,
activeItem: activeItem,
displayElement: displayElement
};
};
_proto.createOption = function createOption(value) {
var _ref2;
var _this$props12 = this.props,
valueKey = _this$props12.valueKey,
labelKey = _this$props12.labelKey,
groupBy = _this$props12.groupBy,
locale = _this$props12.locale;
if (groupBy) {
var _ref;
return _ref = {
create: true
}, _ref[groupBy] = locale.newItem, _ref[valueKey] = value, _ref[labelKey] = value, _ref;
}
return _ref2 = {
create: true
}, _ref2[valueKey] = value, _ref2[labelKey] = value, _ref2;
};
_proto.focusInput = function focusInput() {
var input = this.getInput();
if (!input) return;
input.focus();
};
_proto.blurInput = function blurInput() {
var input = this.getInput();
if (!input) return;
input.blur();
};
_proto.getInput = function getInput() {
var multi = this.props.multi;
if (multi) {
var _this$inputRef$curren, _this$inputRef$curren2;
return (_this$inputRef$curren = this.inputRef.current) === null || _this$inputRef$curren === void 0 ? void 0 : (_this$inputRef$curren2 = _this$inputRef$curren.getInputInstance) === null || _this$inputRef$curren2 === void 0 ? void 0 : _this$inputRef$curren2.call(_this$inputRef$curren);
}
return this.inputRef.current;
};
/**
* Index of keyword in `label`
* @param {node} label
*/
_proto.shouldDisplay = function shouldDisplay(item, searchKeyword) {
var _this$props13 = this.props,
searchBy = _this$props13.searchBy,
labelKey = _this$props13.labelKey;
var label = item === null || item === void 0 ? void 0 : item[labelKey];
var word = typeof searchKeyword === 'undefined' ? this.state.searchKeyword : searchKeyword;
if (typeof searchBy === 'function') {
return searchBy(word, label, item);
}
return (0, _Picker.shouldDisplay)(label, word);
};
_proto.findNode = function findNode(focus) {
var items = this.getFocusableMenuItems();
var valueKey = this.props.valueKey;
var focusItemValue = this.state.focusItemValue;
for (var i = 0; i < items.length; i += 1) {
if ((0, _shallowEqual.default)(focusItemValue, items[i][valueKey])) {
focus(items, i);
return;
}
}
focus(items, -1);
};
_proto.updatePosition = function updatePosition() {
var _this$positionRef$cur, _this$positionRef$cur2;
(_this$positionRef$cur = this.positionRef.current) === null || _this$positionRef$cur === void 0 ? void 0 : (_this$positionRef$cur2 = _this$positionRef$cur.updatePosition) === null || _this$positionRef$cur2 === void 0 ? void 0 : _this$positionRef$cur2.call(_this$positionRef$cur, true);
};
_proto.renderDropdownMenu = function renderDropdownMenu() {
var _this4 = this;
var _this$props14 = this.props,
groupBy = _this$props14.groupBy,
locale = _this$props14.locale,
renderMenu = _this$props14.renderMenu,
renderExtraFooter = _this$props14.renderExtraFooter,
menuClassName = _this$props14.menuClassName,
menuStyle = _this$props14.menuStyle,
menuAutoWidth = _this$props14.menuAutoWidth,
creatable = _this$props14.creatable,
valueKey = _this$props14.valueKey,
multi = _this$props14.multi,
sort = _this$props14.sort,
virtualized = _this$props14.virtualized;
var _this$state2 = this.state,
focusItemValue = _this$state2.focusItemValue,
searchKeyword = _this$state2.searchKeyword;
var menuClassPrefix = this.addPrefix(multi ? 'check-menu' : 'select-menu');
var classes = (0, _classnames.default)(menuClassPrefix, menuClassName);
var allData = this.getAllData();
var filteredData = (0, _treeUtils.filterNodesOfTree)(allData, function (item) {
return _this4.shouldDisplay(item);
});
if (creatable && searchKeyword && !(0, _treeUtils.findNodeOfTree)(allData, function (item) {
return item[valueKey] === searchKeyword;
})) {
filteredData = [].concat(filteredData, [this.createOption(searchKeyword)]);
} // Create a tree structure data when set `groupBy`
if (groupBy) {
filteredData = (0, _utils.getDataGroupBy)(filteredData, groupBy, sort);
} else if (typeof sort === 'function') {
filteredData = filteredData.sort(sort(false));
}
var menuProps = (0, _pick2.default)(this.props, Object.keys((0, _omit2.default)(_DropdownMenu.dropdownMenuPropTypes, ['className', 'style', 'classPrefix'])));
var value = this.getValue();
var menu = filteredData.length ? React.createElement(_DropdownMenu.default, (0, _extends2.default)({}, menuProps, {
classPrefix: menuClassPrefix,
dropdownMenuItemClassPrefix: multi ? undefined : menuClassPrefix + "-item",
dropdownMenuItemComponentClass: multi ? _Picker.DropdownMenuCheckItem : _Picker.DropdownMenuItem,
ref: this.menuContainerRef,
activeItemValues: multi ? value : [value],
focusItemValue: focusItemValue,
data: filteredData,
group: !(0, _isUndefined2.default)(groupBy),
onSelect: multi ? this.handleCheckItemSelect : this.handleItemSelect,
renderMenuItem: this.renderMenuItem,
virtualized: virtualized
})) : React.createElement("div", {
className: this.addPrefix('none')
}, locale.noResultsText);
return React.createElement(_Picker.MenuWrapper, {
autoWidth: menuAutoWidth,
className: classes,
style: menuStyle,
getToggleInstance: this.getToggleInstance,
onKeyDown: this.handleKeyDown
}, renderMenu ? renderMenu(menu) : menu, renderExtraFooter === null || renderExtraFooter === void 0 ? void 0 : renderExtraFooter());
};
_proto.renderSingleValue = function renderSingleValue() {
var _this$props15 = this.props,
renderValue = _this$props15.renderValue,
multi = _this$props15.multi,
placeholder = _this$props15.placeholder;
if (multi) {
return {
isValid: false,
displayElement: placeholder
};
}
var value = this.getValue();
var dataItem = this.getDateItem(value);
var displayElement = dataItem.displayElement;
if (!(0, _isNil2.default)(value) && (0, _isFunction2.default)(renderValue)) {
displayElement = renderValue(value, dataItem.activeItem, displayElement);
}
return {
isValid: dataItem.isValid,
displayElement: displayElement
};
};
_proto.renderMultiValue = function renderMultiValue() {
var _this5 = this;
var _this$props16 = this.props,
multi = _this$props16.multi,
disabled = _this$props16.disabled,
_this$props16$tagProp = _this$props16.tagProps,
tagProps = _this$props16$tagProp === void 0 ? {} : _this$props16$tagProp,
renderValue = _this$props16.renderValue,
value = _this$props16.value;
if (!multi) {
return null;
}
var _tagProps$closable = tagProps.closable,
closable = _tagProps$closable === void 0 ? true : _tagProps$closable,
onClose = tagProps.onClose,
tagRest = (0, _objectWithoutPropertiesLoose2.default)(tagProps, ["closable", "onClose"]);
var tags = this.getValue() || [];
var items = [];
var tagElements = tags.map(function (tag) {
var _this5$getDateItem = _this5.getDateItem(tag),
isValid = _this5$getDateItem.isValid,
displayElement = _this5$getDateItem.displayElement,
activeItem = _this5$getDateItem.activeItem;
items.push(activeItem);
if (!isValid) {
return null;
}
return React.createElement(_Tag.default, (0, _extends2.default)({}, tagRest, {
key: tag,
closable: !disabled && closable,
title: typeof displayElement === 'string' ? displayElement : undefined,
onClose: (0, _utils.createChainedFunction)(_this5.handleRemoveItemByTag.bind(_this5, tag), onClose)
}), displayElement);
}).filter(function (item) {
return item !== null;
});
if ((tags.length > 0 || !(0, _isNil2.default)(value)) && (0, _isFunction2.default)(renderValue)) {
return renderValue(this.getValue(), items, tagElements);
}
return tagElements;
};
_proto.renderInputSearch = function renderInputSearch() {
var _this$props17 = this.props,
multi = _this$props17.multi,
onBlur = _this$props17.onBlur,
onFocus = _this$props17.onFocus,
tabIndex = _this$props17.tabIndex;
var props = {
componentClass: 'input',
inputRef: this.inputRef
};
if (multi) {
props.componentClass = _InputAutosize.default; // 52 = 55 (right padding) - 2 (border) - 6 (left padding)
props.inputStyle = {
maxWidth: this.state.maxWidth - 63
};
}
return React.createElement(_InputSearch.default, (0, _extends2.default)({}, props, {
tabIndex: tabIndex,
onChange: this.handleSearch,
value: this.state.open ? this.state.searchKeyword : '',
onBlur: onBlur,
onFocus: (0, _utils.createChainedFunction)(this.handleInputFocus, onFocus)
}));
};
_proto.render = function render() {
var _getToggleWrapperClas;
var _this$props18 = this.props,
disabled = _this$props18.disabled,
cleanable = _this$props18.cleanable,
locale = _this$props18.locale,
toggleComponentClass = _this$props18.toggleComponentClass,
style = _this$props18.style,
onEnter = _this$props18.onEnter,
onEntered = _this$props18.onEntered,
onExit = _this$props18.onExit,
onExited = _this$props18.onExited,
searchable = _this$props18.searchable,
multi = _this$props18.multi,
positionRef = _this$props18.positionRef,
renderValue = _this$props18.renderValue,
rest = (0, _objectWithoutPropertiesLoose2.default)(_this$props18, ["disabled", "cleanable", "locale", "toggleComponentClass", "style", "onEnter", "onEntered", "onExit", "onExited", "searchable", "multi", "positionRef", "renderValue"]);
var unhandled = (0, _utils.getUnhandledProps)(InputPicker, rest);
var _this$renderSingleVal = this.renderSingleValue(),
isValid = _this$renderSingleVal.isValid,
displayElement = _this$renderSingleVal.displayElement;
var tagElements = this.renderMultiValue();
var value = this.getValue();
/**
* 1.Have a value and the value is valid.
* 2.Regardless of whether the value is valid, as long as renderValue is set, it is judged to have a value.
*/
var hasSingleValue = !(0, _isNil2.default)(value) && (0, _isFunction2.default)(renderValue) && !(0, _isNil2.default)(displayElement);
var hasMultiValue = (0, _isArray2.default)(value) && value.length > 0 && (0, _isFunction2.default)(renderValue) && !(0, _isNil2.default)(tagElements);
var hasValue = multi ? !!(0, _get2.default)(tagElements, 'length') || hasMultiValue : isValid || hasSingleValue;
var classes = (0, _Picker.getToggleWrapperClassName)('input', this.addPrefix, this.props, hasValue, (_getToggleWrapperClas = {}, _getToggleWrapperClas[this.addPrefix('tag')] = multi, _getToggleWrapperClas[this.addPrefix('focused')] = this.state.open, _getToggleWrapperClas));
var searching = !!this.state.searchKeyword && this.state.open;
var displaySearchInput = searchable && !disabled;
return React.createElement(_Picker.PickerToggleTrigger, {
pickerProps: this.props,
ref: this.triggerRef,
positionRef: (0, _utils.mergeRefs)(this.positionRef, positionRef),
trigger: "active",
onEnter: (0, _utils.createChainedFunction)(this.handleEnter, onEnter),
onEntered: (0, _utils.createChainedFunction)(this.handleEntered, onEntered),
onExit: (0, _utils.createChainedFunction)(this.handleExit, onExit),
onExited: (0, _utils.createChainedFunction)(this.handleExited, onExited),
speaker: this.renderDropdownMenu()
}, React.createElement("div", {
className: classes,
style: style,
onKeyDown: this.handleKeyDown,
onClick: this.handleClick,
ref: this.toggleWrapperRef
}, React.createElement(_Picker.PickerToggle, (0, _extends2.default)({}, unhandled, {
tabIndex: null,
ref: this.toggleRef,
componentClass: toggleComponentClass,
onClean: this.handleClean,
cleanable: cleanable && !disabled,
hasValue: hasValue
}), searching || multi && hasValue ? null : displayElement || locale.placeholder), React.createElement("div", {
className: this.addPrefix('tag-wrapper')
}, tagElements, displaySearchInput && this.renderInputSearch())));
};
return InputPicker;
}(React.Component);
InputPicker.propTypes = (0, _extends2.default)({}, _propTypes2.listPickerPropTypes, {
cacheData: _propTypes.default.array,
menuAutoWidth: _propTypes.default.bool,
maxHeight: _propTypes.default.number,
searchable: _propTypes.default.bool,
creatable: _propTypes.default.bool,
multi: _propTypes.default.bool,
groupBy: _propTypes.default.any,
sort: _propTypes.default.func,
renderMenu: _propTypes.default.func,
renderMenuItem: _propTypes.default.func,
renderMenuGroup: _propTypes.default.func,
onSelect: _propTypes.default.func,
onGroupTitleClick: _propTypes.default.func,
onSearch: _propTypes.default.func,
virtualized: _propTypes.default.bool,
searchBy: _propTypes.default.func,
tagProps: _propTypes.default.object
});
InputPicker.defaultProps = (0, _extends2.default)({}, _propTypes2.listPickerDefaultProps, {
cacheData: [],
maxHeight: 320,
locale: {
placeholder: 'Select',
noResultsText: 'No results found',
newItem: 'New item',
createOption: 'Create option "{0}"'
},
searchable: true,
menuAutoWidth: true,
virtualized: true
});
var _default = (0, _utils.defaultProps)({
classPrefix: 'picker'
})(InputPicker);
exports.default = _default;
module.exports = exports.default;