feat(components): [tree-v2] add slot empty (#18980)

* feat(components): [tree-v2] add slot `empty`

* prettier format

Co-authored-by: sea <45450994+warmthsea@users.noreply.github.com>

* fix: prettier format

* test: add test case

---------

Co-authored-by: sea <45450994+warmthsea@users.noreply.github.com>
This commit is contained in:
知晓同丶
2024-11-21 20:49:50 +08:00
committed by GitHub
parent 2bef172a07
commit 9bf729fbeb
3 changed files with 31 additions and 7 deletions

View File

@@ -145,6 +145,7 @@ tree-v2/filter
## TreeV2 Slots
| Name | Description |
| ---- | ---------------------------------------------------------------------------------------------- |
| - | Custom content for tree nodes. The scope parameter is `{ node: TreeNode, data: TreeNodeData }` |
| Name | Description |
| -------------- | ---------------------------------------------------------------------------------------------- |
| - | Custom content for tree nodes. The scope parameter is `{ node: TreeNode, data: TreeNodeData }` |
| empty ^(2.9.0) | empty you can customize content when data is empty. |

View File

@@ -98,6 +98,7 @@ const createTree = (
methods?: TreeEvents
slots?: {
default?: string
empty?: string
}
} = {}
) => {
@@ -106,6 +107,11 @@ const createTree = (
options.slots.default &&
`<template #default="{node}">${options.slots.default}</template>`) ||
''
const emptySlot =
(options.slots &&
options.slots.empty &&
`<template #empty>${options.slots.empty}</template>`) ||
''
const wrapper = _mount(
`
<el-tree
@@ -132,7 +138,7 @@ const createTree = (
@check="onNodeCheck"
@current-change="onCurrentChange"
@node-contextmenu="onNodeContextMenu"
>${defaultSlot}</el-tree>
>${defaultSlot}${emptySlot}</el-tree>
`,
{
data() {
@@ -234,6 +240,21 @@ describe('Virtual Tree', () => {
expect(wrapper.find('.el-tree__empty-text').text()).toBe(emptyText)
})
test('render slot empty', async () => {
const { wrapper } = createTree({
data() {
return {
data: [],
}
},
slots: {
empty: `<div class="empty-slot-wrapper">empty</div>`,
},
})
await nextTick()
expect(wrapper.find('.empty-slot-wrapper').exists()).toBeTruthy()
})
test('height', async () => {
const { wrapper } = createTree({
data() {

View File

@@ -34,9 +34,11 @@
</template>
</fixed-size-list>
<div v-else :class="ns.e('empty-block')">
<span :class="ns.e('empty-text')">{{
emptyText ?? t('el.tree.emptyText')
}}</span>
<slot name="empty">
<span :class="ns.e('empty-text')">
{{ emptyText ?? t('el.tree.emptyText') }}
</span>
</slot>
</div>
</div>
</template>