acud
Version:
acg react 组件库
127 lines • 5.46 kB
JavaScript
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;