UNPKG

acud

Version:

acg react 组件库

164 lines • 6.82 kB
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray"; import _extends from "@babel/runtime/helpers/esm/extends"; import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; /* * transfer 穿梭框 * author zhousheng */ import * as React from 'react'; import classnames from 'classnames'; import { ConfigContext } from '../config-provider'; import { useLocaleReceiver } from '../locale-provider/LocaleReceiver'; import DataSource from './DataSource'; import Target from './Target'; var Transfer = function Transfer(props) { var customizePrefixCls = props.prefixCls, className = props.className, _props$displayType = props.displayType, displayType = _props$displayType === void 0 ? 'single' : _props$displayType, targetKeys = props.targetKeys, onChange = props.onChange, _props$locale = props.locale, locale = _props$locale === void 0 ? {} : _props$locale, dataSource = props.dataSource, columns = props.columns, leftColumns = props.leftColumns, rightColumns = props.rightColumns, leftPagination = props.leftPagination, rightPagination = props.rightPagination, targetDataSelf = props.targetDataSelf, _props$targetData = props.targetData, outTargetData = _props$targetData === void 0 ? [] : _props$targetData, onTargetDataChange = props.onTargetDataChange, dataSourceCustom = props.dataSourceCustom, labelRender = props.labelRender; var _useLocaleReceiver = useLocaleReceiver('Transfer'), _useLocaleReceiver2 = _slicedToArray(_useLocaleReceiver, 1), transferLocale = _useLocaleReceiver2[0]; var userLocale = _extends(_extends({}, transferLocale), locale); var _React$useState = React.useState(false), _React$useState2 = _slicedToArray(_React$useState, 2), loading = _React$useState2[0], setLoading = _React$useState2[1]; var _React$useState3 = React.useState(targetKeys || []), _React$useState4 = _slicedToArray(_React$useState3, 2), tKeys = _React$useState4[0], setTKeys = _React$useState4[1]; var mergedKeys = 'targetKeys' in props ? targetKeys : tKeys; // targetData var _React$useState5 = React.useState(outTargetData), _React$useState6 = _slicedToArray(_React$useState5, 2), targetData = _React$useState6[0], setTargetData = _React$useState6[1]; var mergedTargetData = 'targetData' in props ? outTargetData : targetData; // table左右两侧columns 配置 var innerLeftColumns = leftColumns || columns; var innerRightColumns = rightColumns || columns; // table左右两侧pagination 配置 var innerLeftPagination = leftPagination; var innerRightPagination = rightPagination; // 是否是初始化执行 var isInit = React.useRef(true); // 二级数据展开成一级数据 var expansionSource = React.useMemo(function () { var expansionArr = []; dataSource.forEach(function (data) { if (!data.children || !data.children.length) { expansionArr.push(data); return; } var childrenKeys = []; expansionArr.push(_extends(_extends({}, data), { childrenKeys: childrenKeys, group: true, disabled: data.disabled || data.children.every(function (child) { return child.disabled; }) })); data.children.forEach(function (child) { expansionArr.push(_extends(_extends({}, child), { groupKey: data.key, groupOption: true, disabled: data.disabled || child.disabled })); childrenKeys.push(child.key); }); }); return expansionArr; }, [dataSource]); React.useEffect(function () { if (isInit.current) { isInit.current = false; // 初始化不触发onChange return; } changeTargetData(tKeys); onChange && onChange(tKeys); }, [tKeys]); var changeTargetData = React.useCallback(function (tKeys) { // 如果左右数据分离,需要遍历key,从左侧数据找到完整的data if (targetDataSelf && displayType === 'table') { // 如果tKeys为空,说明清空了已选项,需要清空targetData // 不直接赋予空值的话一次性清空右侧数据时,targetData会剩一半数据 var tempTargetData = (tKeys === null || tKeys === void 0 ? void 0 : tKeys.length) === 0 ? [] : _toConsumableArray(mergedTargetData); tKeys.forEach(function (tk) { var sourceItem = expansionSource.find(function (s) { return s.key === tk; }); if (sourceItem) { // 还需要看当前targetdata里存不存在 var targetItem = mergedTargetData.find(function (td) { return td.key === tk; }); if (!targetItem) { tempTargetData.push(sourceItem); } } }); // 移除tempTargetData中不存在于tKeys的数据 tempTargetData.forEach(function (td) { if (!tKeys.includes(td.key)) { var index = tempTargetData.findIndex(function (t) { return t.key === td.key; }); index !== -1 && tempTargetData.splice(index, 1); } }); setTargetData(tempTargetData); onTargetDataChange === null || onTargetDataChange === void 0 ? void 0 : onTargetDataChange(tempTargetData); } }, [targetDataSelf, displayType, expansionSource, mergedTargetData]); var _React$useContext = React.useContext(ConfigContext), getPrefixCls = _React$useContext.getPrefixCls; var prefixCls = getPrefixCls('transfer', customizePrefixCls); var classNames = classnames(_defineProperty(_defineProperty(_defineProperty({}, prefixCls, true), className, className), "".concat(prefixCls, "-table"), displayType === 'table')); var rightExpansionSource = targetDataSelf && displayType === 'table' ? mergedTargetData : expansionSource; return /*#__PURE__*/React.createElement("div", { className: classNames }, /*#__PURE__*/React.createElement(DataSource, _extends({}, props, { displayType: displayType, locale: userLocale, prefixCls: prefixCls, tKeys: mergedKeys, setTKeys: setTKeys, loading: loading, setLoading: setLoading, expansionSource: expansionSource, columns: innerLeftColumns, pagination: innerLeftPagination, labelRender: labelRender })), /*#__PURE__*/React.createElement(Target, _extends({}, props, { displayType: displayType, locale: userLocale, prefixCls: prefixCls, tKeys: mergedKeys, setTKeys: setTKeys, loading: loading, setLoading: setLoading, expansionSource: typeof dataSourceCustom === 'function' ? dataSourceCustom(rightExpansionSource) : rightExpansionSource, columns: innerRightColumns, pagination: innerRightPagination }))); }; export default Transfer;