New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix(VMenu): wrong item highlighted #14972
base: v2-stable
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This change removes focus highlighting for non-selected items (try using a menu with just the keyboard). It also doesn't fully fix the problem, some items are still skipped because tiles
includes the divider but filteredTiles
doesn't (select the first three items then use arrow keys).
Posted playground is for treeview, here's one from the linked issue with a regular menu added too:
<template>
<v-app>
<v-container>
<v-select
v-model="selectedFruits"
:items="fruits"
label="Favorite Fruits"
multiple
>
<template #prepend-item>
<v-list-item
ripple
@click="toggle"
>
<v-list-item-action>
<v-icon :color="selectedFruits.length > 0 ? 'indigo darken-4' : ''">
{{ icon }}
</v-icon>
</v-list-item-action>
<v-list-item-content>
<v-list-item-title>
Select All
</v-list-item-title>
</v-list-item-content>
</v-list-item>
<v-divider class="mt-2"></v-divider>
</template>
<template #append-item>
<v-divider class="mb-2"></v-divider>
<v-list-item disabled>
<v-list-item-avatar color="grey lighten-3">
<v-icon>
mdi-food-apple
</v-icon>
</v-list-item-avatar>
<v-list-item-content v-if="likesAllFruit">
<v-list-item-title>
Holy smokes, someone call the fruit police!
</v-list-item-title>
</v-list-item-content>
<v-list-item-content v-else-if="likesSomeFruit">
<v-list-item-title>
Fruit Count
</v-list-item-title>
<v-list-item-subtitle>
{{ selectedFruits.length }}
</v-list-item-subtitle>
</v-list-item-content>
<v-list-item-content v-else>
<v-list-item-title>
How could you not like fruit?
</v-list-item-title>
<v-list-item-subtitle>
Go ahead, make a selection above!
</v-list-item-subtitle>
</v-list-item-content>
</v-list-item>
</template>
</v-select>
<v-menu>
<template #activator="{ props, on }">
<v-btn
v-bind="props"
v-on="on"
>Plain menu</v-btn>
</template>
<v-list>
<v-list-item
v-for="i in fruits"
:key="i"
:value="i"
@click="clicked(i)"
>
<v-list-item-title>{{ i }}</v-list-item-title>
</v-list-item>
</v-list>
</v-menu>
</v-container>
</v-app>
</template>
<script>
export default {
data: () => ({
fruits: [
'Apples',
'Apricots',
'Avocado',
'Bananas',
'Blueberries',
'Blackberries',
'Boysenberries',
'Bread fruit',
'Cantaloupes (cantalope)',
'Cherries',
'Cranberries',
'Cucumbers',
'Currants',
'Dates',
'Eggplant',
'Figs',
'Grapes',
'Grapefruit',
'Guava',
'Honeydew melons',
'Huckleberries',
'Kiwis',
'Kumquat',
'Lemons',
'Limes',
'Mangos',
'Mulberries',
'Muskmelon',
'Nectarines',
'Olives',
'Oranges',
'Papaya',
'Peaches',
'Pears',
'Persimmon',
'Pineapple',
'Plums',
'Pomegranate',
'Raspberries',
'Rose Apple',
'Starfruit',
'Strawberries',
'Tangerines',
'Tomatoes',
'Watermelons',
'Zucchini',
],
selectedFruits: [],
}),
computed: {
likesAllFruit () {
return this.selectedFruits.length === this.fruits.length
},
likesSomeFruit () {
return this.selectedFruits.length > 0 && !this.likesAllFruit
},
icon () {
if (this.likesAllFruit) return 'mdi-close-box'
if (this.likesSomeFruit) return 'mdi-minus-box'
return 'mdi-checkbox-blank-outline'
},
},
methods: {
toggle () {
this.$nextTick(() => {
if (this.likesAllFruit) {
this.selectedFruits = []
} else {
this.selectedFruits = this.fruits.slice()
}
})
},
clicked (val) {
console.log(val)
},
},
}
</script>
Fix wrong item higlighted when using prepend-item slot on v-select. Include prepend and append items when determining the index. vuetifyjs#14972
Fix wrong item highlight when using prepend-item slot on v-select. Include prepnd and append items when determining the index. vuetifyjs#14972
Fix wrong item highlight when using prepend-item slot on v-select. Include prepnd and append items when determining the index. vuetifyjs#14972
Retested with keyboard and with mouse on both treeview and regular menu. |
Was this PR still waiting on changes? |
No more changes have been requested. I requested another review. |
@KaelWD Do you have time to take another look at the changes? |
Description
Fix Wrong item highlighted when using prepend-item slot on v-select. Exclude prepend items from the list of options by returning only valid selection options for highlight. Don't highlight option when deselecting.
Motivation and Context
resolves #14489
How Has This Been Tested?
Manually tested using the playground.vue code below. This code is taken from the vuetify select component page
https://vuetifyjs.com/en/components/selects/#append-and-prepend-item
Markup:
Types of changes
Checklist:
master
for bug fixes and documentation updates,dev
for new features and backwards compatible changes andnext
for non-backwards compatible changes).