diff --git a/components/tree-select/demo/checkable.vue b/components/tree-select/demo/checkable.vue index 868add70b..36f435e77 100644 --- a/components/tree-select/demo/checkable.vue +++ b/components/tree-select/demo/checkable.vue @@ -27,9 +27,9 @@ Multiple and checkable. /> diff --git a/components/tree-select/demo/index.vue b/components/tree-select/demo/index.vue index 87fa10469..4a3b57646 100644 --- a/components/tree-select/demo/index.vue +++ b/components/tree-select/demo/index.vue @@ -7,6 +7,9 @@ + + + diff --git a/components/tree-select/demo/virtual-scroll.vue b/components/tree-select/demo/virtual-scroll.vue new file mode 100644 index 000000000..f8c5eb847 --- /dev/null +++ b/components/tree-select/demo/virtual-scroll.vue @@ -0,0 +1,73 @@ + +--- +order: 9 +title: + zh-CN: 虚拟滚动 + en-US: Virtual scroll +--- + +## zh-CN + +使用 `height` 属性则切换为虚拟滚动。 + +## en-US + +Use virtual list through `height` prop. + + + + diff --git a/components/vc-select/Selector/MultipleSelector.tsx b/components/vc-select/Selector/MultipleSelector.tsx index 4fddf5dfb..3919d1f39 100644 --- a/components/vc-select/Selector/MultipleSelector.tsx +++ b/components/vc-select/Selector/MultipleSelector.tsx @@ -10,6 +10,7 @@ import type { VueNode } from '../../_util/type'; import Overflow from '../../vc-overflow'; import type { DisplayValueType, RenderNode, CustomTagProps, RawValueType } from '../BaseSelect'; import type { BaseOptionType } from '../Select'; +import useInjectLegacySelectContext from '../../vc-tree-select/LegacyContext'; type SelectorProps = InnerSelectorProps & { // Icon @@ -79,7 +80,7 @@ const SelectSelector = defineComponent({ const measureRef = ref(); const inputWidth = ref(0); const focused = ref(false); - + const legacyTreeSelectContext = useInjectLegacySelectContext(); const selectionPrefixCls = computed(() => `${props.prefixCls}-selection`); // ===================== Search ====================== @@ -147,15 +148,20 @@ const SelectSelector = defineComponent({ onPreventMouseDown(e); props.onToggleOpen(!open); }; + let originData = option; + // For TreeSelect + if (legacyTreeSelectContext.keyEntities) { + originData = legacyTreeSelectContext.keyEntities[value]?.node || {}; + } return ( - + {props.tagRender({ label: content, value, disabled: itemDisabled, closable, onClose, - option, + option: originData, })} ); diff --git a/components/vc-select/Selector/SingleSelector.tsx b/components/vc-select/Selector/SingleSelector.tsx index a5004cb51..b67159a98 100644 --- a/components/vc-select/Selector/SingleSelector.tsx +++ b/components/vc-select/Selector/SingleSelector.tsx @@ -109,6 +109,7 @@ const SingleSelector = defineComponent({ let titleNode = null; // custom tree-select title by slot + // For TreeSelect if (item && legacyTreeSelectContext.customSlots) { const key = item.key ?? item.value; const originData = legacyTreeSelectContext.keyEntities[key]?.node || {}; diff --git a/components/vc-tree-select/TreeSelect.tsx b/components/vc-tree-select/TreeSelect.tsx index 830043a5d..0d900158f 100644 --- a/components/vc-tree-select/TreeSelect.tsx +++ b/components/vc-tree-select/TreeSelect.tsx @@ -727,6 +727,7 @@ export default defineComponent({ OptionList={OptionList} emptyOptions={!mergedTreeData.value.length} onDropdownVisibleChange={onInternalDropdownVisibleChange} + tagRender={props.tagRender || slots.tagRender} /> ); };