NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/ant-design-vue/es/transfer/index.js
2023-09-14 14:47:11 +08:00

516 lines
18 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import _toConsumableArray from 'babel-runtime/helpers/toConsumableArray';
import _defineProperty from 'babel-runtime/helpers/defineProperty';
import _extends from 'babel-runtime/helpers/extends';
import PropTypes from '../_util/vue-types';
import { hasProp, initDefaultProps, getOptionProps, getComponentFromProp, getListeners } from '../_util/props-util';
import BaseMixin from '../_util/BaseMixin';
import classNames from 'classnames';
import List from './list';
import Operation from './operation';
import LocaleReceiver from '../locale-provider/LocaleReceiver';
import defaultLocale from '../locale-provider/default';
import { ConfigConsumerProps } from '../config-provider/configConsumerProps';
import warning from '../_util/warning';
import Base from '../base';
export var TransferDirection = 'left' | 'right';
export var TransferItem = {
key: PropTypes.string,
title: PropTypes.string,
description: PropTypes.string,
disabled: PropTypes.bool
};
export var TransferProps = {
prefixCls: PropTypes.string,
dataSource: PropTypes.arrayOf(PropTypes.shape(TransferItem).loose),
disabled: PropTypes.boolean,
targetKeys: PropTypes.arrayOf(PropTypes.string),
selectedKeys: PropTypes.arrayOf(PropTypes.string),
render: PropTypes.func,
listStyle: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
operationStyle: PropTypes.object,
titles: PropTypes.arrayOf(PropTypes.string),
operations: PropTypes.arrayOf(PropTypes.string),
showSearch: PropTypes.bool,
filterOption: PropTypes.func,
searchPlaceholder: PropTypes.string,
notFoundContent: PropTypes.any,
locale: PropTypes.object,
rowKey: PropTypes.func,
lazy: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),
showSelectAll: PropTypes.bool
};
export var TransferLocale = {
titles: PropTypes.arrayOf(PropTypes.string),
notFoundContent: PropTypes.string,
itemUnit: PropTypes.string,
itemsUnit: PropTypes.string
};
var Transfer = {
name: 'ATransfer',
mixins: [BaseMixin],
props: initDefaultProps(TransferProps, {
dataSource: [],
locale: {},
showSearch: false,
listStyle: function listStyle() {}
}),
inject: {
configProvider: { 'default': function _default() {
return ConfigConsumerProps;
} }
},
data: function data() {
// vue 中 通过slot不方便传递保留notFoundContent及searchPlaceholder
// warning(
// !(getComponentFromProp(this, 'notFoundContent') || hasProp(this, 'searchPlaceholder')),
// 'Transfer[notFoundContent] and Transfer[searchPlaceholder] will be removed, ' +
// 'please use Transfer[locale] instead.',
// )
var _selectedKeys = this.selectedKeys,
selectedKeys = _selectedKeys === undefined ? [] : _selectedKeys,
_targetKeys = this.targetKeys,
targetKeys = _targetKeys === undefined ? [] : _targetKeys;
return {
leftFilter: '',
rightFilter: '',
sourceSelectedKeys: selectedKeys.filter(function (key) {
return targetKeys.indexOf(key) === -1;
}),
targetSelectedKeys: selectedKeys.filter(function (key) {
return targetKeys.indexOf(key) > -1;
})
};
},
mounted: function mounted() {
// this.currentProps = { ...this.$props }
},
watch: {
targetKeys: function targetKeys() {
this.updateState();
if (this.selectedKeys) {
var targetKeys = this.targetKeys || [];
this.setState({
sourceSelectedKeys: this.selectedKeys.filter(function (key) {
return !targetKeys.includes(key);
}),
targetSelectedKeys: this.selectedKeys.filter(function (key) {
return targetKeys.includes(key);
})
});
}
},
dataSource: function dataSource() {
this.updateState();
},
selectedKeys: function selectedKeys() {
if (this.selectedKeys) {
var targetKeys = this.targetKeys || [];
this.setState({
sourceSelectedKeys: this.selectedKeys.filter(function (key) {
return !targetKeys.includes(key);
}),
targetSelectedKeys: this.selectedKeys.filter(function (key) {
return targetKeys.includes(key);
})
});
}
}
},
methods: {
getSelectedKeysName: function getSelectedKeysName(direction) {
return direction === 'left' ? 'sourceSelectedKeys' : 'targetSelectedKeys';
},
getTitles: function getTitles(transferLocale) {
if (this.titles) {
return this.titles;
}
return transferLocale.titles || ['', ''];
},
getLocale: function getLocale(transferLocale, renderEmpty) {
var h = this.$createElement;
// Keep old locale props still working.
var oldLocale = {
notFoundContent: renderEmpty(h, 'Transfer')
};
var notFoundContent = getComponentFromProp(this, 'notFoundContent');
if (notFoundContent) {
oldLocale.notFoundContent = notFoundContent;
}
if (hasProp(this, 'searchPlaceholder')) {
oldLocale.searchPlaceholder = this.$props.searchPlaceholder;
}
return _extends({}, transferLocale, oldLocale, this.$props.locale);
},
updateState: function updateState() {
var sourceSelectedKeys = this.sourceSelectedKeys,
targetSelectedKeys = this.targetSelectedKeys;
this.separatedDataSource = null;
if (!this.selectedKeys) {
// clear key nolonger existed
// clear checkedKeys according to targetKeys
var dataSource = this.dataSource,
_targetKeys2 = this.targetKeys,
targetKeys = _targetKeys2 === undefined ? [] : _targetKeys2;
var newSourceSelectedKeys = [];
var newTargetSelectedKeys = [];
dataSource.forEach(function (_ref) {
var key = _ref.key;
if (sourceSelectedKeys.includes(key) && !targetKeys.includes(key)) {
newSourceSelectedKeys.push(key);
}
if (targetSelectedKeys.includes(key) && targetKeys.includes(key)) {
newTargetSelectedKeys.push(key);
}
});
this.setState({
sourceSelectedKeys: newSourceSelectedKeys,
targetSelectedKeys: newTargetSelectedKeys
});
}
},
moveTo: function moveTo(direction) {
var _$props = this.$props,
_$props$targetKeys = _$props.targetKeys,
targetKeys = _$props$targetKeys === undefined ? [] : _$props$targetKeys,
_$props$dataSource = _$props.dataSource,
dataSource = _$props$dataSource === undefined ? [] : _$props$dataSource;
var sourceSelectedKeys = this.sourceSelectedKeys,
targetSelectedKeys = this.targetSelectedKeys;
var moveKeys = direction === 'right' ? sourceSelectedKeys : targetSelectedKeys;
// filter the disabled options
var newMoveKeys = moveKeys.filter(function (key) {
return !dataSource.some(function (data) {
return !!(key === data.key && data.disabled);
});
});
// move items to target box
var newTargetKeys = direction === 'right' ? newMoveKeys.concat(targetKeys) : targetKeys.filter(function (targetKey) {
return newMoveKeys.indexOf(targetKey) === -1;
});
// empty checked keys
var oppositeDirection = direction === 'right' ? 'left' : 'right';
this.setState(_defineProperty({}, this.getSelectedKeysName(oppositeDirection), []));
this.handleSelectChange(oppositeDirection, []);
this.$emit('change', newTargetKeys, direction, newMoveKeys);
},
moveToLeft: function moveToLeft() {
this.moveTo('left');
},
moveToRight: function moveToRight() {
this.moveTo('right');
},
onItemSelectAll: function onItemSelectAll(direction, selectedKeys, checkAll) {
var originalSelectedKeys = this.$data[this.getSelectedKeysName(direction)] || [];
var mergedCheckedKeys = [];
if (checkAll) {
// Merge current keys with origin key
mergedCheckedKeys = Array.from(new Set([].concat(_toConsumableArray(originalSelectedKeys), _toConsumableArray(selectedKeys))));
} else {
// Remove current keys from origin keys
mergedCheckedKeys = originalSelectedKeys.filter(function (key) {
return selectedKeys.indexOf(key) === -1;
});
}
this.handleSelectChange(direction, mergedCheckedKeys);
if (!this.$props.selectedKeys) {
this.setState(_defineProperty({}, this.getSelectedKeysName(direction), mergedCheckedKeys));
}
},
handleSelectAll: function handleSelectAll(direction, filteredDataSource, checkAll) {
this.onItemSelectAll(direction, filteredDataSource.map(function (_ref2) {
var key = _ref2.key;
return key;
}), !checkAll);
},
// [Legacy] Old prop `body` pass origin check as arg. It's confusing.
// TODO: Remove this in next version.
handleLeftSelectAll: function handleLeftSelectAll(filteredDataSource, checkAll) {
return this.handleSelectAll('left', filteredDataSource, !checkAll);
},
handleRightSelectAll: function handleRightSelectAll(filteredDataSource, checkAll) {
return this.handleSelectAll('right', filteredDataSource, !checkAll);
},
onLeftItemSelectAll: function onLeftItemSelectAll(selectedKeys, checkAll) {
return this.onItemSelectAll('left', selectedKeys, checkAll);
},
onRightItemSelectAll: function onRightItemSelectAll(selectedKeys, checkAll) {
return this.onItemSelectAll('right', selectedKeys, checkAll);
},
handleFilter: function handleFilter(direction, e) {
var value = e.target.value;
if (getListeners(this).searchChange) {
warning(false, 'Transfer', '`searchChange` in Transfer is deprecated. Please use `search` instead.');
this.$emit('searchChange', direction, e);
}
this.$emit('search', direction, value);
},
handleLeftFilter: function handleLeftFilter(e) {
this.handleFilter('left', e);
},
handleRightFilter: function handleRightFilter(e) {
this.handleFilter('right', e);
},
handleClear: function handleClear(direction) {
this.$emit('search', direction, '');
},
handleLeftClear: function handleLeftClear() {
this.handleClear('left');
},
handleRightClear: function handleRightClear() {
this.handleClear('right');
},
onItemSelect: function onItemSelect(direction, selectedKey, checked) {
var sourceSelectedKeys = this.sourceSelectedKeys,
targetSelectedKeys = this.targetSelectedKeys;
var holder = direction === 'left' ? [].concat(_toConsumableArray(sourceSelectedKeys)) : [].concat(_toConsumableArray(targetSelectedKeys));
var index = holder.indexOf(selectedKey);
if (index > -1) {
holder.splice(index, 1);
}
if (checked) {
holder.push(selectedKey);
}
this.handleSelectChange(direction, holder);
if (!this.selectedKeys) {
this.setState(_defineProperty({}, this.getSelectedKeysName(direction), holder));
}
},
handleSelect: function handleSelect(direction, selectedItem, checked) {
warning(false, 'Transfer', '`handleSelect` will be removed, please use `onSelect` instead.');
this.onItemSelect(direction, selectedItem.key, checked);
},
handleLeftSelect: function handleLeftSelect(selectedItem, checked) {
return this.handleSelect('left', selectedItem, checked);
},
handleRightSelect: function handleRightSelect(selectedItem, checked) {
return this.handleSelect('right', selectedItem, checked);
},
onLeftItemSelect: function onLeftItemSelect(selectedKey, checked) {
return this.onItemSelect('left', selectedKey, checked);
},
onRightItemSelect: function onRightItemSelect(selectedKey, checked) {
return this.onItemSelect('right', selectedKey, checked);
},
handleScroll: function handleScroll(direction, e) {
this.$emit('scroll', direction, e);
},
handleLeftScroll: function handleLeftScroll(e) {
this.handleScroll('left', e);
},
handleRightScroll: function handleRightScroll(e) {
this.handleScroll('right', e);
},
handleSelectChange: function handleSelectChange(direction, holder) {
var sourceSelectedKeys = this.sourceSelectedKeys,
targetSelectedKeys = this.targetSelectedKeys;
if (direction === 'left') {
this.$emit('selectChange', holder, targetSelectedKeys);
} else {
this.$emit('selectChange', sourceSelectedKeys, holder);
}
},
handleListStyle: function handleListStyle(listStyle, direction) {
if (typeof listStyle === 'function') {
return listStyle({ direction: direction });
}
return listStyle;
},
separateDataSource: function separateDataSource() {
var _$props2 = this.$props,
dataSource = _$props2.dataSource,
rowKey = _$props2.rowKey,
_$props2$targetKeys = _$props2.targetKeys,
targetKeys = _$props2$targetKeys === undefined ? [] : _$props2$targetKeys;
var leftDataSource = [];
var rightDataSource = new Array(targetKeys.length);
dataSource.forEach(function (record) {
if (rowKey) {
record.key = rowKey(record);
}
// rightDataSource should be ordered by targetKeys
// leftDataSource should be ordered by dataSource
var indexOfKey = targetKeys.indexOf(record.key);
if (indexOfKey !== -1) {
rightDataSource[indexOfKey] = record;
} else {
leftDataSource.push(record);
}
});
return {
leftDataSource: leftDataSource,
rightDataSource: rightDataSource
};
},
renderTransfer: function renderTransfer(transferLocale) {
var _classNames;
var h = this.$createElement;
var props = getOptionProps(this);
var customizePrefixCls = props.prefixCls,
disabled = props.disabled,
_props$operations = props.operations,
operations = _props$operations === undefined ? [] : _props$operations,
showSearch = props.showSearch,
listStyle = props.listStyle,
operationStyle = props.operationStyle,
filterOption = props.filterOption,
lazy = props.lazy,
showSelectAll = props.showSelectAll;
var children = getComponentFromProp(this, 'children', {}, false);
var getPrefixCls = this.configProvider.getPrefixCls;
var prefixCls = getPrefixCls('transfer', customizePrefixCls);
var renderEmpty = this.configProvider.renderEmpty;
var locale = this.getLocale(transferLocale, renderEmpty);
var sourceSelectedKeys = this.sourceSelectedKeys,
targetSelectedKeys = this.targetSelectedKeys,
$scopedSlots = this.$scopedSlots;
var body = $scopedSlots.body,
footer = $scopedSlots.footer;
var renderItem = props.render;
var _separateDataSource = this.separateDataSource(),
leftDataSource = _separateDataSource.leftDataSource,
rightDataSource = _separateDataSource.rightDataSource;
var leftActive = targetSelectedKeys.length > 0;
var rightActive = sourceSelectedKeys.length > 0;
var cls = classNames(prefixCls, (_classNames = {}, _defineProperty(_classNames, prefixCls + '-disabled', disabled), _defineProperty(_classNames, prefixCls + '-customize-list', !!children), _classNames));
var titles = this.getTitles(locale);
return h(
'div',
{ 'class': cls },
[h(List, {
key: 'leftList',
attrs: { prefixCls: prefixCls + '-list',
titleText: titles[0],
dataSource: leftDataSource,
filterOption: filterOption,
checkedKeys: sourceSelectedKeys,
handleFilter: this.handleLeftFilter,
handleClear: this.handleLeftClear,
handleSelect: this.handleLeftSelect,
handleSelectAll: this.handleLeftSelectAll,
renderItem: renderItem,
showSearch: showSearch,
body: body,
renderList: children,
footer: footer,
lazy: lazy,
disabled: disabled,
direction: 'left',
showSelectAll: showSelectAll,
itemUnit: locale.itemUnit,
itemsUnit: locale.itemsUnit,
notFoundContent: locale.notFoundContent,
searchPlaceholder: locale.searchPlaceholder
},
style: this.handleListStyle(listStyle, 'left'), on: {
'itemSelect': this.onLeftItemSelect,
'itemSelectAll': this.onLeftItemSelectAll,
'scroll': this.handleLeftScroll
}
}), h(Operation, {
key: 'operation',
'class': prefixCls + '-operation',
attrs: { rightActive: rightActive,
rightArrowText: operations[0],
moveToRight: this.moveToRight,
leftActive: leftActive,
leftArrowText: operations[1],
moveToLeft: this.moveToLeft,
disabled: disabled
},
style: operationStyle }), h(List, {
key: 'rightList',
attrs: { prefixCls: prefixCls + '-list',
titleText: titles[1],
dataSource: rightDataSource,
filterOption: filterOption,
checkedKeys: targetSelectedKeys,
handleFilter: this.handleRightFilter,
handleClear: this.handleRightClear,
handleSelect: this.handleRightSelect,
handleSelectAll: this.handleRightSelectAll,
renderItem: renderItem,
showSearch: showSearch,
body: body,
renderList: children,
footer: footer,
lazy: lazy,
disabled: disabled,
direction: 'right',
showSelectAll: showSelectAll,
itemUnit: locale.itemUnit,
itemsUnit: locale.itemsUnit,
notFoundContent: locale.notFoundContent,
searchPlaceholder: locale.searchPlaceholder
},
style: this.handleListStyle(listStyle, 'right'), on: {
'itemSelect': this.onRightItemSelect,
'itemSelectAll': this.onRightItemSelectAll,
'scroll': this.handleRightScroll
}
})]
);
}
},
render: function render() {
var h = arguments[0];
return h(LocaleReceiver, {
attrs: {
componentName: 'Transfer',
defaultLocale: defaultLocale.Transfer
},
scopedSlots: { 'default': this.renderTransfer }
});
}
};
/* istanbul ignore next */
Transfer.install = function (Vue) {
Vue.use(Base);
Vue.component(Transfer.name, Transfer);
};
export default Transfer;