UNPKG

@txdfe/at

Version:

一个设计体系组件库

580 lines (577 loc) 23.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _classnames = _interopRequireDefault(require("classnames")); var _button = _interopRequireDefault(require("../../button")); var _icon = _interopRequireDefault(require("../../icon")); var _configProvider = _interopRequireDefault(require("../../config-provider")); var _zhCn = _interopRequireDefault(require("../../locale/zh-cn")); var _util = require("../../util"); var _transferPanel = _interopRequireDefault(require("../view/transfer-panel")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var config = _configProvider["default"].config; var bindCtx = _util.func.bindCtx; var pickOthers = _util.obj.pickOthers; /** * Transfer */ var Transfer = /*#__PURE__*/function (_Component) { function Transfer(props, context) { var _this; _classCallCheck(this, Transfer); _this = _callSuper(this, Transfer, [props, context]); var value = props.value, defaultValue = props.defaultValue, defaultLeftChecked = props.defaultLeftChecked, defaultRightChecked = props.defaultRightChecked, dataSource = props.dataSource, rtl = props.rtl, operations = props.operations; if (operations.length === 0) { operations.push(/*#__PURE__*/_react["default"].createElement(_icon["default"], { rtl: rtl, type: "chevron-right" })); operations.push(/*#__PURE__*/_react["default"].createElement(_icon["default"], { rtl: rtl, type: "chevron-left" })); } var _this$filterCheckedVa = _this.filterCheckedValue(Transfer.normalizeValue(defaultLeftChecked), Transfer.normalizeValue(defaultRightChecked), dataSource), left = _this$filterCheckedVa.left, right = _this$filterCheckedVa.right; _this.state = { value: Transfer.normalizeValue('value' in props ? value : defaultValue), leftCheckedValue: left, rightCheckedValue: right }; _this.leftValue = _this.getLeftValue(dataSource, _this.state.value); bindCtx(_this, ['handlePanelChange', 'handlePanelSort', 'handleMoveItem', 'handleSimpleMove', 'handleSimpleMoveAll']); return _this; } _inherits(Transfer, _Component); return _createClass(Transfer, [{ key: "UNSAFE_componentWillReceiveProps", value: function UNSAFE_componentWillReceiveProps(nextProps) { var st = {}; var newValue; if ('value' in nextProps) { var value = Transfer.normalizeValue(nextProps.value); st.value = value; newValue = value; } else { /* istanbul ignore next */ newValue = this.state.value; } this.leftValue = this.getLeftValue(nextProps.dataSource, newValue); var _this$filterCheckedVa2 = this.filterCheckedValue(this.state.leftCheckedValue, this.state.rightCheckedValue, nextProps.dataSource), left = _this$filterCheckedVa2.left, right = _this$filterCheckedVa2.right; st.leftCheckedValue = left; st.rightCheckedValue = right; this.setState(st); } }, { key: "filterCheckedValue", value: function filterCheckedValue(left, right, dataSource) { var result = { left: [], right: [] }; if (left.length || right.length) { var value = dataSource.map(function (item) { return item.value; }); value.forEach(function (itemValue) { if (left.indexOf(itemValue) > -1) { result.left.push(itemValue); } else if (right.indexOf(itemValue) > -1) { result.right.push(itemValue); } }); } return result; } }, { key: "getLeftValue", value: function getLeftValue(dataSource, rightValue) { return dataSource.map(function (item) { return item.value; }).filter(function (itemValue) { return rightValue.indexOf(itemValue) === -1; }); } }, { key: "groupDatasource", value: function groupDatasource(value, itemValues, dataSource) { return value.reduce(function (ret, itemValue) { var index = itemValues.indexOf(itemValue); if (index > -1) { ret.push(dataSource[index]); } return ret; }, []); } }, { key: "handlePanelChange", value: function handlePanelChange(position, value) { var valuePropName = position === 'left' ? 'leftCheckedValue' : 'rightCheckedValue'; this.setState(_defineProperty({}, valuePropName, value)); } }, { key: "handlePanelSort", value: function handlePanelSort(position, dragValue, referenceValue, dragGap) { var _this2 = this; var value = position === 'right' ? this.state.value : this.leftValue; var currentIndex = value.indexOf(dragValue); var referenceIndex = value.indexOf(referenceValue); var expectIndex = dragGap === 'before' ? referenceIndex : referenceIndex + 1; if (currentIndex === expectIndex) { return; } value.splice(currentIndex, 1); if (currentIndex < expectIndex) { expectIndex -= 1; } value.splice(expectIndex, 0, dragValue); this.setState({ value: this.state.value }, function () { _this2.props.onSort(value, position); }); } }, { key: "handleMoveItem", value: function handleMoveItem(direction) { var rightValue; var leftValue; var movedValue; var valuePropName; var _this$state = this.state, value = _this$state.value, leftCheckedValue = _this$state.leftCheckedValue, rightCheckedValue = _this$state.rightCheckedValue; if (direction === 'right') { rightValue = leftCheckedValue.concat(value); leftValue = this.leftValue.filter(function (itemValue) { return leftCheckedValue.indexOf(itemValue) === -1; }); movedValue = leftCheckedValue; valuePropName = 'leftCheckedValue'; } else { rightValue = value.filter(function (itemValue) { return rightCheckedValue.indexOf(itemValue) === -1; }); leftValue = rightCheckedValue.concat(this.leftValue); movedValue = rightCheckedValue; valuePropName = 'rightCheckedValue'; } var st = _defineProperty({}, valuePropName, []); this.setValueState(st, rightValue, leftValue, movedValue, direction); } }, { key: "handleSimpleMove", value: function handleSimpleMove(direction, v) { var rightValue; var leftValue; var value = this.state.value; if (direction === 'right') { rightValue = [v].concat(value); leftValue = this.leftValue.filter(function (itemValue) { return itemValue !== v; }); } else { rightValue = value.filter(function (itemValue) { return itemValue !== v; }); leftValue = [v].concat(this.leftValue); } this.setValueState({}, rightValue, leftValue, [v], direction); } }, { key: "handleSimpleMoveAll", value: function handleSimpleMoveAll(direction) { var rightValue; var leftValue; var movedValue; var dataSource = this.props.dataSource; var value = this.state.value; var disabledValue = dataSource.reduce(function (ret, item) { if (item.disabled) { ret.push(item.value); } return ret; }, []); if (direction === 'right') { movedValue = this.leftValue.filter(function (itemValue) { return disabledValue.indexOf(itemValue) === -1; }); rightValue = movedValue.concat(value); leftValue = this.leftValue.filter(function (itemValue) { return disabledValue.indexOf(itemValue) > -1; }); } else { movedValue = value.filter(function (itemValue) { return disabledValue.indexOf(itemValue) === -1; }); rightValue = value.filter(function (itemValue) { return disabledValue.indexOf(itemValue) > -1; }); leftValue = movedValue.concat(this.leftValue); } this.setValueState({}, rightValue, leftValue, movedValue, direction); } // eslint-disable-next-line max-params }, { key: "setValueState", value: function setValueState(st, rightValue, leftValue, movedValue, direction) { var _this3 = this; var dataSource = this.props.dataSource; var callback = function callback() { if ('onChange' in _this3.props) { var itemValues = dataSource.map(function (item) { return item.value; }); var rightData = _this3.groupDatasource(rightValue, itemValues, dataSource); var leftData = _this3.groupDatasource(leftValue, itemValues, dataSource); var movedData = _this3.groupDatasource(movedValue, itemValues, dataSource); _this3.props.onChange(rightValue, rightData, { leftValue: leftValue, leftData: leftData, movedValue: movedValue, movedData: movedData, direction: direction }); } }; if (!('value' in this.props)) { st.value = rightValue; this.leftValue = leftValue; } if (Object.keys(st).length) { this.setState(st, callback); } else { // eslint-disable-next-line callback-return callback(); } } }, { key: "renderCenter", value: function renderCenter() { var _this$props = this.props, prefix = _this$props.prefix, mode = _this$props.mode, operations = _this$props.operations, disabled = _this$props.disabled, leftDisabled = _this$props.leftDisabled, rightDisabled = _this$props.rightDisabled, locale = _this$props.locale; var _this$state2 = this.state, leftCheckedValue = _this$state2.leftCheckedValue, rightCheckedValue = _this$state2.rightCheckedValue; return /*#__PURE__*/_react["default"].createElement("div", { className: "".concat(prefix, "transfer-operations") }, mode === 'simple' ? /*#__PURE__*/_react["default"].createElement(_icon["default"], { className: "".concat(prefix, "transfer-move"), size: "large", type: "arrows-swtich-horizontal" }) : [/*#__PURE__*/_react["default"].createElement(_button["default"], { "aria-label": locale.moveToRight, size: "xs", key: "l2r", className: "".concat(prefix, "transfer-operation"), type: leftCheckedValue.length ? 'primary' : 'normal', disabled: leftDisabled || disabled || !leftCheckedValue.length, onClick: this.handleMoveItem.bind(this, 'right') }, operations[0]), /*#__PURE__*/_react["default"].createElement(_button["default"], { size: "xs", "aria-label": locale.moveToLeft, key: "r2l", className: "".concat(prefix, "transfer-operation"), type: rightCheckedValue.length ? 'primary' : 'normal', disabled: rightDisabled || disabled || !rightCheckedValue.length, onClick: this.handleMoveItem.bind(this, 'left') }, operations[1])]); } }, { key: "render", value: function render() { var _this$props2 = this.props, prefix = _this$props2.prefix, mode = _this$props2.mode, disabled = _this$props2.disabled, className = _this$props2.className, dataSource = _this$props2.dataSource, locale = _this$props2.locale, showSearch = _this$props2.showSearch, filter = _this$props2.filter, onSearch = _this$props2.onSearch, leftDisabled = _this$props2.leftDisabled, rightDisabled = _this$props2.rightDisabled, searchPlaceholder = _this$props2.searchPlaceholder, notFoundContent = _this$props2.notFoundContent, titles = _this$props2.titles, listClassName = _this$props2.listClassName, listStyle = _this$props2.listStyle, itemRender = _this$props2.itemRender, sortable = _this$props2.sortable, rtl = _this$props2.rtl, id = _this$props2.id, children = _this$props2.children, showCheckAll = _this$props2.showCheckAll; var _this$state3 = this.state, value = _this$state3.value, leftCheckedValue = _this$state3.leftCheckedValue, rightCheckedValue = _this$state3.rightCheckedValue; var itemValues = dataSource.map(function (item) { return item.value; }); var leftDatasource = this.groupDatasource(this.leftValue, itemValues, dataSource); var rightDatasource = this.groupDatasource(value, itemValues, dataSource); var panelProps = { prefix: prefix, mode: mode, locale: locale, showSearch: showSearch, filter: filter, onSearch: onSearch, searchPlaceholder: searchPlaceholder, notFoundContent: notFoundContent, listClassName: listClassName, listStyle: listStyle, itemRender: itemRender, onMove: this.handleSimpleMove, onMoveAll: this.handleSimpleMoveAll, onChange: this.handlePanelChange, sortable: sortable, onSort: this.handlePanelSort, baseId: id, customerList: children, showCheckAll: showCheckAll }; var others = pickOthers(Object.keys(Transfer.propTypes), this.props); if (rtl) { others.dir = 'rtl'; } return /*#__PURE__*/_react["default"].createElement("div", _extends({ className: (0, _classnames["default"])("".concat(prefix, "transfer"), className), id: id }, others), /*#__PURE__*/_react["default"].createElement(_transferPanel["default"], _extends({}, panelProps, { position: "left", dataSource: leftDatasource, disabled: leftDisabled || disabled, value: leftCheckedValue, title: titles[0] })), this.renderCenter(), /*#__PURE__*/_react["default"].createElement(_transferPanel["default"], _extends({}, panelProps, { position: "right", dataSource: rightDatasource, disabled: rightDisabled || disabled, value: rightCheckedValue, title: titles[1] }))); } }], [{ key: "normalizeValue", value: function normalizeValue(value) { if (value) { if (Array.isArray(value)) { return value; } /* istanbul ignore next */ return [value]; } return []; } }]); }(_react.Component); _defineProperty(Transfer, "displayName", 'Transfer'); _defineProperty(Transfer, "contextTypes", { prefix: _propTypes["default"].string }); _defineProperty(Transfer, "propTypes", { prefix: _propTypes["default"].string, pure: _propTypes["default"].bool, rtl: _propTypes["default"].bool, className: _propTypes["default"].string, /** * 移动选项模式 */ mode: _propTypes["default"].oneOf(['normal', 'simple']), /** * 数据源 */ dataSource: _propTypes["default"].arrayOf(_propTypes["default"].object), /** * (用于受控)当前值 */ value: _propTypes["default"].arrayOf(_propTypes["default"].string), /** * (用于非受控)初始值 */ defaultValue: _propTypes["default"].arrayOf(_propTypes["default"].string), /** * 值发生改变的时候触发的回调函数 * @param {Array} value 右面板值 * @param {Array} data 右面板数据 * @param {Object} extra 额外参数 * @param {Array} extra.leftValue 左面板值 * @param {Array} extra.leftData 左面板数据 * @param {Array} extra.movedValue 发生移动的值 * @param {Object} extra.movedData 发生移动的数据 * @param {String} extra.direction 移动的方向,值为'left'或'right' */ onChange: _propTypes["default"].func, /** * 是否禁用 */ disabled: _propTypes["default"].bool, /** * 是否禁用左侧面板 */ leftDisabled: _propTypes["default"].bool, /** * 是否禁用右侧面板 */ rightDisabled: _propTypes["default"].bool, /** * 列表项渲染函数 * @param {Object} data 数据 * @return {ReactNode} 列表项内容 */ itemRender: _propTypes["default"].func, /** * 是否显示搜索框 */ showSearch: _propTypes["default"].bool, /** * 自定义搜索函数 * @param {String} searchedValue 搜索的内容 * @param {Object} data 数据 * @return {Boolean} 是否匹配到 * @default 根据 label 属性匹配 */ filter: _propTypes["default"].func, /** * 搜索框输入时触发的回调函数 * @param {String} searchedValue 搜索的内容 * @param {String} position 搜索面板的位置 */ onSearch: _propTypes["default"].func, /** * 搜索框占位符 */ searchPlaceholder: _propTypes["default"].string, /** * 列表为空显示内容 */ notFoundContent: _propTypes["default"].node, /** * 左右面板标题 */ titles: _propTypes["default"].arrayOf(_propTypes["default"].node), /** * 向右向左移动按钮显示内容 * @default [<Icon type="chevron-right" />, <Icon type="chevron-left" />] */ operations: _propTypes["default"].arrayOf(_propTypes["default"].node), /** * 左面板默认选中值 */ defaultLeftChecked: _propTypes["default"].arrayOf(_propTypes["default"].string), /** * 右面板默认选中值 */ defaultRightChecked: _propTypes["default"].arrayOf(_propTypes["default"].string), /** * 左右面板列表自定义样式类名 */ listClassName: _propTypes["default"].string, /** * 左右面板列表自定义样式对象 */ listStyle: _propTypes["default"].object, /** * 是否允许拖拽排序 */ sortable: _propTypes["default"].bool, /** * 拖拽排序时触发的回调函数 * @param {Array} value 排序后的值 * @param {String} position 拖拽的面板位置,值为:left 或 right */ onSort: _propTypes["default"].func, /** * 自定义国际化文案对象 */ locale: _propTypes["default"].object, /** * 请设置 id 以保证transfer的可访问性 */ id: _propTypes["default"].string, /** * 接收 children 自定义渲染列表 */ children: _propTypes["default"].func, /** * 是否显示底部全选 checkbox */ showCheckAll: _propTypes["default"].bool }); _defineProperty(Transfer, "defaultProps", { prefix: 'next-', pure: false, mode: 'normal', dataSource: [], defaultValue: [], disabled: false, leftDisabled: false, rightDisabled: false, showCheckAll: true, itemRender: function itemRender(data) { return data.label; }, showSearch: false, filter: function filter(searchedValue, data) { var labelString = ''; var _loop = function loop(arg) { if (/*#__PURE__*/_react["default"].isValidElement(arg) && arg.props.children) { _react["default"].Children.forEach(arg.props.children, _loop); } else if (typeof arg === 'string') { labelString += arg; } }; _loop(data.label); return labelString.length >= searchedValue.length && labelString.indexOf(searchedValue) > -1; }, onSearch: function onSearch() {}, notFoundContent: 'Not Found', titles: [], operations: [], defaultLeftChecked: [], defaultRightChecked: [], sortable: false, onSort: function onSort() {}, locale: _zhCn["default"].Transfer }); var _default = exports["default"] = config(Transfer);