UNPKG

ant-design-vue

Version:

An enterprise-class UI design language and Vue-based implementation

524 lines (472 loc) 21.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.TransferProps = exports.TransferItem = void 0; var _vue = require("vue"); var _vueTypes = _interopRequireDefault(require("../_util/vue-types")); var _propsUtil = require("../_util/props-util"); var _initDefaultProps = _interopRequireDefault(require("../_util/props-util/initDefaultProps")); var _BaseMixin = _interopRequireDefault(require("../_util/BaseMixin")); var _classNames2 = _interopRequireDefault(require("../_util/classNames")); var _list = _interopRequireDefault(require("./list")); var _operation = _interopRequireDefault(require("./operation")); var _LocaleReceiver = _interopRequireDefault(require("../locale-provider/LocaleReceiver")); var _default2 = _interopRequireDefault(require("../locale-provider/default")); var _configProvider = require("../config-provider"); var _type = require("../_util/type"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } var TransferItem = { key: _vueTypes.default.string.isRequired, title: _vueTypes.default.string.isRequired, description: _vueTypes.default.string, disabled: _vueTypes.default.looseBool }; exports.TransferItem = TransferItem; var TransferProps = { prefixCls: _vueTypes.default.string, dataSource: _vueTypes.default.arrayOf(_vueTypes.default.shape(TransferItem).loose), disabled: _vueTypes.default.looseBool, targetKeys: _vueTypes.default.arrayOf(_vueTypes.default.string), selectedKeys: _vueTypes.default.arrayOf(_vueTypes.default.string), render: _vueTypes.default.func, listStyle: _vueTypes.default.oneOfType([_vueTypes.default.func, _vueTypes.default.object]), operationStyle: _vueTypes.default.object, titles: _vueTypes.default.arrayOf(_vueTypes.default.string), operations: _vueTypes.default.arrayOf(_vueTypes.default.string), showSearch: _vueTypes.default.looseBool, filterOption: _vueTypes.default.func, searchPlaceholder: _vueTypes.default.string, notFoundContent: _vueTypes.default.any, locale: _vueTypes.default.object, rowKey: _vueTypes.default.func, lazy: _vueTypes.default.oneOfType([_vueTypes.default.object, _vueTypes.default.looseBool]), showSelectAll: _vueTypes.default.looseBool, children: _vueTypes.default.any, onChange: _vueTypes.default.func, onSelectChange: _vueTypes.default.func, onSearchChange: _vueTypes.default.func, onSearch: _vueTypes.default.func, onScroll: _vueTypes.default.func }; exports.TransferProps = TransferProps; var Transfer = (0, _vue.defineComponent)({ name: 'ATransfer', mixins: [_BaseMixin.default], inheritAttrs: false, props: (0, _initDefaultProps.default)(TransferProps, { dataSource: [], locale: {}, showSearch: false, listStyle: function listStyle() {} }), setup: function setup() { return { separatedDataSource: null, configProvider: (0, _vue.inject)('configProvider', _configProvider.defaultConfigProvider) }; }, data: function data() { // vue 中 通过slot,不方便传递,保留notFoundContent及searchPlaceholder // warning( // !(getComponent(this, 'notFoundContent') || hasProp(this, 'searchPlaceholder')), // 'Transfer[notFoundContent] and Transfer[searchPlaceholder] will be removed, ' + // 'please use Transfer[locale] instead.', // ) var _this$selectedKeys = this.selectedKeys, selectedKeys = _this$selectedKeys === void 0 ? [] : _this$selectedKeys, _this$targetKeys = this.targetKeys, targetKeys = _this$targetKeys === void 0 ? [] : _this$targetKeys; return { leftFilter: '', rightFilter: '', sourceSelectedKeys: selectedKeys.filter(function (key) { return targetKeys.indexOf(key) === -1; }), targetSelectedKeys: selectedKeys.filter(function (key) { return targetKeys.indexOf(key) > -1; }) }; }, 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); }) }); } } }, mounted: function mounted() {// this.currentProps = { ...this.$props } }, 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) { // Keep old locale props still working. var oldLocale = { notFoundContent: renderEmpty('Transfer') }; var notFoundContent = (0, _propsUtil.getComponent)(this, 'notFoundContent'); if (notFoundContent) { oldLocale.notFoundContent = notFoundContent; } if ((0, _propsUtil.hasProp)(this, 'searchPlaceholder')) { oldLocale.searchPlaceholder = this.$props.searchPlaceholder; } return _extends(_extends(_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, _this$targetKeys2 = this.targetKeys, targetKeys = _this$targetKeys2 === void 0 ? [] : _this$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 _this$$props = this.$props, _this$$props$targetKe = _this$$props.targetKeys, targetKeys = _this$$props$targetKe === void 0 ? [] : _this$$props$targetKe, _this$$props$dataSour = _this$$props.dataSource, dataSource = _this$$props$dataSour === void 0 ? [] : _this$$props$dataSour; 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' ? _toConsumableArray(sourceSelectedKeys) : _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(direction, selectedItem, checked) { // warning(false, 'Transfer', '`handleSelect` will be removed, please use `onSelect` instead.'); // this.onItemSelect(direction, selectedItem.key, checked); // }, // handleLeftSelect(selectedItem, checked) { // return this.handleSelect('left', selectedItem, checked); // }, // 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 _this$$props2 = this.$props, dataSource = _this$$props2.dataSource, rowKey = _this$$props2.rowKey, _this$$props2$targetK = _this$$props2.targetKeys, targetKeys = _this$$props2$targetK === void 0 ? [] : _this$$props2$targetK; 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 props = (0, _propsUtil.getOptionProps)(this); var customizePrefixCls = props.prefixCls, disabled = props.disabled, _props$operations = props.operations, operations = _props$operations === void 0 ? [] : _props$operations, showSearch = props.showSearch, listStyle = props.listStyle, operationStyle = props.operationStyle, filterOption = props.filterOption, lazy = props.lazy, showSelectAll = props.showSelectAll; var _this$$attrs = this.$attrs, className = _this$$attrs.class, style = _this$$attrs.style; var children = (0, _propsUtil.getComponent)(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, $slots = this.$slots; var body = $slots.body, footer = $slots.footer; var renderItem = props.render || this.$slots.render; var _this$separateDataSou = this.separateDataSource(), leftDataSource = _this$separateDataSou.leftDataSource, rightDataSource = _this$separateDataSou.rightDataSource; var leftActive = targetSelectedKeys.length > 0; var rightActive = sourceSelectedKeys.length > 0; var cls = (0, _classNames2.default)(prefixCls, className, (_classNames = {}, _defineProperty(_classNames, "".concat(prefixCls, "-disabled"), disabled), _defineProperty(_classNames, "".concat(prefixCls, "-customize-list"), !!children), _classNames)); var titles = this.getTitles(locale); return (0, _vue.createVNode)("div", { "class": cls, "style": style }, [(0, _vue.createVNode)(_list.default, { "key": "leftList", "prefixCls": "".concat(prefixCls, "-list"), "titleText": titles[0], "dataSource": leftDataSource, "filterOption": filterOption, "style": this.handleListStyle(listStyle, 'left'), "checkedKeys": sourceSelectedKeys, "handleFilter": this.handleLeftFilter, "handleClear": this.handleLeftClear, "handleSelectAll": this.handleLeftSelectAll, "onItemSelect": this.onLeftItemSelect, "onItemSelectAll": this.onLeftItemSelectAll, "renderItem": renderItem, "showSearch": showSearch, "body": body, "renderList": children, "footer": footer, "lazy": lazy, "onScroll": this.handleLeftScroll, "disabled": disabled, "direction": "left", "showSelectAll": showSelectAll, "itemUnit": locale.itemUnit, "itemsUnit": locale.itemsUnit, "notFoundContent": locale.notFoundContent, "searchPlaceholder": locale.searchPlaceholder }, null), (0, _vue.createVNode)(_operation.default, { "key": "operation", "class": "".concat(prefixCls, "-operation"), "rightActive": rightActive, "rightArrowText": operations[0], "moveToRight": this.moveToRight, "leftActive": leftActive, "leftArrowText": operations[1], "moveToLeft": this.moveToLeft, "style": operationStyle, "disabled": disabled }, null), (0, _vue.createVNode)(_list.default, { "key": "rightList", "prefixCls": "".concat(prefixCls, "-list"), "titleText": titles[1], "dataSource": rightDataSource, "filterOption": filterOption, "style": this.handleListStyle(listStyle, 'right'), "checkedKeys": targetSelectedKeys, "handleFilter": this.handleRightFilter, "handleClear": this.handleRightClear, "handleSelectAll": this.handleRightSelectAll, "onItemSelect": this.onRightItemSelect, "onItemSelectAll": this.onRightItemSelectAll, "renderItem": renderItem, "showSearch": showSearch, "body": body, "renderList": children, "footer": footer, "lazy": lazy, "onScroll": this.handleRightScroll, "disabled": disabled, "direction": "right", "showSelectAll": showSelectAll, "itemUnit": locale.itemUnit, "itemsUnit": locale.itemsUnit, "notFoundContent": locale.notFoundContent, "searchPlaceholder": locale.searchPlaceholder }, null)]); } }, render: function render() { return (0, _vue.createVNode)(_LocaleReceiver.default, { "componentName": "Transfer", "defaultLocale": _default2.default.Transfer, "children": this.renderTransfer }, null); } }); var _default = (0, _type.withInstall)(Transfer); exports.default = _default;