Date: Tue, 17 Aug 2021 22:52:28 +0800
Subject: [PATCH 21/53] refactor: tree
---
components/tree/Tree.tsx | 5 +++--
components/vc-tree/Tree.tsx | 3 ++-
components/vc-tree/TreeNode.tsx | 24 +++++++++++++++++++-----
components/vc-tree/contextTypes.ts | 1 +
components/vc-tree/interface.tsx | 1 +
5 files changed, 26 insertions(+), 8 deletions(-)
diff --git a/components/tree/Tree.tsx b/components/tree/Tree.tsx
index aa0f9a54b..850e0f386 100644
--- a/components/tree/Tree.tsx
+++ b/components/tree/Tree.tsx
@@ -1,4 +1,4 @@
-import type { VNode, PropType, DefineComponent, ExtractPropTypes } from 'vue';
+import type { VNode, PropType, DefineComponent, ExtractPropTypes, CSSProperties } from 'vue';
import { ref } from 'vue';
import { defineComponent } from 'vue';
import classNames from '../_util/classNames';
@@ -16,7 +16,7 @@ import dropIndicatorRender from './utils/dropIndicator';
export interface AntdTreeNodeAttribute {
eventKey: string;
prefixCls: string;
- className: string;
+ class: string;
expanded: boolean;
selected: boolean;
checked: boolean;
@@ -239,6 +239,7 @@ export default defineComponent({
onExpand={handleExpand}
onSelect={handleSelect}
v-slots={{
+ ...slots,
checkable: () =>
,
}}
children={filterEmpty(slots.default?.())}
diff --git a/components/vc-tree/Tree.tsx b/components/vc-tree/Tree.tsx
index 182ed78fd..3f71b860c 100644
--- a/components/vc-tree/Tree.tsx
+++ b/components/vc-tree/Tree.tsx
@@ -1046,13 +1046,14 @@ export default defineComponent({
onNodeDragLeave,
onNodeDragEnd,
onNodeDrop,
+ slots: slots,
}}
>
diff --git a/components/vc-tree/TreeNode.tsx b/components/vc-tree/TreeNode.tsx
index 1a03081c3..83a70d556 100644
--- a/components/vc-tree/TreeNode.tsx
+++ b/components/vc-tree/TreeNode.tsx
@@ -5,6 +5,7 @@ import { convertNodePropsToEventData } from './utils/treeUtil';
import { computed, defineComponent, getCurrentInstance, onMounted, onUpdated, ref } from 'vue';
import { treeNodeProps } from './props';
import classNames from '../_util/classNames';
+import { warning } from '../vc-util/warning';
const ICON_OPEN = 'open';
const ICON_CLOSE = 'close';
@@ -17,7 +18,11 @@ export default defineComponent({
props: treeNodeProps,
isTreeNode: 1,
slots: ['title', 'icon', 'switcherIcon', 'checkable'],
- setup(props, { attrs, expose, slots }) {
+ setup(props, { attrs, slots }) {
+ warning(
+ !('slots' in props.data),
+ 'treeData slots is deprecated, please use `v-slot:icon` or `v-slot:title`, `v-slot:switcherIcon` instead',
+ );
const dragNodeHighlight = ref(false);
const context = useInjectTreeContext();
const instance = getCurrentInstance();
@@ -198,7 +203,10 @@ export default defineComponent({
};
const renderSwitcherIconDom = (isLeaf: boolean) => {
- const { switcherIcon: switcherIconFromProps = slots.switcherIcon } = props;
+ const {
+ switcherIcon: switcherIconFromProps = slots.switcherIcon ||
+ context.value.slots?.[props.data?.slots?.switcherIcon],
+ } = props;
const { switcherIcon: switcherIconFromCtx } = context.value;
const switcherIcon = switcherIconFromProps || switcherIconFromCtx;
@@ -327,7 +335,13 @@ export default defineComponent({
// Icon + Title
const renderSelector = () => {
- const { title = slots.title, selected, icon = slots.icon, loading, data } = props;
+ const {
+ title = slots.title || context.value.slots?.[props.data?.slots?.title],
+ selected,
+ icon = slots.icon,
+ loading,
+ data,
+ } = props;
const {
prefixCls,
showIcon,
@@ -345,7 +359,7 @@ export default defineComponent({
let $icon;
if (showIcon) {
- const currentIcon = icon || treeIcon;
+ const currentIcon = icon || context.value.slots?.[data?.slots?.icon] || treeIcon;
$icon = currentIcon ? (
@@ -377,7 +391,7 @@ export default defineComponent({
class={classNames(
`${wrapClass}`,
`${wrapClass}-${nodeState.value || 'normal'}`,
- !disabled && (selected || dragNodeHighlight) && `${prefixCls}-node-selected`,
+ !disabled && (selected || dragNodeHighlight.value) && `${prefixCls}-node-selected`,
!disabled && mergedDraggable && 'draggable',
)}
draggable={(!disabled && mergedDraggable) || undefined}
diff --git a/components/vc-tree/contextTypes.ts b/components/vc-tree/contextTypes.ts
index 995bf16c8..0ec4d032f 100644
--- a/components/vc-tree/contextTypes.ts
+++ b/components/vc-tree/contextTypes.ts
@@ -80,6 +80,7 @@ export interface TreeContextProps {
onNodeDragLeave: NodeDragEventHandler;
onNodeDragEnd: NodeDragEventHandler;
onNodeDrop: NodeDragEventHandler;
+ slots: Record;
}
const TreeContextKey: InjectionKey> = Symbol('TreeContextKey');
diff --git a/components/vc-tree/interface.tsx b/components/vc-tree/interface.tsx
index 6685424b0..89fbb8904 100644
--- a/components/vc-tree/interface.tsx
+++ b/components/vc-tree/interface.tsx
@@ -16,6 +16,7 @@ export interface DataNode {
/** Set style of TreeNode. This is not recommend if you don't have any force requirement */
class?: string;
style?: CSSProperties;
+ slots?: Record;
}
export interface EventDataNode extends DataNode {
From c7abe76939d1db1011de3c4a38ac632ee211b337 Mon Sep 17 00:00:00 2001
From: mehunk
Date: Wed, 18 Aug 2021 08:36:28 +0800
Subject: [PATCH 22/53] fix(mentions): chinese or japanese input error (#4524)
---
components/vc-mentions/src/Mentions.jsx | 3 +++
1 file changed, 3 insertions(+)
diff --git a/components/vc-mentions/src/Mentions.jsx b/components/vc-mentions/src/Mentions.jsx
index 91a5d9a66..a3c5b3514 100644
--- a/components/vc-mentions/src/Mentions.jsx
+++ b/components/vc-mentions/src/Mentions.jsx
@@ -115,6 +115,9 @@ const Mentions = {
const { measureText: prevMeasureText, measuring } = this.$data;
const { prefix = '', validateSearch } = this.$props;
const target = event.target;
+ if (target.composing) {
+ return;
+ }
const selectionStartText = getBeforeSelectionText(target);
const { location: measureIndex, prefix: measurePrefix } = getLastMeasureIndex(
selectionStartText,
From 106b2609be67aa8a60b940356e3ac2cb54a63015 Mon Sep 17 00:00:00 2001
From: tangjinzhou <415800467@qq.com>
Date: Wed, 18 Aug 2021 09:14:01 +0800
Subject: [PATCH 23/53] =?UTF-8?q?=E7=83=ADfactor:=20tree?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
components/vc-tree/NodeList.tsx | 4 +-
components/vc-tree/Tree.tsx | 9 ++--
components/vc-tree/TreeNode.tsx | 2 +-
components/vc-tree/contextTypes.ts | 3 +-
components/vc-tree/props.ts | 2 +-
examples/App.vue | 72 ++++++++++++------------------
6 files changed, 37 insertions(+), 55 deletions(-)
diff --git a/components/vc-tree/NodeList.tsx b/components/vc-tree/NodeList.tsx
index 1ef1a433b..6dbe01dd8 100644
--- a/components/vc-tree/NodeList.tsx
+++ b/components/vc-tree/NodeList.tsx
@@ -94,8 +94,7 @@ export default defineComponent({
name: 'NodeList',
inheritAttrs: false,
props: nodeListProps,
- slots: ['checkable'],
- setup(props, { expose, attrs, slots }) {
+ setup(props, { expose, attrs }) {
// =============================== Ref ================================
const listRef = ref(null);
const indentMeasurerRef = ref(null);
@@ -310,7 +309,6 @@ export default defineComponent({
onMousemove={() => {
onActiveChange(null);
}}
- v-slots={slots}
/>
);
}}
diff --git a/components/vc-tree/Tree.tsx b/components/vc-tree/Tree.tsx
index 3f71b860c..e6a7b023f 100644
--- a/components/vc-tree/Tree.tsx
+++ b/components/vc-tree/Tree.tsx
@@ -34,7 +34,7 @@ import classNames from '../_util/classNames';
export default defineComponent({
name: 'Tree',
inheritAttrs: false,
- slots: ['checkable'],
+ slots: ['checkable', 'title', 'icon'],
props: initDefaultProps(treeProps(), {
prefixCls: 'vc-tree',
showLine: false,
@@ -982,7 +982,7 @@ export default defineComponent({
tabindex = 0,
selectable,
showIcon,
- icon,
+ icon = slots.icon,
switcherIcon,
draggable,
checkable,
@@ -994,7 +994,6 @@ export default defineComponent({
height,
itemHeight,
virtual,
- titleRender,
dropIndicatorRender,
onContextmenu,
onScroll,
@@ -1014,6 +1013,7 @@ export default defineComponent({
switcherIcon,
draggable,
checkable,
+ customCheckable: slots.checkable,
checkStrictly,
disabled,
keyEntities: keyEntities.value,
@@ -1029,7 +1029,7 @@ export default defineComponent({
loadData,
filterTreeNode,
- titleRender,
+ titleRender: slots.title,
onNodeClick,
onNodeDoubleClick,
@@ -1084,7 +1084,6 @@ export default defineComponent({
onScroll={onScroll}
{...treeNodeRequiredProps.value}
{...domProps}
- v-slots={slots}
/>
diff --git a/components/vc-tree/TreeNode.tsx b/components/vc-tree/TreeNode.tsx
index 83a70d556..0326bdd8d 100644
--- a/components/vc-tree/TreeNode.tsx
+++ b/components/vc-tree/TreeNode.tsx
@@ -293,7 +293,7 @@ export default defineComponent({
)}
onClick={onCheck}
>
- {slots.checkable?.()}
+ {context.value.customCheckable?.()}
);
};
diff --git a/components/vc-tree/contextTypes.ts b/components/vc-tree/contextTypes.ts
index 0ec4d032f..29fcd75c3 100644
--- a/components/vc-tree/contextTypes.ts
+++ b/components/vc-tree/contextTypes.ts
@@ -41,7 +41,8 @@ export interface TreeContextProps {
icon: IconType;
switcherIcon: IconType;
draggable: ((node: DataNode) => boolean) | boolean;
- checkable: boolean | VueNode;
+ checkable: boolean;
+ customCheckable: () => any;
checkStrictly: boolean;
disabled: boolean;
keyEntities: Record
;
diff --git a/components/vc-tree/props.ts b/components/vc-tree/props.ts
index 9ac8eb0fc..73ff94ffa 100644
--- a/components/vc-tree/props.ts
+++ b/components/vc-tree/props.ts
@@ -132,7 +132,7 @@ export const treeProps = () => ({
defaultSelectedKeys: { type: Array as PropType },
selectedKeys: { type: Array as PropType },
allowDrop: { type: Function as PropType },
- titleRender: { type: Function as PropType<(node: DataNode) => any> },
+ // titleRender: { type: Function as PropType<(node: DataNode) => any> },
dropIndicatorRender: {
type: Function as PropType<
(props: {
diff --git a/examples/App.vue b/examples/App.vue
index ed81c908f..cb7db35dd 100644
--- a/examples/App.vue
+++ b/examples/App.vue
@@ -2,60 +2,44 @@
- sss
-
+ />