acud
Version:
acg react 组件库
175 lines (173 loc) • 8.09 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var React = _interopRequireWildcard(require("react"));
var _classnames2 = _interopRequireDefault(require("classnames"));
var _OutlinedRight = _interopRequireDefault(require("acud-icon/lib/icons/OutlinedRight"));
var _OutlinedDown = _interopRequireDefault(require("acud-icon/lib/icons/OutlinedDown"));
var _virtualList = _interopRequireDefault(require("../virtual-list"));
var _checkbox = _interopRequireDefault(require("../checkbox"));
var _util = require("./util");
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
/*
* transfer 穿梭框
* author zhousheng
*/
var SourceList = function SourceList(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,
showSearch = props.showSearch,
_props$leftStyle = props.leftStyle,
leftStyle = _props$leftStyle === void 0 ? {} : _props$leftStyle,
_props$virtual = props.virtual,
virtual = _props$virtual === void 0 ? true : _props$virtual,
onSourceExpandChange = props.onSourceExpandChange;
var listHeight = React.useMemo(function () {
return (0, _util.getBodyHeight)(leftStyle, showSearch === true || showSearch === 'left');
}, [leftStyle, showSearch]);
var itemToggle = React.useCallback(function (data) {
if (data.disabled) {
return;
}
var newTargetKeys = (0, _toConsumableArray2["default"])(targetKeys);
if (data.group) {
// const groupKeys = data.childrenKeys;
var undisabledKeys = data.children.filter(function (child) {
return !child.disabled;
}).map(function (child) {
return child.key;
});
var checkedKeys = undisabledKeys.filter(function (key) {
return targetKeys.includes(key);
});
if (undisabledKeys.length === checkedKeys.length) {
newTargetKeys = newTargetKeys.filter(function (tKey) {
return !undisabledKeys.includes(tKey);
});
} else {
newTargetKeys = (0, _toConsumableArray2["default"])(new Set([].concat((0, _toConsumableArray2["default"])(newTargetKeys), (0, _toConsumableArray2["default"])(undisabledKeys))));
}
} else if (targetKeys.includes(data.key)) {
newTargetKeys.splice(targetKeys.indexOf(data.key), 1);
} else {
newTargetKeys.push(data.key);
}
setTargetKeys(newTargetKeys);
}, [targetKeys]);
var groupKeys = filterSource.filter(function (source) {
return source.group;
}).map(function (source) {
return source.key;
});
var expandGroupKeys = [];
if (defaultExpandGroupKey === true) {
// 默认展开所有折叠项
expandGroupKeys = groupKeys;
} else if (Array.isArray(defaultExpandGroupKey)) {
expandGroupKeys = defaultExpandGroupKey;
} else if (typeof defaultExpandGroupKey === 'string' || typeof defaultExpandGroupKey === 'number') {
expandGroupKeys = [defaultExpandGroupKey];
}
var _React$useState = React.useState(expandGroupKeys),
_React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
expandGroupKey = _React$useState2[0],
setExpandGroupKey = _React$useState2[1];
var expandGroup = React.useCallback(function (e, groupKey) {
var isOpen = false;
if (expandGroupKey.includes(groupKey)) {
setExpandGroupKey(function (keys) {
keys.splice(keys.indexOf(groupKey), 1);
return (0, _toConsumableArray2["default"])(keys);
});
isOpen = false;
} else {
setExpandGroupKey(function (keys) {
keys.push(groupKey);
return (0, _toConsumableArray2["default"])(keys);
});
isOpen = true;
}
onSourceExpandChange && onSourceExpandChange(groupKey, isOpen);
e.stopPropagation();
}, [expandGroupKey]);
var getSourceItem = React.useCallback(function (data) {
var checked = targetKeys.includes(data.key);
var indeterminate = false;
if (data.group) {
var undisabledKeys = data.children.filter(function (child) {
return !child.disabled;
}).map(function (child) {
return child.key;
});
var checkedKeys = undisabledKeys.filter(function (key) {
return targetKeys.includes(key);
});
if (undisabledKeys.length === checkedKeys.length) {
checked = true;
indeterminate = false;
} else if (checkedKeys.length) {
indeterminate = true;
checked = false;
} else {
checked = false;
indeterminate = false;
}
}
var itemCls = (0, _classnames2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, "".concat(prefixCls, "-datasource-item"), true), "".concat(prefixCls, "-datasource-item-disabeld"), data.disabled), "".concat(prefixCls, "-datasource-item-group"), data.group), "".concat(prefixCls, "-datasource-item-group-option"), data.groupOption));
return /*#__PURE__*/React.createElement("div", {
key: data.key,
"aria-disabled": data.disabled,
className: itemCls,
onClick: function onClick() {
return itemToggle(data);
},
style: {
display: data.groupOption && !expandGroupKey.includes(data.groupKey) ? 'none' : ''
}
}, data.group && /*#__PURE__*/React.createElement("span", {
className: "".concat(prefixCls, "-datasource-item-arrow"),
onClick: function onClick(e) {
return expandGroup(e, data.key);
}
}, expandGroupKey.includes(data.key) ? /*#__PURE__*/React.createElement(_OutlinedDown["default"], null) : /*#__PURE__*/React.createElement(_OutlinedRight["default"], null)), /*#__PURE__*/React.createElement(_checkbox["default"], {
className: "".concat(prefixCls, "-datasource-item-checkbox"),
checked: checked,
disabled: data.disabled,
indeterminate: indeterminate
}), render ? render(data) : /*#__PURE__*/React.createElement("span", {
className: "".concat(prefixCls, "-datasource-item-title"),
title: data.title
}, data.title));
}, [targetKeys, expandGroupKey, 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, "-datasource-list")
}, virtual && /*#__PURE__*/React.createElement(_virtualList["default"], {
itemKey: "key",
data: virtualData,
height: listHeight,
fullHeight: false,
itemHeight: _util.ITEM_HEIGHT
}, function (data) {
return getSourceItem(data);
}), !virtual && filterSource.map(function (data) {
return getSourceItem(data);
}));
};
var _default = exports["default"] = SourceList;