Skip to content

Commit 2071eda

Browse files
authored
feat(tree): add ellipsis prop (#6817)
1 parent e005249 commit 2071eda

File tree

5 files changed

+78
-1
lines changed

5 files changed

+78
-1
lines changed

src/tree/demos/enUS/index.demo-entry.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ override-click-behavior.vue
5555
| expand-on-dragenter | `boolean` | `true` | Whether to expand nodes after dragenter. | |
5656
| expand-on-click | `boolean` | `false` | Whether to expand or collapse nodes after click. | 2.29.1 |
5757
| expanded-keys | `Array<string \| number>` | `undefined` | If set, expanded status will work in controlled manner. | |
58+
| ellipsis | `boolean` | `false` | Whether to ellipsis the text that exceeds the width. | |
5859
| filter | `(pattern: string, node: TreeOption) => boolean` | A simple string based filter. | The function that filter tree nodes based on pattern. | |
5960
| get-children | `(option: any) => unknown` | `undefined` | Get children of the option. | 2.34.3 |
6061
| indent | `number` | `24` | Indent of per level of the tree. | 2.9.0 |

src/tree/demos/zhCN/ellipsis.demo.vue

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<markdown>
2+
# 省略
3+
4+
有时候节点的文本会很长,可以使用 `ellipsis` 来省略文本。
5+
</markdown>
6+
7+
<script lang="ts">
8+
import type { TreeOption } from 'naive-ui'
9+
import { repeat } from 'seemly'
10+
import { defineComponent, ref } from 'vue'
11+
12+
function createData(level = 4, baseKey = ''): TreeOption[] | undefined {
13+
if (!level)
14+
return undefined
15+
return repeat(6 - level, undefined).map((_, index) => {
16+
const key = `${baseKey}${level}${index}`
17+
const label = createLabel(level)
18+
return {
19+
label,
20+
key,
21+
children: createData(level - 1, key)
22+
}
23+
})
24+
}
25+
26+
function createLabel(level: number): string {
27+
if (level === 4)
28+
return '站在能分割世界的桥 还是看不清 在那些时刻 遮蔽我们 黑暗的心 究竟是什么'
29+
if (level === 3)
30+
return '住在我心里孤独的 孤独的海怪 痛苦之王 开始厌倦 深海的光 停滞的海浪 你的心里 有没有一点点想念我'
31+
if (level === 2)
32+
return '站在能看到灯火的桥 还是看不清 在那些夜晚 照亮我们 黑暗的心 究竟是什么'
33+
if (level === 1)
34+
return '于是他默默追逐着 横渡海峡 年轻的人 看着他们 为了彼岸 骄傲的 骄傲的 灭亡'
35+
return ''
36+
}
37+
38+
export default defineComponent({
39+
setup() {
40+
return {
41+
data: createData(),
42+
defaultExpandedKeys: ref(['40', '41'])
43+
}
44+
}
45+
})
46+
</script>
47+
48+
<template>
49+
<n-tree
50+
ellipsis
51+
:data="data"
52+
:default-expanded-keys="defaultExpandedKeys"
53+
:selectable="false"
54+
/>
55+
</template>

src/tree/demos/zhCN/index.demo-entry.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ node-props.vue
2424
show-line.vue
2525
checkbox-placement.vue
2626
override-click-behavior.vue
27+
ellipsis.vue
2728
check-strategy-debug.vue
2829
change-debug.vue
2930
scrollbar-debug.vue
@@ -58,6 +59,7 @@ expand-debug.vue
5859
| default-expanded-keys | `Array<string \| number>` | `[]` | 默认展开项 | |
5960
| default-selected-keys | `Array<string \| number>` | `[]` | 默认选中的节点 | |
6061
| draggable | `boolean` | `false` | 是否可拖拽 | |
62+
| ellipsis | `boolean` | `false` | 是否省略超出宽度的文本 | |
6163
| expand-on-dragenter | `boolean` | `true` | 是否在拖入后展开节点 | |
6264
| expand-on-click | `boolean` | `false` | 是否在点击节点后展开或收缩节点 | 2.29.1 |
6365
| expanded-keys | `Array<string \| number>` | `undefined` | 如果设定则展开受控 | |

src/tree/src/Tree.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,10 @@ export const treeProps = {
274274
type: Boolean,
275275
default: true
276276
},
277+
ellipsis: {
278+
type: Boolean,
279+
default: false
280+
},
277281
checkboxPlacement: {
278282
type: String as PropType<'left' | 'right'>,
279283
default: 'left'
@@ -1748,6 +1752,7 @@ export default defineComponent({
17481752
blockLine,
17491753
draggable,
17501754
disabled,
1755+
ellipsis,
17511756
internalFocusable,
17521757
checkable,
17531758
handleKeydown,
@@ -1762,7 +1767,8 @@ export default defineComponent({
17621767
rtlEnabled && `${mergedClsPrefix}-tree--rtl`,
17631768
checkable && `${mergedClsPrefix}-tree--checkable`,
17641769
(blockLine || blockNode) && `${mergedClsPrefix}-tree--block-node`,
1765-
blockLine && `${mergedClsPrefix}-tree--block-line`
1770+
blockLine && `${mergedClsPrefix}-tree--block-line`,
1771+
ellipsis && `${mergedClsPrefix}-tree--ellipsis`
17661772
]
17671773
const createNode = (tmNode: TmNode | MotionData): VNode => {
17681774
return '__motion' in tmNode ? (

src/tree/src/styles/index.cssr.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,19 @@ export default cB('tree', `
127127
`)
128128
])
129129
]),
130+
cM('ellipsis', [
131+
cB('tree-node', [
132+
cB('tree-node-content', `
133+
overflow: hidden;
134+
`, [
135+
cE('text', `
136+
text-overflow: ellipsis;
137+
white-space: nowrap;
138+
overflow: hidden;
139+
`)
140+
])
141+
])
142+
]),
130143
cB('tree-node-indent', `
131144
flex-grow: 0;
132145
flex-shrink: 0;

0 commit comments

Comments
 (0)