linkmore-design
Version:
🌈 🚀lm组件库。🚀
95 lines (91 loc) • 3.37 kB
JavaScript
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _react = _interopRequireWildcard(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _virtualList = _interopRequireDefault(require("../../virtual-list"));
var _InputSearchClose = _interopRequireDefault(require("./InputSearchClose"));
var _EmptyFilter = _interopRequireDefault(require("./EmptyFilter"));
var _hooks = require("../hooks");
const SelectFilter = ({
instance,
item: itemProps
}) => {
const {
filterValue = '',
setFilterValue,
visible,
locale
} = instance;
const {
data: filters = [],
showSearch
} = itemProps;
const delayedFn = (0, _hooks.useDelayedFn)();
const inputRef = (0, _react.useRef)(null);
// 搜索后的筛选项
const [options, setOptions] = (0, _react.useState)(filters);
// 是否存在搜索, 当数据大于8时存在搜索
const isSearch = (0, _react.useMemo)(() => filters.length > 8 && !!(showSearch ?? true), [filters.length, showSearch]);
// 自定义节点字段
const fieldNames = (0, _react.useMemo)(() => ({
label: 'label',
value: 'value',
...itemProps.fieldNames
}), [itemProps.fieldNames]);
const handleFilter = (val = '') => {
const serachValues = filters.filter(v => v[fieldNames.label].indexOf(val) > -1);
setOptions(serachValues);
};
// 单选事件
const onChange = (e, obj) => {
e.preventDefault();
setFilterValue?.(obj[fieldNames.value], obj);
};
// 展开下拉时触发: 赋值 && 聚焦 && 重置显示内容
(0, _react.useEffect)(() => {
if (visible) {
delayedFn(() => inputRef.current?.focus?.({
cursor: 'all'
}));
// 若开启了 Dropdown => destroyPopupOnHide=true 无需重置操作 反之需开启
// inputRef.current?.setValue?.('');
// handleFilter('');
}
}, [visible]);
return /*#__PURE__*/_react.default.createElement("div", {
className: "filter_dropdown"
}, isSearch && /*#__PURE__*/_react.default.createElement("div", {
className: "filter_header"
}, /*#__PURE__*/_react.default.createElement(_InputSearchClose.default, {
ref: inputRef,
onSearch: handleFilter,
onChange: handleFilter
})), /*#__PURE__*/_react.default.createElement("div", {
className: "filter_body"
}, /*#__PURE__*/_react.default.createElement(_virtualList.default, {
options: options,
className: "filter_list"
}, ({
item,
...resetProps
}) => {
return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, resetProps, {
className: (0, _classnames.default)('filter_item', {
checked: item[fieldNames.value] === filterValue
}),
onClick: e => onChange(e, item)
}), /*#__PURE__*/_react.default.createElement("div", {
className: "filter_item_content"
}, item[fieldNames.label]));
}), !options.length && /*#__PURE__*/_react.default.createElement(_EmptyFilter.default, {
description: locale.empty
})));
};
var _default = SelectFilter;
exports.default = _default;
;