fix(InputMenu/SelectMenu): prevent disabled items to be selected

Resolves #3474
This commit is contained in:
Benjamin Canac
2025-04-08 14:43:58 +02:00
parent d339dcbfb8
commit 8435a0fe16
10 changed files with 1200 additions and 1175 deletions

View File

@@ -364,10 +364,22 @@ function onRemoveTag(event: any) {
}
}
function onSelect(e: Event, item: InputMenuItem) {
if (!isInputItem(item)) {
return
}
if (item.disabled) {
e.preventDefault()
return
}
item.onSelect?.(e)
}
function isInputItem(item: InputMenuItem): item is _InputMenuItem {
return typeof item === 'object' && item !== null
}
defineExpose({
inputRef
})
@@ -493,7 +505,7 @@ defineExpose({
:class="ui.item({ class: props.ui?.item })"
:disabled="isInputItem(item) && item.disabled"
:value="props.valueKey && isInputItem(item) ? get(item, String(props.valueKey)) : item"
@select="isInputItem(item) && item.onSelect?.($event)"
@select="onSelect($event, item)"
>
<slot name="item" :item="(item as NestedItem<T>)" :index="index">
<slot name="item-leading" :item="(item as NestedItem<T>)" :index="index">

View File

@@ -326,6 +326,19 @@ function onUpdateOpen(value: boolean) {
}
}
function onSelect(e: Event, item: SelectMenuItem) {
if (!isSelectItem(item)) {
return
}
if (item.disabled) {
e.preventDefault()
return
}
item.onSelect?.(e)
}
function isSelectItem(item: SelectMenuItem): item is _SelectMenuItem {
return typeof item === 'object' && item !== null
}
@@ -417,7 +430,7 @@ function isSelectItem(item: SelectMenuItem): item is _SelectMenuItem {
:class="ui.item({ class: props.ui?.item })"
:disabled="isSelectItem(item) && item.disabled"
:value="props.valueKey && isSelectItem(item) ? get(item, props.valueKey as string) : item"
@select="isSelectItem(item) && item.onSelect?.($event)"
@select="onSelect($event, item)"
>
<slot name="item" :item="(item as NestedItem<T>)" :index="index">
<slot name="item-leading" :item="(item as NestedItem<T>)" :index="index">