From d46762c1d68d4b255825ead01eb89a56a64e7cb8 Mon Sep 17 00:00:00 2001
From: tangjinzhou <415800467@qq.com>
Date: Sun, 16 Jan 2022 11:13:39 +0800
Subject: [PATCH] feat: tree-select add tag-render
---
components/tree-select/demo/checkable.vue | 2 +-
.../tree-select/demo/custom-tag-render.vue | 93 +++++++++++++++++++
components/tree-select/demo/index.vue | 9 ++
.../demo/{treeLine.vue => tree-line.vue} | 48 +++++-----
components/tree-select/demo/treeData.vue | 74 ---------------
.../tree-select/demo/virtual-scroll.vue | 73 +++++++++++++++
.../vc-select/Selector/MultipleSelector.tsx | 12 ++-
.../vc-select/Selector/SingleSelector.tsx | 1 +
components/vc-tree-select/TreeSelect.tsx | 1 +
9 files changed, 212 insertions(+), 101 deletions(-)
create mode 100644 components/tree-select/demo/custom-tag-render.vue
rename components/tree-select/demo/{treeLine.vue => tree-line.vue} (62%)
delete mode 100644 components/tree-select/demo/treeData.vue
create mode 100644 components/tree-select/demo/virtual-scroll.vue
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.
+
+
+
+
+
+ {{ title }}
+ {{ title }}
+
+
+
+
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}
/>
);
};