multiple-cascader
Version:
905 lines (773 loc) • 33.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
require("antd/es/cascader/style/css");
var _cascader = _interopRequireDefault(require("antd/es/cascader"));
require("antd/es/icon/style/css");
var _icon = _interopRequireDefault(require("antd/es/icon"));
var React = _interopRequireWildcard(require("react"));
var _omit = _interopRequireDefault(require("omit.js"));
var _classnames = _interopRequireDefault(require("classnames"));
require("./style/index.less");
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var defaultLimit = 50;
function defaultRenderFilteredOption(inputValue, path) {
return path.map(function (option, index) {
var label = option['label'];
var node = label.indexOf(inputValue) > -1 ? highlightKeyword(label, inputValue, 'ant-cascader') : label;
return index === 0 ? node : [' / ', node];
});
}
function highlightKeyword(str, keyword, prefixCls) {
return str.split(keyword).map(function (node, index) {
return index === 0 ? node : [React.createElement("span", {
className: "".concat(prefixCls, "-menu-item-keyword"),
key: "seperator"
}, keyword), node];
});
}
function defaultFilterOption(inputValue, path) {
return path.some(function (option) {
return option.label.indexOf(inputValue) > -1;
});
}
function defaultSortFilteredOption(a, b, inputValue, names) {
function callback(elem) {
return elem[names.label].indexOf(inputValue) > -1;
}
return a.findIndex(callback) - b.findIndex(callback);
}
function getFieldNames(_ref) {
var fieldNames = _ref.fieldNames;
return fieldNames;
}
function getFilledFieldNames(props) {
var fieldNames = getFieldNames(props) || {};
var names = {
children: fieldNames.children || 'children',
label: fieldNames.label || 'label',
value: fieldNames.value || 'value'
};
return names;
}
function flattenTree(options, props) {
var ancestor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var names = getFilledFieldNames(props);
var flattenOptions = [];
var childrenName = names.children;
options.forEach(function (option) {
var path = ancestor.concat(option);
if (props.changeOnSelect || !option[childrenName] || !option[childrenName].length) {
flattenOptions.push(path);
}
if (option[childrenName]) {
flattenOptions = flattenOptions.concat(flattenTree(option[childrenName], props, path));
}
});
return flattenOptions;
}
var currentValue = [];
var MultipleCascader =
/*#__PURE__*/
function (_React$Component) {
_inherits(MultipleCascader, _React$Component);
function MultipleCascader(props) {
var _this2;
_classCallCheck(this, MultipleCascader);
_this2 = _possibleConstructorReturn(this, _getPrototypeOf(MultipleCascader).call(this, props));
_this2.handleChange = _this2.handleChange.bind(_assertThisInitialized(_this2));
_this2.handleContentKeyDown = _this2.handleContentKeyDown.bind(_assertThisInitialized(_this2));
_this2.handleInputChange = _this2.handleInputChange.bind(_assertThisInitialized(_this2));
_this2.defaultDisplayRender = _this2.defaultDisplayRender.bind(_assertThisInitialized(_this2));
_this2.handlePopupVisibleChange = _this2.handlePopupVisibleChange.bind(_assertThisInitialized(_this2));
_this2.handleRemoveClick = _this2.handleRemoveClick.bind(_assertThisInitialized(_this2));
_this2.handleContentClick = _this2.handleContentClick.bind(_assertThisInitialized(_this2));
_this2.handleInputKeyDown = _this2.handleInputKeyDown.bind(_assertThisInitialized(_this2));
_this2.handleInputBlur = _this2.handleInputBlur.bind(_assertThisInitialized(_this2));
_this2.generateFilteredOptions = _this2.generateFilteredOptions.bind(_assertThisInitialized(_this2));
_this2.handleHasInputChange = _this2.handleHasInputChange.bind(_assertThisInitialized(_this2));
_this2.handleHasInputKeyDown = _this2.handleHasInputKeyDown.bind(_assertThisInitialized(_this2));
_this2.handlePlaceClick = _this2.handlePlaceClick.bind(_assertThisInitialized(_this2));
_this2.clearSelection = _this2.clearSelection.bind(_assertThisInitialized(_this2));
_this2.state = {
values: [],
labels: [],
isModify: false,
inputValue: '',
count: 0,
options: props.options,
cascaderValue: [],
currentValue: [],
flattenOptions: flattenTree(props.options, props),
visiblePopup: false,
timeoutIds: []
};
return _this2;
}
_createClass(MultipleCascader, [{
key: "componentDidUpdate",
value: function componentDidUpdate(prevProps, prevState) {
var _this3 = this;
if (prevState.isModify != this.state.isModify) {
var onChange = this.props.onChange;
typeof onChange == 'function' && onChange(this.state.values);
}
var timeoutIds = this.state.timeoutIds;
timeoutIds.forEach(function (_, id) {
var clearId = _ - 1;
clearTimeout(clearId);
timeoutIds.splice(id, 1);
_this3.setState({
timeoutIds: timeoutIds
});
});
} // add active className
}, {
key: "getClassActive",
value: function getClassActive(level) {
var ary = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var popupClassName = this.props.popupClassName;
if (isNaN(level) || typeof level != 'number') return;
var parentDOM = null;
if (popupClassName) {
parentDOM = document.querySelector('.' + popupClassName);
}
if (parentDOM == null) return;
var parentUl = parentDOM.querySelectorAll('.ant-cascader-menu')[level];
if (parentUl == null) return;
var LiItems = parentUl.querySelectorAll('li');
var actyCls = 'multiple-cascader-menu-item-active';
LiItems.forEach(function (LiItem) {
var clsList = Array.from(LiItem.classList);
if (clsList.indexOf(actyCls) !== -1) {
clsList.splice(clsList.indexOf(actyCls), 1);
}
LiItem.className = clsList.join(' ');
});
this['timeoutIdCls' + level] = setTimeout(function () {
ary.forEach(function (_) {
var LiItem = parentUl.querySelectorAll('li')[_];
if (LiItem && !Array.from(LiItem.classList).includes(actyCls)) {
LiItem.className += ' ' + actyCls;
}
});
clearTimeout(this['timeoutIdCls' + level]);
}, 100);
}
}, {
key: "handlePopupVisibleChange",
value: function handlePopupVisibleChange(visible) {
// 当选项显示时,选中已选的选项
this.setState({
visiblePopup: visible
});
if (visible) {
var stateValues = this.state.values;
this.handleActiveOption(stateValues, this.props.options);
} else {
currentValue = [];
}
}
/**
*
* @param {string[][]} stateValues
* @param {object[]} options
*/
}, {
key: "handleActiveOption",
value: function handleActiveOption(stateValues, options) {
this.getChildActiveIndexs(options, stateValues, currentValue.length ? currentValue : this.state.cascaderValue);
}
}, {
key: "getChildIndexs",
value: function getChildIndexs(stateValues, options) {
var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
var indexs = [];
var _loop = function _loop(i) {
var value = stateValues[i][level]; // 默认查找一级
var index = options.findIndex(function (option) {
return value == option.value;
});
if (index !== -1) {
indexs.push(index);
}
};
for (var i = 0; i < stateValues.length; i++) {
_loop(i);
}
return indexs;
} // 获取已选中的索引
}, {
key: "getChildActiveIndexs",
value: function getChildActiveIndexs() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var stateValues = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var cascaderValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var _this = this;
function findActiveIndex() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var stateValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var cascaderValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
// if(stateValue.length < 1) {
// return;
// }
var _cascaderValue = _slicedToArray(cascaderValue, 3),
firstName = _cascaderValue[0],
secName = _cascaderValue[1],
thirdName = _cascaderValue[2];
var firstObj = {},
secObj = {};
var firstIdxs = [];
stateValue.forEach(function (values) {
var idx = options.findIndex(function (o) {
return o.value == values[0];
});
if (!firstIdxs.includes(idx) && idx !== -1) {
firstIdxs.push(idx);
}
if (firstName && values[0] == firstName && values[1]) {
// 找到下级的选中索引
firstObj.index = idx;
if (firstObj.children == undefined) {
firstObj.children = [];
}
firstObj.children.push(values[1]);
}
}); // 二级
var index = firstObj.index,
children = firstObj.children;
if (index !== undefined) {
options[index].children.forEach(function (o, idx) {
if (children.includes(o.value)) {
if (firstObj.childrenIndex == undefined) {
firstObj.childrenIndex = [];
}
firstObj.childrenIndex.push(idx);
}
}); // 三级
// 若点击选中当前二级,查询三级是否有已选项
var curClickSecdIdx,
curClickSecdNodes = [];
if (!thirdName && secName) {
curClickSecdIdx = options[index].children.findIndex(function (o) {
return o.value == secName;
});
curClickSecdNodes = options[index].children[curClickSecdIdx].children;
} else {
var childrenIndex = firstObj.childrenIndex;
curClickSecdNodes = options[index].children[childrenIndex[0]].children;
}
curClickSecdNodes.forEach(function (o, idx) {
stateValue.forEach(function (values) {
if (values[2] == o.value) {
if (secObj.childrenIndex == undefined) {
secObj.childrenIndex = [];
}
secObj.childrenIndex.push(idx);
}
});
});
} // 加上样式
_this.getClassActive(0, firstIdxs);
_this.getClassActive(1, firstObj.childrenIndex);
_this.getClassActive(2, secObj.childrenIndex);
return {
firstIdxs: firstIdxs,
secIdxs: firstObj.childrenIndex,
thirdIdxs: secObj.childrenIndex
};
}
cascaderValue = cascaderValue.length > 0 ? cascaderValue : stateValues.length > 0 ? stateValues[0] : []; // 根据cascaderValue的值找到下级所有被选中的索引
findActiveIndex(options, stateValues, cascaderValue);
}
}, {
key: "handleChange",
value: function handleChange(value, selectedOptions) {
var selectedLabels = [];
for (var i = 0; i < selectedOptions.length; i++) {
selectedLabels.push(selectedOptions[i].label);
}
var state = this.state,
props = this.props;
var stateValues = state.values,
labels = state.labels,
isModify = state.isModify;
var selectChange = props.selectChange;
var isMultiple = true;
var isChange = true; // 用于判断当前点击的位置
currentValue = value; // 只能三级可多选
for (var _i2 = 0; _i2 < stateValues.length; _i2++) {
var stateValue = stateValues[_i2];
if (JSON.stringify(stateValue) === JSON.stringify(value) || stateValue.length < 3) {
isMultiple = false;
isChange = !(JSON.stringify(stateValue) === JSON.stringify(value));
break;
}
}
var values = [];
if (isMultiple) {
// 一二三级禁止混合多选
if (props.selectMax && stateValues.length > props.selectMax - 1) {
typeof selectChange == 'function' && selectChange(true, false);
return;
}
if (stateValues.length && value.length < 3) {
typeof selectChange == 'function' && selectChange(false, true);
return;
}
stateValues.push(value);
labels.push(selectedLabels);
values = stateValues;
typeof selectChange == 'function' && selectChange(false, false);
this.setState({
values: values,
labels: labels,
isModify: !isModify,
cascaderValue: values[0],
inputValue: ''
});
} else {
if (isChange) {
values = [value];
this.setState({
values: values,
labels: [selectedLabels],
isModify: !isModify,
cascaderValue: value,
inputValue: ''
});
}
}
var _this$refs = this.refs,
refContentWrap = _this$refs.refContentWrap,
refContent = _this$refs.refContent,
inputObj = _this$refs.inputObj;
inputObj.focus();
var timeId = setTimeout(function () {
refContentWrap.scrollTo(refContent.clientWidth, 0);
document.querySelector('.' + props.popupClassName).querySelector('.ant-cascader-menu').removeAttribute('style');
}, 0);
this.saveTimeoutHandler(timeId);
}
}, {
key: "handleContentKeyDown",
value: function handleContentKeyDown(e) {
var keyCode = e.keyCode;
if (keyCode != 38 && keyCode != 40) {
e.stopPropagation();
}
if (keyCode == 37 || keyCode == 39 || keyCode == 8 || keyCode == 46) {
var _this$state = this.state,
count = _this$state.count,
values = _this$state.values,
labels = _this$state.labels,
isModify = _this$state.isModify;
var max = values.length;
var _this$refs2 = this.refs,
refContent = _this$refs2.refContent,
inputObj = _this$refs2.inputObj; // 37 left, 39 right
if (keyCode == 37 || keyCode == 39) {
// 更新光标位置信息
count = keyCode == 37 ? count == 0 ? 0 : count - 1 : count == max ? max : count + 1;
} else {
// 8 backspace, 46 delete
if (keyCode == 8) {
count = count - 1;
}
if (count < 0) return;
if (count < max) {
values.splice(count, 1);
labels.splice(count, 1);
isModify = !isModify;
}
e.preventDefault();
}
this.setState({
count: count,
values: values,
labels: labels,
isModify: isModify,
cascaderValue: values[0] || []
});
if (count == max || max - count == 1 && keyCode == 46) {
inputObj.focus();
} else {
var selection = getSelection();
selection.extend(refContent, count * 2);
keyCode == 8 && selection.collapseToStart();
this.getChildActiveIndexs(this.props.options, values, values[0]);
}
} else {
e.preventDefault();
}
} // 输入框change事件
}, {
key: "handleInputChange",
value: function handleInputChange(e) {
var value = e.target.value;
this.setState({
inputValue: value
});
} //
}, {
key: "handleHasInputChange",
value: function handleHasInputChange(e) {
e.stopPropagation();
var value = e.target.value;
var width = Math.ceil(getComputedStyle(this.refs.saveInputValue).width && getComputedStyle(this.refs.saveInputValue).width.split('px')[0] || 0) + 10;
this.refs.inputObj.style.width = (value != '' ? width > 15 ? width : 15 : 5) + 'px';
this.setState({
inputValue: value
});
var _this = this;
if (value) {
this.setState({
visiblePopup: true
});
var timeId = setTimeout(function () {
document.querySelector('.' + _this.props.popupClassName).querySelector('.ant-cascader-menu').style.width = _this.refs.refContentWrap.clientWidth + 'px';
}, 0);
this.saveTimeoutHandler(timeId);
} else {
document.querySelector('.' + _this.props.popupClassName).querySelector('.ant-cascader-menu').removeAttribute('style');
}
}
}, {
key: "saveTimeoutHandler",
value: function saveTimeoutHandler(timeId) {
var timeoutIds = this.state.timeoutIds;
timeoutIds.push(timeId);
this.setState({
timeoutIds: timeoutIds
});
}
}, {
key: "handleHasInputKeyDown",
value: function handleHasInputKeyDown(e) {
var keyCode = e.keyCode;
if (keyCode != 38 && keyCode != 40) {
e.stopPropagation();
}
if (keyCode == 37 || keyCode == 8) {
var _this$state2 = this.state,
count = _this$state2.count,
values = _this$state2.values,
labels = _this$state2.labels,
isModify = _this$state2.isModify;
var refContent = this.refs.refContent;
var inputObj = this.refs.inputObj;
var max = values.length;
var markPos = inputObj.selectionStart;
if (max == 0) return;
if (markPos != 0) return; // 更新光标位置信息
count = max - 1;
if (keyCode == 37) {
this.setState({
count: count
});
var selection = getSelection();
selection.extend(refContent, count * 2);
selection.collapseToStart();
e.preventDefault();
} else {
values.splice(count, 1);
labels.splice(count, 1);
this.setState({
count: count,
values: values,
labels: labels,
isModify: !isModify,
cascaderValue: values[0] || []
});
this.getChildActiveIndexs(this.props.options, values, values[0]);
}
}
}
}, {
key: "handleInputKeyDown",
value: function handleInputKeyDown(e) {
var keyCode = e.keyCode;
if (keyCode != 38 && keyCode != 40) {
e.stopPropagation();
}
}
}, {
key: "handleInputBlur",
value: function handleInputBlur(e) {
e.stopPropagation();
this.setState({
inputValue: ''
});
}
}, {
key: "defaultDisplayRender",
value: function defaultDisplayRender(label) {
return label.join(' / ');
}
}, {
key: "handleRemoveClick",
value: function handleRemoveClick(idx, e) {
e.stopPropagation();
var _this$state3 = this.state,
values = _this$state3.values,
labels = _this$state3.labels,
isModify = _this$state3.isModify;
values.splice(idx, 1);
labels.splice(idx, 1);
var cascaderValue = values.length ? values[0] : [];
this.setState({
values: values,
labels: labels,
isModify: !isModify,
cascaderValue: cascaderValue
});
this.getChildActiveIndexs(this.props.options, values, cascaderValue);
}
}, {
key: "closeIcon",
value: function closeIcon(idx) {
return React.createElement("span", {
className: "ant-multiple-icon-remove",
onClick: this.handleRemoveClick.bind(null, idx)
}, React.createElement(_icon["default"], {
type: "close"
}));
}
}, {
key: "handleContentClick",
value: function handleContentClick() {
var values = this.state.values;
var _this$refs3 = this.refs,
refContentWrap = _this$refs3.refContentWrap,
refContent = _this$refs3.refContent,
inputObj = _this$refs3.inputObj;
inputObj.focus();
refContentWrap.scrollTo(refContent.clientWidth, 0); // if(values.length) {
// var selection = getSelection()
// // 设置最后光标对象
// refContent.focus();
// selection.selectAllChildren(refContent);
// // selection.collapseToEnd();
// selection.collapseToStart();
// refContentWrap.scrollTo(0, 0);
// } else {
// inputObj.focus();
// }
}
}, {
key: "handlePlaceClick",
value: function handlePlaceClick() {
this.refs.inputObj.focus();
}
}, {
key: "PopupContainer",
value: function PopupContainer() {
return function () {
return document.getElementById('abcd');
};
}
}, {
key: "clearSelection",
value: function clearSelection(e) {
e.preventDefault();
e.stopPropagation();
var _this$state4 = this.state,
inputValue = _this$state4.inputValue,
isModify = _this$state4.isModify;
if (!inputValue) {
this.handlePopupVisibleChange(false);
} else {
this.setState({
inputValue: ''
});
document.querySelector('.' + this.props.popupClassName).querySelector('.ant-cascader-menu').removeAttribute('style');
}
this.setState({
values: [],
labels: [],
cascaderValue: [],
isModify: !isModify
});
this.getChildActiveIndexs(this.props.options, [], []);
}
}, {
key: "generateFilteredOptions",
value: function generateFilteredOptions() {
var _this4 = this,
_ref3;
var prefixCls = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'ant-cascader';
var _this$props = this.props,
_this$props$showSearc = _this$props.showSearch,
showSearch = _this$props$showSearc === void 0 ? {} : _this$props$showSearc,
notFoundContent = _this$props.notFoundContent;
var names = {
'label': 'label',
'value': 'value'
};
var _showSearch$filter = showSearch.filter,
filter = _showSearch$filter === void 0 ? defaultFilterOption : _showSearch$filter,
_showSearch$render = showSearch.render,
render = _showSearch$render === void 0 ? defaultRenderFilteredOption : _showSearch$render,
_showSearch$sort = showSearch.sort,
sort = _showSearch$sort === void 0 ? defaultSortFilteredOption : _showSearch$sort,
_showSearch$limit = showSearch.limit,
limit = _showSearch$limit === void 0 ? defaultLimit : _showSearch$limit;
var _this$state5 = this.state,
_this$state5$flattenO = _this$state5.flattenOptions,
flattenOptions = _this$state5$flattenO === void 0 ? [] : _this$state5$flattenO,
inputValue = _this$state5.inputValue; // Limit the filter if needed
var filtered;
if (limit > 0) {
filtered = [];
var matchCount = 0; // Perf optimization to filter items only below the limit
flattenOptions.some(function (path) {
var match = filter(_this4.state.inputValue, path);
if (match) {
filtered.push(path);
matchCount += 1;
}
return matchCount >= limit;
});
} else {
warning(typeof limit !== 'number', 'Cascader', "'limit' of showSearch should be positive number or false.");
filtered = flattenOptions.filter(function (path) {
return filter(_this4.state.inputValue, path, names);
});
}
filtered.sort(function (a, b) {
return sort(a, b, inputValue, names);
});
if (filtered.length > 0) {
return filtered.map(function (path) {
var _ref2;
return _ref2 = {
__IS_FILTERED_OPTION: true,
path: path
}, _defineProperty(_ref2, names.value, path.map(function (o) {
return o[names.value];
})), _defineProperty(_ref2, names.label, render(inputValue, path, prefixCls, names)), _defineProperty(_ref2, "disabled", path.some(function (o) {
return !!o.disabled;
})), _defineProperty(_ref2, "isEmptyNode", true), _ref2;
});
}
return [(_ref3 = {}, _defineProperty(_ref3, names.value, 'ANT_CASCADER_NOT_FOUND'), _defineProperty(_ref3, names.label, notFoundContent), _defineProperty(_ref3, "disabled", true), _defineProperty(_ref3, "isEmptyNode", true), _ref3)];
}
}, {
key: "render",
value: function render() {
var _this5 = this;
var props = this.props,
state = this.state;
var options = props.options;
var clearIcon = props.allowClear && !props.disabled && state.values.length > 0 || state.inputValue ? React.createElement(_icon["default"], {
className: "ant-multiple-picker-clear",
type: "close-circle",
onClick: this.clearSelection
}) : null;
var pickerCls = (0, _classnames["default"])('ant-multiple-cascader', _defineProperty({
'ant-multiple-cascader-focus': state.visiblePopup,
'ant-multiple-cascader-disabled': props.disabled
}, props.className, props.className != ''));
var getFileItem = function getFileItem() {
var labels = _this5.state.labels;
if (labels.length) {
return labels.map(function (value, idx) {
return [React.createElement("div", {
className: "ant-multiple-selected-placeholder",
key: value + 'placehodler'
}), React.createElement("div", {
className: "ant-multiple-selected",
contentEditable: "false",
suppressContentEditableWarning: "true",
key: value
}, React.createElement("span", {
className: "ant-multiple-prefix"
}), React.createElement("span", null, _this5.defaultDisplayRender(value)), React.createElement("span", {
className: "ant-multiple-suffix"
}), _this5.closeIcon(idx))];
});
}
};
var names = getFilledFieldNames(this.props);
var cascaderOptions = options;
if (cascaderOptions && cascaderOptions.length > 0) {
if (state.inputValue) {
cascaderOptions = this.generateFilteredOptions();
}
} else {
var _ref4;
cascaderOptions = [(_ref4 = {}, _defineProperty(_ref4, names.label, props.notFoundContent), _defineProperty(_ref4, names.value, 'ANT_CASCADER_NOT_FOUND'), _defineProperty(_ref4, "disabled", true), _ref4)];
}
var CascaderProps = (0, _omit["default"])(props, ['onChange', 'value', 'onPopupVisibleChange', 'options']);
var placeholder = props.placeholder || '请选择';
return React.createElement(_cascader["default"], _extends({
options: cascaderOptions,
onChange: this.handleChange,
value: state.cascaderValue,
onPopupVisibleChange: this.handlePopupVisibleChange,
popupClassName: props.popupClassName,
popupVisible: state.visiblePopup
}, CascaderProps), React.createElement("div", {
className: pickerCls
}, React.createElement("div", {
className: "ant-multiple-selected-wraper",
onClick: this.handleContentClick,
ref: "refContentWrap"
}, React.createElement("div", {
className: "ant-multiple-selected-wrap",
contentEditable: "true",
suppressContentEditableWarning: "true",
onKeyDown: this.handleContentKeyDown,
ref: "refContent"
}, getFileItem(), React.createElement("div", {
className: "ant-multiple-selected-placeholder"
})), React.createElement("div", {
className: "ant-multiple-cascader-text-wrap"
}, React.createElement("input", {
className: "ant-multiple-cascader-text",
onChange: this.handleHasInputChange,
onKeyDown: this.handleHasInputKeyDown,
value: state.inputValue,
ref: "inputObj"
}), React.createElement("div", {
ref: "saveInputValue",
className: "ant-multiple-cascader-text-save"
}, state.inputValue)), React.createElement("div", {
className: state.values.length || state.inputValue.length ? 'none ant-multiple-input-place-text' : 'ant-multiple-input-place-text',
onClick: this.handlePlaceClick
}, placeholder)), clearIcon, React.createElement(_icon["default"], {
type: "down",
className: state.visiblePopup ? 'ant-cascader-picker-arrow ant-cascader-picker-arrow-expand' : 'ant-cascader-picker-arrow'
})));
}
}]);
return MultipleCascader;
}(React.Component);
MultipleCascader.defaultProps = {
disabled: false,
allowClear: true,
popupClassName: 'myPopupClassName',
className: '',
notFoundContent: 'Not Found'
};
var _default = MultipleCascader;
exports["default"] = _default;