diff --git a/CHANGELOG.md b/CHANGELOG.md index d66587e..27b408b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,19 @@ + +## [2.0.17](https://github.com/tinper-bee/bee-transfer/compare/v2.0.16...v2.0.17) (2020-09-09) + + + + +## [2.0.16](https://github.com/tinper-bee/bee-transfer/compare/v2.0.15...v2.0.16) (2020-09-09) + + +### Bug Fixes + +* enable to drag multiple items ([05c6abb](https://github.com/tinper-bee/bee-transfer/commit/05c6abb)) +* 自动化 ([d2143aa](https://github.com/tinper-bee/bee-transfer/commit/d2143aa)) + + + ## [2.0.13](https://github.com/tinper-bee/bee-transfer/compare/v2.0.12...v2.0.13) (2020-04-14) diff --git a/build/Transfer.css b/build/Transfer.css index 8982fb9..df7a87f 100644 --- a/build/Transfer.css +++ b/build/Transfer.css @@ -74,7 +74,8 @@ .u-transfer-list-content.delbtn-backdrop.uf-del { color: #fff; } .u-transfer-list-content-item { - overflow: hidden; + position: relative; + overflow: visible; white-space: nowrap; text-overflow: ellipsis; padding: 7px 15px; @@ -83,6 +84,18 @@ color: #212121; } .u-transfer-list-content-item .u-checkbox { margin-right: 0; } + .u-transfer-list-content-item .multi-drag-count { + position: absolute; + right: -11px; + top: -8px; + z-index: 999; + width: 26px; + height: 26px; + line-height: 26px; + border-radius: 99px; + text-align: center; + background: #FFD700; + color: #999; } .u-transfer-list-content-item:not(.u-transfer-list-content-item-disabled):hover { cursor: pointer; background-color: rgb(235, 236, 240); } diff --git a/build/Transfer.js b/build/Transfer.js index c5b666a..5628942 100644 --- a/build/Transfer.js +++ b/build/Transfer.js @@ -115,7 +115,8 @@ var Transfer = function (_React$Component) { }), leftDataSource: [], rightDataSource: [], - droppableId: '' + droppableId: '', + draggingItemId: '' }; _this.cacheTargetKeys = [].concat(_toConsumableArray(targetKeys)); return _this; @@ -245,19 +246,17 @@ var Transfer = function (_React$Component) { var targetKeys = newTargetKeys || this.props.targetKeys; //异步加载数据源时/移除已选时 var sourceDataSource = this.props.dataSource; - newDataSource = this.addUniqueKey(newDataSource); sourceDataSource = this.addUniqueKey(sourceDataSource); - var leftDataSource = sourceDataSource.filter(function (_ref3) { var key = _ref3.key; return targetKeys.indexOf(key) === -1; }); - var rightDataSource = newDataSource.filter(function (_ref4) { - var key = _ref4.key; - return targetKeys.indexOf(key) > -1; + var rightDataSource = targetKeys.map(function (key) { + return newDataSource.find(function (data) { + return data.key === key; + }); }); - this.splitedDataSource = { leftDataSource: leftDataSource, rightDataSource: rightDataSource @@ -362,7 +361,8 @@ var Transfer = function (_React$Component) { targetSelectedKeys = _state3.targetSelectedKeys, leftDataSource = _state3.leftDataSource, rightDataSource = _state3.rightDataSource, - droppableId = _state3.droppableId; + droppableId = _state3.droppableId, + draggingItemId = _state3.draggingItemId; // const { leftDataSource, rightDataSource } = this.splitDataSource(this.props); @@ -400,7 +400,8 @@ var Transfer = function (_React$Component) { showCheckbox: showCheckbox, draggable: draggable, id: '1', - droppableId: droppableId + droppableId: droppableId, + draggingItemId: draggingItemId }), !draggable ? _react2["default"].createElement(_operation2["default"], { rightActive: rightActive, @@ -456,7 +457,7 @@ var _initialiseProps = function _initialiseProps() { return dataSource; }; - this.moveTo = function (direction) { + this.moveTo = function (direction, insertIndex) { var _props2 = _this3.props, _props2$targetKeys = _props2.targetKeys, targetKeys = _props2$targetKeys === undefined ? [] : _props2$targetKeys, @@ -470,7 +471,16 @@ var _initialiseProps = function _initialiseProps() { droppableId = _state4.droppableId; var moveKeys = direction === 'right' ? sourceSelectedKeys : targetSelectedKeys; - var temp = appendToBottom ? targetKeys.concat(moveKeys) : moveKeys.concat(targetKeys); + // let temp = appendToBottom ? targetKeys.concat(moveKeys) : moveKeys.concat(targetKeys); // 在这里 + var temp = []; + if (appendToBottom) { + temp = targetKeys.concat(moveKeys); + } else if (insertIndex) { + targetKeys.splice.apply(targetKeys, [insertIndex, 0].concat(_toConsumableArray(moveKeys))); + temp = targetKeys; + } else { + temp = moveKeys.concat(targetKeys); + } // move items to target box var newTargetKeys = direction === 'right' ? temp : targetKeys.filter(function (targetKey) { return moveKeys.indexOf(targetKey) === -1; @@ -493,8 +503,8 @@ var _initialiseProps = function _initialiseProps() { return _this3.moveTo('left'); }; - this.moveToRight = function () { - return _this3.moveTo('right'); + this.moveToRight = function (insertIndex) { + return _this3.moveTo('right', insertIndex); }; this.handleSelectAll = function (direction, filteredDataSource, checkAll) { @@ -589,6 +599,9 @@ var _initialiseProps = function _initialiseProps() { }; this.onDragEnd = function (result) { + _this3.setState({ + draggingItemId: '' + }); var source = result.source, destination = result.destination, draggableId = result.draggableId; @@ -626,8 +639,13 @@ var _initialiseProps = function _initialiseProps() { } } else { // case5:从左往右拖拽(添加已选) - var _result = (0, _utils.move)(_this3.getList(source.droppableId), _this3.getList(destination.droppableId), source, destination, targetKeys); + if (_this3.state.sourceSelectedKeys.length > 1) { + return _this3.moveToRight(destination.index); + } + var _result = (0, _utils.move)( // 一次移动的方法 + _this3.getList(source.droppableId), _this3.getList(destination.droppableId), source, destination, targetKeys); if (onChange) { + // onChange事件 onChange(_result.newTargetKeys, "", draggableId); } _this3.setState({ @@ -652,7 +670,8 @@ var _initialiseProps = function _initialiseProps() { _this3.handleRightSelect(selectedItem); } _this3.setState({ - droppableId: source.droppableId + droppableId: source.droppableId, + draggingItemId: result.draggableId }); }; }; diff --git a/build/item.js b/build/item.js index 3f67a5d..6a254b7 100644 --- a/build/item.js +++ b/build/item.js @@ -82,9 +82,13 @@ var Item = function (_React$Component) { onClick = _props.onClick, renderedText = _props.renderedText, renderedEl = _props.renderedEl, - showCheckbox = _props.showCheckbox; + showCheckbox = _props.showCheckbox, + checkedKeys = _props.checkedKeys, + isMultiDragSource = _props.isMultiDragSource, + draggingItemId = _props.draggingItemId; - var className = (0, _classnames2["default"])((_classNames = {}, _defineProperty(_classNames, prefixCls + '-content-item', true), _defineProperty(_classNames, prefixCls + '-content-item-disabled', item.disabled), _defineProperty(_classNames, prefixCls + '-content-item-selected', checked), _classNames)); + var isAttachedDraggingItem = checked && !isMultiDragSource && draggingItemId; + var className = (0, _classnames2["default"])((_classNames = {}, _defineProperty(_classNames, prefixCls + '-content-item', true), _defineProperty(_classNames, prefixCls + '-content-item-disabled', item.disabled || isAttachedDraggingItem), _defineProperty(_classNames, prefixCls + '-content-item-selected', checked && !isAttachedDraggingItem), _classNames)); var lazyProps = (0, _objectAssign2["default"])({ height: 32, @@ -97,7 +101,6 @@ var Item = function (_React$Component) { if (lazy && lazy.container == "modal") { lazyFlag = false; } - if (!lazyFlag) { return _react2["default"].createElement( 'li', @@ -130,13 +133,22 @@ var Item = function (_React$Component) { return onClick(item); } }, - showCheckbox ? _react2["default"].createElement(_beeCheckbox2["default"], { checked: checked, disabled: item.disabled, onClick: item.disabled ? undefined : function () { + showCheckbox ? _react2["default"].createElement(_beeCheckbox2["default"], { + checked: checked && !isAttachedDraggingItem, + disabled: item.disabled || isAttachedDraggingItem, + onClick: item.disabled ? undefined : function () { return onClick(item); - } }) : '', + } + }) : '', _react2["default"].createElement( 'span', null, renderedEl + ), + isMultiDragSource && checkedKeys.length > 1 && _react2["default"].createElement( + 'span', + { className: 'multi-drag-count' }, + checkedKeys.length ) ) ); diff --git a/build/list.js b/build/list.js index d645a92..3e272a1 100644 --- a/build/list.js +++ b/build/list.js @@ -250,7 +250,8 @@ var TransferList = function (_React$Component) { id = _props.id, showCheckbox = _props.showCheckbox, draggable = _props.draggable, - droppableId = _props.droppableId; + droppableId = _props.droppableId, + draggingItemId = _props.draggingItemId; var _props2 = this.props, searchPlaceholder = _props2.searchPlaceholder, notFoundContent = _props2.notFoundContent; @@ -313,9 +314,12 @@ var TransferList = function (_React$Component) { filter: filter, filterOption: filterOption, checked: checked, + checkedKeys: checkedKeys, prefixCls: prefixCls, onClick: _this4.handleSelect, - showCheckbox: showCheckbox + showCheckbox: showCheckbox, + isMultiDragSource: draggingItemId === item.key, + draggingItemId: draggingItemId }) ); } diff --git a/package.json b/package.json index 99814a7..00b2622 100644 --- a/package.json +++ b/package.json @@ -1,76 +1,76 @@ { - "name": "bee-transfer", - "version": "2.0.14", - "description": "Transfer ui component for react", - "keywords": [ - "react", - "react-component", - "bee-transfer", - "iuap-design", - "tinper-bee", - "Transfer" - ], - "engines": { - "node": ">=4.0.0" - }, - "homepage": "https://github.com/tinper-bee/bee-transfer.git", - "author": "Yonyou FED", - "repository": "http://github.com/tinper-bee/bee-transfer", - "bugs": "https://github.com/tinper-bee/bee-transfer.git/issues", - "license": "MIT", - "main": "./build/index.js", - "config": { - "port": 3000, - "commitizen": { - "path": "./node_modules/cz-conventional-changelog" - } - }, - "scripts": { - "dev": "bee-tools run start", - "build": "bee-tools run build", - "lint": "bee-tools-test run lint", - "test": "bee-tools-test run test", - "chrome": "bee-tools-test run chrome", - "coveralls": "bee-tools-test run coverage", - "browsers": "bee-tools-test run browsers", - "pub": "bee-tools run pub", - "version": "conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md", - "postversion": "git push --follow-tags", - "prepublishOnly": "npm run build" - }, - "dependencies": { - "babel-runtime": "^6.23.0", - "bee-animate": "^1.0.0", - "bee-button": "latest", - "bee-checkbox": "latest", - "bee-form-control": "latest", - "bee-icon": "latest", - "classnames": "^2.2.5", - "react-beautiful-dnd": "^9.0.2", - "react-lazy-load": "^3.0.12", - "shallowequal": "^1.0.2", - "tinper-bee-core": "latest" - }, - "peerDependencies": { - "react": "^15.3.0 || ^16.0", - "react-dom": "^15.3.0 || ^16.0", - "prop-types": "15.6.0" - }, - "devDependencies": { - "bee-button": "latest", - "bee-clipboard": "^2.0.0", - "bee-drawer": "0.0.2", - "bee-layout": "latest", - "bee-panel": "latest", - "bee-tree": "^2.0.11", - "chai": "^3.5.0", - "console-polyfill": "~0.2.1", - "cz-conventional-changelog": "^2.1.0", - "enzyme": "^2.4.1", - "es5-shim": "~4.1.10", - "react": "15.3.2", - "react-addons-test-utils": "15.3.2", - "react-dom": "15.3.2", - "husky": "^4.2.5" + "name": "bee-transfer", + "version": "2.0.17", + "description": "Transfer ui component for react", + "keywords": [ + "react", + "react-component", + "bee-transfer", + "iuap-design", + "tinper-bee", + "Transfer" + ], + "engines": { + "node": ">=4.0.0" + }, + "homepage": "https://github.com/tinper-bee/bee-transfer.git", + "author": "Yonyou FED", + "repository": "http://github.com/tinper-bee/bee-transfer", + "bugs": "https://github.com/tinper-bee/bee-transfer.git/issues", + "license": "MIT", + "main": "./build/index.js", + "config": { + "port": 3000, + "commitizen": { + "path": "./node_modules/cz-conventional-changelog" } -} + }, + "scripts": { + "dev": "bee-tools run start", + "build": "bee-tools run build", + "lint": "bee-tools-test run lint", + "test": "bee-tools-test run test", + "chrome": "bee-tools-test run chrome", + "coveralls": "bee-tools-test run coverage", + "browsers": "bee-tools-test run browsers", + "pub": "bee-tools run pub", + "version": "conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md", + "postversion": "git push --follow-tags", + "prepublishOnly": "npm run build" + }, + "dependencies": { + "babel-runtime": "^6.23.0", + "bee-animate": "^1.0.0", + "bee-button": "latest", + "bee-checkbox": "latest", + "bee-form-control": "latest", + "bee-icon": "latest", + "classnames": "^2.2.5", + "react-beautiful-dnd": "^9.0.2", + "react-lazy-load": "^3.0.12", + "shallowequal": "^1.0.2", + "tinper-bee-core": "latest" + }, + "peerDependencies": { + "react": "^15.3.0 || ^16.0", + "react-dom": "^15.3.0 || ^16.0", + "prop-types": "15.6.0" + }, + "devDependencies": { + "bee-button": "latest", + "bee-clipboard": "^2.0.0", + "bee-drawer": "0.0.2", + "bee-layout": "latest", + "bee-panel": "latest", + "bee-tree": "^2.0.11", + "chai": "^3.5.0", + "console-polyfill": "~0.2.1", + "cz-conventional-changelog": "^2.1.0", + "enzyme": "^2.4.1", + "es5-shim": "~4.1.10", + "react": "15.3.2", + "react-addons-test-utils": "15.3.2", + "react-dom": "15.3.2", + "husky": "^4.2.5" + } +} \ No newline at end of file