Skip to content

Commit c8b01c9

Browse files
authored
feat(Tree): provide additional slot props (#5194)
1 parent a74879b commit c8b01c9

File tree

1 file changed

+25
-8
lines changed

1 file changed

+25
-8
lines changed

src/runtime/components/Tree.vue

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,16 @@ export interface TreeProps<T extends TreeItem[] = TreeItem[], M extends boolean
105105
106106
export type TreeEmits<T extends TreeItem[] = TreeItem[], M extends boolean = false> = TreeRootEmits<T[number], M>
107107
108-
type SlotProps<T extends TreeItem> = (props: { item: T, index: number, level: number, expanded: boolean, selected: boolean }) => any
108+
type SlotProps<T extends TreeItem> = (props: {
109+
item: T
110+
index: number
111+
level: number
112+
expanded: boolean
113+
selected: boolean
114+
indeterminate: boolean | undefined
115+
handleSelect: () => void
116+
handleToggle: () => void
117+
}) => any
109118
110119
export type TreeSlots<
111120
T extends TreeItem[] = TreeItem[]
@@ -115,7 +124,15 @@ export type TreeSlots<
115124
'item-leading': SlotProps<T[number]>
116125
'item-label': SlotProps<T[number]>
117126
'item-trailing': SlotProps<T[number]>
118-
} & DynamicSlots<T[number], undefined, { index: number, level: number, expanded: boolean, selected: boolean }>
127+
} & DynamicSlots<T[number], undefined, {
128+
index: number
129+
level: number
130+
expanded: boolean
131+
selected: boolean
132+
indeterminate: boolean | undefined
133+
handleSelect: () => void
134+
handleToggle: () => void
135+
}>
119136
120137
</script>
121138

@@ -217,7 +234,7 @@ const defaultExpanded = computed(() =>
217234
<template>
218235
<DefineItemTemplate v-slot="{ item, index, level }">
219236
<TreeItem
220-
v-slot="{ isExpanded, isSelected }"
237+
v-slot="{ isExpanded, isSelected, isIndeterminate, handleSelect, handleToggle }"
221238
:level="level"
222239
:value="item"
223240
:class="!!nested && level > 1 ? ui.itemWithChildren({ class: [props.ui?.itemWithChildren, item.ui?.itemWithChildren] }) : ui.item({ class: [props.ui?.item, item.ui?.item] })"
@@ -226,7 +243,7 @@ const defaultExpanded = computed(() =>
226243
>
227244
<slot
228245
:name="((item.slot ? `${item.slot}-wrapper` : 'item-wrapper') as keyof TreeSlots<T>)"
229-
v-bind="{ index, level, expanded: isExpanded, selected: isSelected }"
246+
v-bind="{ index, level, expanded: isExpanded, selected: isSelected, indeterminate: isIndeterminate, handleSelect, handleToggle }"
230247
:item="(item as Extract<T[number], { slot: string; }>)"
231248
>
232249
<button
@@ -238,12 +255,12 @@ const defaultExpanded = computed(() =>
238255
>
239256
<slot
240257
:name="((item.slot || 'item') as keyof TreeSlots<T>)"
241-
v-bind="{ index, level, expanded: isExpanded, selected: isSelected }"
258+
v-bind="{ index, level, expanded: isExpanded, selected: isSelected, indeterminate: isIndeterminate, handleSelect, handleToggle }"
242259
:item="(item as Extract<T[number], { slot: string; }>)"
243260
>
244261
<slot
245262
:name="((item.slot ? `${item.slot}-leading`: 'item-leading') as keyof TreeSlots<T>)"
246-
v-bind="{ index, level, expanded: isExpanded, selected: isSelected }"
263+
v-bind="{ index, level, expanded: isExpanded, selected: isSelected, indeterminate: isIndeterminate, handleSelect, handleToggle }"
247264
:item="(item as Extract<T[number], { slot: string; }>)"
248265
>
249266
<UIcon
@@ -264,7 +281,7 @@ const defaultExpanded = computed(() =>
264281
>
265282
<slot
266283
:name="((item.slot ? `${item.slot}-label`: 'item-label') as keyof TreeSlots<T>)"
267-
v-bind="{ index, level, expanded: isExpanded, selected: isSelected }"
284+
v-bind="{ index, level, expanded: isExpanded, selected: isSelected, indeterminate: isIndeterminate, handleSelect, handleToggle }"
268285
:item="(item as Extract<T[number], { slot: string; }>)"
269286
>
270287
{{ getItemLabel(item) }}
@@ -277,7 +294,7 @@ const defaultExpanded = computed(() =>
277294
>
278295
<slot
279296
:name="((item.slot ? `${item.slot}-trailing`: 'item-trailing') as keyof TreeSlots<T>)"
280-
v-bind="{ index, level, expanded: isExpanded, selected: isSelected }"
297+
v-bind="{ index, level, expanded: isExpanded, selected: isSelected, indeterminate: isIndeterminate, handleSelect, handleToggle }"
281298
:item="(item as Extract<T[number], { slot: string; }>)"
282299
>
283300
<UIcon

0 commit comments

Comments
 (0)