UNPKG

@sms-frontend/components

Version:

SMS Design React UI Library.

132 lines (131 loc) 8.37 kB
var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; import React, { useContext, useEffect, useState } from 'react'; import cs from '../_util/classNames'; import Checkbox from '../Checkbox'; import Button from '../Button'; import Input from '../Input'; import List from '../List'; import Item from './item'; import IconSearch from '../../icon/react-icon/IconSearch'; import IconDelete from '../../icon/react-icon/IconDelete'; import IconHover from '../_class/icon-hover'; import { ConfigContext } from '../ConfigProvider'; export var TransferList = function (props, ref) { var style = props.style, prefixCls = props.prefixCls, className = props.className, listType = props.listType, dataSource = props.dataSource, _a = props.selectedKeys, selectedKeys = _a === void 0 ? [] : _a, validKeys = props.validKeys, selectedDisabledKeys = props.selectedDisabledKeys, selectedStatus = props.selectedStatus, _b = props.title, title = _b === void 0 ? '' : _b, disabled = props.disabled, draggable = props.draggable, allowClear = props.allowClear, showSearch = props.showSearch, showFooter = props.showFooter, searchPlaceholder = props.searchPlaceholder, render = props.render, renderList = props.renderList, pagination = props.pagination, handleSelect = props.handleSelect, handleRemove = props.handleRemove, filterOption = props.filterOption, onSearch = props.onSearch, onResetData = props.onResetData, onDragStart = props.onDragStart, onDragEnd = props.onDragEnd, onDragLeave = props.onDragLeave, onDragOver = props.onDragOver, onDrop = props.onDrop; var baseClassName = prefixCls + "-view"; var locale = useContext(ConfigContext).locale; var _c = __read(useState(null), 2), dragItem = _c[0], setDragItem = _c[1]; var _d = __read(useState(''), 2), filterText = _d[0], setFilterText = _d[1]; var _e = __read(useState(dataSource), 2), itemsToRender = _e[0], setItemsToRender = _e[1]; useEffect(function () { setItemsToRender(filterText ? dataSource.filter(function (item) { return filterOption(filterText, item); }) : dataSource); }, [dataSource, filterText, filterOption]); // 处理单个条目复选框改变 var handleItemChecked = function (key, checked) { return handleSelect(checked ? selectedKeys.concat(key) : selectedKeys.filter(function (_key) { return _key !== key; })); }; // 处理全选复选框改变,始终避免操作已禁用的选项 var handleItemAllChecked = function (keys, checked) { return handleSelect(checked ? keys.concat(selectedDisabledKeys) : __spreadArray([], __read(selectedDisabledKeys), false)); }; var clearItems = function () { return handleRemove(validKeys); }; var renderHeader = function () { var checkboxProps = { disabled: disabled, checked: selectedStatus === 'all', indeterminate: selectedStatus === 'part', onChange: function (checked) { return handleItemAllChecked(validKeys, checked); }, }; if (typeof title === 'function') { return title({ countTotal: dataSource.length, countSelected: selectedKeys.length, clear: clearItems, checkbox: React.createElement(Checkbox, __assign({}, checkboxProps)), }); } return allowClear ? (React.createElement(React.Fragment, null, React.createElement("span", { className: baseClassName + "-header-title" }, title), !disabled && validKeys.length ? (React.createElement(IconHover, { className: baseClassName + "-icon-clear", onClick: clearItems }, React.createElement(IconDelete, null))) : null)) : (React.createElement(React.Fragment, null, React.createElement("span", { className: baseClassName + "-header-title" }, React.createElement(Checkbox, __assign({}, checkboxProps), title)), React.createElement("span", { className: baseClassName + "-header-unit" }, selectedKeys.length + " / " + dataSource.length))); }; var renderListBody = function () { var customList = renderList && renderList({ listType: listType, disabled: disabled, selectedKeys: selectedKeys, validKeys: validKeys, selectedDisabledKeys: selectedDisabledKeys, filteredItems: itemsToRender, onItemRemove: function (key) { return handleRemove([key]); }, onItemSelect: handleItemChecked, onItemSelectAll: handleItemAllChecked, }); return customList ? (React.createElement("div", { className: baseClassName + "-custom-list" }, customList)) : (React.createElement(List, { wrapperClassName: baseClassName + "-list", dataSource: itemsToRender, render: function (item) { return (React.createElement(Item, { key: item.key, prefixCls: prefixCls, item: item, disabled: disabled, draggable: draggable, droppable: !!dragItem, allowClear: allowClear, render: render, selectedKeys: selectedKeys, onItemSelect: function (key, selected) { return handleItemChecked(key, selected); }, onItemRemove: function (key) { return handleRemove([key]); }, onDragStart: function (e, item) { setDragItem(item); onDragStart && onDragStart(e, item); }, onDragEnd: function (e, item) { setDragItem(null); onDragEnd && onDragEnd(e, item); }, onDragLeave: function (e, item) { return onDragLeave && onDragLeave(e, item); }, onDragOver: function (e, item) { return onDragOver && onDragOver(e, item); }, onDrop: function (e, dropItem, dropPosition) { if (onDrop && dragItem && dragItem.key !== dropItem.key) { onDrop({ e: e, dropItem: dropItem, dropPosition: dropPosition, dragItem: dragItem, }); } } })); }, pagination: pagination ? __assign({ simple: true, size: 'mini' }, (typeof pagination === 'object' ? pagination : {})) : undefined, bordered: false, paginationInFooter: true, footer: showFooter === true ? (React.createElement(Button, { size: "mini", disabled: disabled, onClick: onResetData }, locale.Transfer.resetText)) : (showFooter || null) })); }; return (React.createElement("div", { ref: ref, className: cs(baseClassName, className), style: style }, React.createElement("div", { className: baseClassName + "-header" }, renderHeader()), showSearch && (React.createElement("div", { className: baseClassName + "-search" }, React.createElement(Input, { size: "small", disabled: disabled, placeholder: searchPlaceholder, suffix: React.createElement(IconSearch, null), onChange: function (value) { setFilterText(value); onSearch && onSearch(value); } }))), renderListBody())); }; var TransferListComponent = React.forwardRef(TransferList); export default TransferListComponent;