UNPKG

tdesign-react

Version:
292 lines (288 loc) 10.9 kB
/** * tdesign v1.15.1 * (c) 2025 tdesign * @license MIT */ import { _ as _defineProperty } from '../_chunks/dep-cb0a3966.js'; import { _ as _slicedToArray } from '../_chunks/dep-48805ab8.js'; import React, { useState, useMemo } from 'react'; import classNames from 'classnames'; import { isEmpty, isFunction, isString } from 'lodash-es'; import { SearchIcon } from 'tdesign-icons-react'; import { getLeafNodes } from './utils.js'; import useConfig from '../hooks/useConfig.js'; import useGlobalIcon from '../hooks/useGlobalIcon.js'; import { Checkbox } from '../checkbox/index.js'; import { Input } from '../input/index.js'; import { Pagination } from '../pagination/index.js'; import { useLocaleReceiver } from '../locale/LocalReceiver.js'; import { parseContentTNode } from '../_util/parseTNode.js'; import '../_chunks/dep-eca3a3de.js'; import '../_chunks/dep-026a4c6b.js'; import '../config-provider/ConfigContext.js'; import '../_chunks/dep-f97636ce.js'; import '../_chunks/dep-9dbbf468.js'; import 'dayjs'; import '../_chunks/dep-872df51f.js'; import '../_util/forwardRefWithStatics.js'; import 'hoist-non-react-statics'; import '../common/Check.js'; import '../_chunks/dep-6b660ef0.js'; import '../_util/helper.js'; import '../hooks/useControlled.js'; import '../_util/noop.js'; import '../checkbox/defaultProps.js'; import '../hooks/useDefaultProps.js'; import '../input/Input.js'; import '../hooks/useLayoutEffect.js'; import '../_chunks/dep-3a09424a.js'; import '../input/InputGroup.js'; import '../input/defaultProps.js'; import '../input/useLengthLimit.js'; import '../_chunks/dep-b908e1fe.js'; import '../_chunks/dep-6af6bc60.js'; import '../_chunks/dep-87d110df.js'; import '../config-provider/ConfigProvider.js'; import '../pagination/Pagination.js'; import '../select/index.js'; import '../select/base/Select.js'; import '../_util/composeRefs.js'; import '../common/FakeArrow.js'; import '../loading/index.js'; import '../loading/Loading.js'; import '../common/Portal.js'; import 'react-dom'; import '../loading/gradient.js'; import '../_chunks/dep-c48e2ca1.js'; import '../hooks/useDomRefCallback.js'; import '../loading/defaultProps.js'; import '../loading/plugin.js'; import '../_util/react-render.js'; import '../_chunks/dep-52ff3837.js'; import '../common/PluginContainer.js'; import '../select-input/index.js'; import '../select-input/SelectInput.js'; import '../popup/index.js'; import '../popup/Popup.js'; import 'react-transition-group'; import '../_util/ref.js'; import 'react-is'; import '../_util/isFragment.js'; import '../hooks/useAnimation.js'; import '../hooks/useAttach.js'; import '../hooks/useMutationObserver.js'; import '../hooks/useLatest.js'; import '../hooks/usePopper.js'; import '@popperjs/core'; import 'react-fast-compare'; import '../hooks/useWindowSize.js'; import '../popup/defaultProps.js'; import '../popup/hooks/useTrigger.js'; import '../_util/listener.js'; import '../popup/utils/transition.js'; import '../popup/PopupPlugin.js'; import '../select-input/useSingle.js'; import '../select-input/useMultiple.js'; import '../tag-input/index.js'; import '../tag-input/TagInput.js'; import '../hooks/useDragSorter.js'; import '../hooks/useEventCallback.js'; import '../tag-input/defaultProps.js'; import '../tag-input/useHover.js'; import '../tag-input/useTagList.js'; import '../tag/index.js'; import '../tag/Tag.js'; import '../_chunks/dep-3c3d29db.js'; import '../tag/defaultProps.js'; import '../tag/CheckTag.js'; import '../_chunks/dep-dbcf7b24.js'; import '../tag/CheckTagGroup.js'; import '../tag-input/useTagScroll.js'; import '../select-input/useOverlayInnerStyle.js'; import '../select-input/defaultProps.js'; import '../select/defaultProps.js'; import '../_chunks/dep-72472aa7.js'; import '../select/base/OptionGroup.js'; import '../select/base/Option.js'; import '../hooks/useRipple.js'; import '../select/base/PopupContent.js'; import '../select/hooks/usePanelVirtualScroll.js'; import '../hooks/useVirtualScroll.js'; import '../input-number/index.js'; import '../input-number/InputNumber.js'; import '../button/index.js'; import '../button/Button.js'; import '../button/defaultProps.js'; import '../input-number/useInputNumber.js'; import '../_chunks/dep-76b39920.js'; import '../hooks/useCommonClassName.js'; import '../input-number/defaultProps.js'; import '../input-adornment/InputAdornment.js'; import '../pagination/hooks/useBoundaryJumper.js'; import '../pagination/hooks/usePrevNextJumper.js'; import '../pagination/hooks/usePageNumber.js'; import '../pagination/hooks/useTotal.js'; import '../pagination/validators.js'; import '../pagination/defaultProps.js'; import '../pagination/PaginationMini.js'; var TransferList = function TransferList(props) { var className = props.className, style = props.style, data = props.data, _props$search = props.search, search = _props$search === void 0 ? false : _props$search, _props$checked = props.checked, checked = _props$checked === void 0 ? [] : _props$checked, empty = props.empty, title = props.title, footer = props.footer, content = props.content, onCheckbox = props.onCheckbox, onSearch = props.onSearch, _props$disabled = props.disabled, disabled = _props$disabled === void 0 ? false : _props$disabled, pagination = props.pagination, transferItem = props.transferItem, treeNode = props.tree, showCheckAll = props.showCheckAll, listType = props.listType; var notDisabledData = !treeNode ? data.filter(function (item) { return !item.disabled; }) : getLeafNodes(data).filter(function (item) { return !item.disabled; }); var _useState = useState(1), _useState2 = _slicedToArray(_useState, 2), currentPage = _useState2[0], setCurrentPage = _useState2[1]; var _useMemo = useMemo(function () { var activeLen = checked.length; var notLen = notDisabledData.length; return [activeLen && activeLen < notLen, activeLen && activeLen === notLen]; }, [checked, notDisabledData]), _useMemo2 = _slicedToArray(_useMemo, 2), indeterminate = _useMemo2[0], allChecked = _useMemo2[1]; var _useConfig = useConfig(), classPrefix = _useConfig.classPrefix; var _useGlobalIcon = useGlobalIcon({ SearchIcon: SearchIcon }), SearchIcon$1 = _useGlobalIcon.SearchIcon; var CLASSPREFIX = "".concat(classPrefix, "-transfer__list"); var _useLocaleReceiver = useLocaleReceiver("transfer"), _useLocaleReceiver2 = _slicedToArray(_useLocaleReceiver, 2), local = _useLocaleReceiver2[0], t = _useLocaleReceiver2[1]; var handleCheckbox = function handleCheckbox(vals) { if (isFunction(onCheckbox)) onCheckbox(vals); }; var handleAllCheckbox = function handleAllCheckbox(checked2) { if (isFunction(onCheckbox)) onCheckbox(checked2 ? notDisabledData.map(function (item) { return item.value; }) : []); }; var HeaderCmp = function HeaderCmp() { var total = treeNode ? getLeafNodes(data).length : data.length; return /* @__PURE__ */React.createElement("div", { className: "".concat(CLASSPREFIX, "-header") }, /* @__PURE__ */React.createElement("div", null, showCheckAll ? /* @__PURE__ */React.createElement(Checkbox, { indeterminate: indeterminate, checked: allChecked, disabled: disabled, onChange: handleAllCheckbox }) : null, /* @__PURE__ */React.createElement("span", null, t(local.title, { checked: checked.length, total: total }))), /* @__PURE__ */React.createElement("span", null, title)); }; var SearchCmp = function SearchCmp() { return search ? /* @__PURE__ */React.createElement("div", { className: "".concat(classPrefix, "-transfer__search-wrapper") }, /* @__PURE__ */React.createElement(Input, { placeholder: local.placeholder, suffixIcon: /* @__PURE__ */React.createElement(SearchIcon$1, null), onChange: onSearch })) : null; }; var viewData = useMemo(function () { if (!isEmpty(pagination)) { var pageSize = pagination.pageSize || 10; var start = (currentPage - 1) * pageSize; return data.slice(start, start + pageSize); } return data; }, [currentPage, data, pagination]); var EmptyCmp = function EmptyCmp() { return isString(empty) ? /* @__PURE__ */React.createElement("div", { className: "".concat(classPrefix, "-transfer__empty") }, /* @__PURE__ */React.createElement("span", null, empty || "\u6682\u65E0\u6570\u636E")) : empty; }; var contentCmp = function contentCmp() { if (typeof treeNode === "function") { return treeNode({ data: viewData, value: checked, onChange: handleCheckbox }); } if (typeof content === "function") { return content({ data: viewData }); } return /* @__PURE__ */React.createElement(Checkbox.Group, { value: checked, onChange: handleCheckbox, disabled: disabled }, viewData.map(function (item, index) { return /* @__PURE__ */React.createElement(Checkbox, { key: item.value, value: item.value, disabled: item.disabled, className: "".concat(CLASSPREFIX, "-item") }, /* @__PURE__ */React.createElement("span", null, transferItem ? parseContentTNode(transferItem, { data: item, index: index, type: listType }) : item.label)); })); }; var BodyCmp = function BodyCmp() { return /* @__PURE__ */React.createElement("div", { className: classNames("".concat(CLASSPREFIX, "-body"), _defineProperty({}, "".concat(CLASSPREFIX, "--with-search"), search)) }, SearchCmp(), /* @__PURE__ */React.createElement("div", { className: "".concat(CLASSPREFIX, "-content narrow-scrollbar") }, viewData.length ? contentCmp() : EmptyCmp())); }; var PaginationCmp = function PaginationCmp() { var handleCurrentPagination = function handleCurrentPagination(current) { setCurrentPage(current); if (isFunction(pagination.onPageChange)) { pagination.onPageChange(current); } }; return pagination ? /* @__PURE__ */React.createElement("div", { className: "".concat(CLASSPREFIX, "-pagination") }, /* @__PURE__ */React.createElement(Pagination, { size: "small", theme: "simple", pageSizeOptions: [], total: data.length, totalContent: false, onCurrentChange: handleCurrentPagination, pageSize: pagination.pageSize })) : null; }; var footerCmp = function footerCmp() { return !isEmpty(footer) ? /* @__PURE__ */React.createElement("div", { className: "".concat(classPrefix, "-transfer__footer") }, footer) : null; }; return /* @__PURE__ */React.createElement("div", { style: style, className: classNames(CLASSPREFIX, className) }, HeaderCmp(), BodyCmp(), PaginationCmp(), footerCmp()); }; export { TransferList as default }; //# sourceMappingURL=TransferList.js.map