UNPKG

acud

Version:

acg react 组件库

127 lines • 5.46 kB
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray"; /* * transfer 穿梭框 * author zhousheng */ import * as React from 'react'; import classnames from 'classnames'; import OutlinedClose from "acud-icon/es/icons/OutlinedClose"; import OutlinedRight from "acud-icon/es/icons/OutlinedRight"; import OutlinedDown from "acud-icon/es/icons/OutlinedDown"; import List from '../virtual-list'; import { getBodyHeight, ITEM_HEIGHT } from './util'; var TargetList = function TargetList(props) { var filterSource = props.filterSource, prefixCls = props.prefixCls, render = props.render, targetKeys = props.tKeys, setTargetKeys = props.setTKeys, _props$defaultExpandG = props.defaultExpandGroupKey, defaultExpandGroupKey = _props$defaultExpandG === void 0 ? false : _props$defaultExpandG, _props$rightStyle = props.rightStyle, rightStyle = _props$rightStyle === void 0 ? {} : _props$rightStyle, showSearch = props.showSearch, _props$virtual = props.virtual, virtual = _props$virtual === void 0 ? true : _props$virtual; var listHeight = React.useMemo(function () { return getBodyHeight(rightStyle, showSearch === true || showSearch === 'right'); }, [rightStyle, showSearch]); var cancelItem = React.useCallback(function (data) { if (data.disabled) { return; } var curTargetKeys = _toConsumableArray(targetKeys); if (data.group) { var deleteKeys = data.childrenKeys; curTargetKeys = curTargetKeys.filter(function (tKey) { return !deleteKeys.includes(tKey); }); } else if (curTargetKeys.includes(data.key)) { curTargetKeys.splice(curTargetKeys.indexOf(data.key), 1); } setTargetKeys(curTargetKeys); }, [targetKeys]); var groupKeys = React.useMemo(function () { return filterSource.filter(function (source) { return source.group; }).map(function (source) { return source.key; }); }, [filterSource]); var _React$useState = React.useState([]), _React$useState2 = _slicedToArray(_React$useState, 2), expandGroupKey = _React$useState2[0], setExpandGroupKey = _React$useState2[1]; React.useEffect(function () { var expandGroupKeys = []; if (defaultExpandGroupKey === true) { // 默认展开所有折叠项 expandGroupKeys = groupKeys; } else if (Array.isArray(defaultExpandGroupKey)) { expandGroupKeys = defaultExpandGroupKey; } else if (typeof defaultExpandGroupKey === 'string' || typeof defaultExpandGroupKey === 'number') { expandGroupKeys = [defaultExpandGroupKey]; } setExpandGroupKey(expandGroupKeys); }, [defaultExpandGroupKey, groupKeys]); var expandGroup = React.useCallback(function (e, groupKey) { if (expandGroupKey.includes(groupKey)) { setExpandGroupKey(function (keys) { keys.splice(keys.indexOf(groupKey), 1); return _toConsumableArray(keys); }); } else { setExpandGroupKey(function (keys) { keys.push(groupKey); return _toConsumableArray(keys); }); } e.stopPropagation(); }, [expandGroupKey]); var getTargetItem = React.useCallback(function (data) { var itemCls = classnames(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, "".concat(prefixCls, "-target-item"), true), "".concat(prefixCls, "-target-item-disabeld"), data.disabled), "".concat(prefixCls, "-target-item-group"), data.group), "".concat(prefixCls, "-target-item-group-option"), data.groupOption)); return /*#__PURE__*/React.createElement("div", { key: data.key, "aria-disabled": data.disabled, className: itemCls, style: { display: data.groupOption && !expandGroupKey.includes(data.groupKey) ? 'none' : '' } }, /*#__PURE__*/React.createElement("span", { className: "".concat(prefixCls, "-target-item-wrap") }, data.group && /*#__PURE__*/React.createElement("span", { className: "".concat(prefixCls, "-target-item-arrow"), onClick: function onClick(e) { return expandGroup(e, data.key); } }, expandGroupKey.includes(data.key) ? /*#__PURE__*/React.createElement(OutlinedDown, null) : /*#__PURE__*/React.createElement(OutlinedRight, null)), render ? render(data) : /*#__PURE__*/React.createElement("span", { className: "".concat(prefixCls, "-target-item-title"), title: data.title }, data.title)), !data.disabled && /*#__PURE__*/React.createElement(OutlinedClose, { className: "".concat(prefixCls, "-target-item-cancel"), onClick: function onClick() { return cancelItem(data); } })); }, [expandGroupKey, targetKeys, render]); var virtualData = React.useMemo(function () { return filterSource.filter(function (data) { return !(data.groupOption && !expandGroupKey.includes(data.groupKey)); }); }, [filterSource, expandGroupKey]); return /*#__PURE__*/React.createElement("div", { className: "".concat(prefixCls, "-target-list") }, virtual && /*#__PURE__*/React.createElement(List, { itemKey: "key", data: virtualData, height: listHeight, itemHeight: ITEM_HEIGHT }, function (data) { return getTargetItem(data); }), !virtual && filterSource.map(function (data) { return getTargetItem(data); })); }; export default TargetList;