Skip to content

Commit 3cbe7a4

Browse files
committed
refactor(VTreeviewItem): reuse VListItem link and clean-up code
improves #19919
1 parent cda9307 commit 3cbe7a4

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

packages/vuetify/src/components/VList/VListItem.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,7 @@ export const VListItem = genericComponent<VListItemSlots>()({
385385
select,
386386
root,
387387
id: uid,
388+
link,
388389
}
389390
},
390391
})

packages/vuetify/src/labs/VTreeview/VTreeviewItem.tsx

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import { VProgressCircular } from '@/components/VProgressCircular'
99

1010
// Composables
1111
import { IconValue } from '@/composables/icons'
12-
import { useLink } from '@/composables/router'
1312

1413
// Utilities
1514
import { computed, inject, ref, toRaw } from 'vue'
@@ -32,29 +31,32 @@ export const VTreeviewItem = genericComponent<VListItemSlots>()({
3231

3332
props: makeVTreeviewItemProps(),
3433

35-
setup (props, { attrs, slots, emit }) {
36-
const link = useLink(props, attrs)
34+
setup (props, { slots }) {
35+
const visibleIds = inject(VTreeviewSymbol, { visibleIds: ref() }).visibleIds
36+
3737
const vListItemRef = ref<VListItem>()
3838

3939
const isActivatableGroupActivator = computed(() =>
4040
(vListItemRef.value?.root.activatable.value) &&
4141
vListItemRef.value?.isGroupActivator
4242
)
43-
43+
const vListItemRefIsClickable = computed(() => (
44+
vListItemRef.value?.link.isClickable.value ||
45+
(props.value != null && !!vListItemRef.value?.list)
46+
))
4447
const isClickable = computed(() =>
4548
!props.disabled &&
4649
props.link !== false &&
47-
(props.link || link.isClickable.value || (props.value != null && !!vListItemRef.value?.list) || isActivatableGroupActivator.value)
50+
(props.link || vListItemRefIsClickable.value || isActivatableGroupActivator.value)
4851
)
52+
const isFiltered = computed(() => visibleIds.value && !visibleIds.value.has(toRaw(vListItemRef.value?.id)))
4953

5054
function activateGroupActivator (e: MouseEvent | KeyboardEvent) {
5155
if (isClickable.value && isActivatableGroupActivator.value) {
5256
vListItemRef.value?.activate(!vListItemRef.value?.isActivated, e)
5357
}
5458
}
5559

56-
const visibleIds = inject(VTreeviewSymbol, { visibleIds: ref() }).visibleIds
57-
5860
useRender(() => {
5961
const listItemProps = omit(VListItem.filterProps(props), ['onClick'])
6062
const hasPrepend = slots.prepend || props.toggleIcon
@@ -68,7 +70,7 @@ export const VTreeviewItem = genericComponent<VListItemSlots>()({
6870
'v-treeview-item',
6971
{
7072
'v-treeview-item--activatable-group-activator': isActivatableGroupActivator.value,
71-
'v-treeview-item--filtered': visibleIds.value && !visibleIds.value.has(toRaw(vListItemRef.value?.id)),
73+
'v-treeview-item--filtered': isFiltered.value,
7274
},
7375
props.class,
7476
]}

0 commit comments

Comments
 (0)