@@ -5,7 +5,7 @@ import type { AppConfig } from '@nuxt/schema'
5
5
import theme from ' #build/ui/input-menu'
6
6
import type { UseComponentIconsProps } from ' ../composables/useComponentIcons'
7
7
import type { AvatarProps , ChipProps , InputProps } from ' ../types'
8
- import type { AcceptableValue , ArrayOrNested , GetItemKeys , GetModelValue , GetModelValueEmits , NestedItem , EmitsToProps , ComponentConfig } from ' ../types/utils'
8
+ import type { AcceptableValue , ArrayOrNested , GetItemKeys , GetItemValue , GetModelValue , GetModelValueEmits , NestedItem , EmitsToProps , ComponentConfig } from ' ../types/utils'
9
9
10
10
type InputMenu = ComponentConfig <typeof theme , AppConfig , ' inputMenu' >
11
11
@@ -183,7 +183,7 @@ import { useComponentIcons } from '../composables/useComponentIcons'
183
183
import { useFormField } from ' ../composables/useFormField'
184
184
import { useLocale } from ' ../composables/useLocale'
185
185
import { usePortal } from ' ../composables/usePortal'
186
- import { compare , get , isArrayOfArray } from ' ../utils'
186
+ import { compare , get , getDisplayValue , isArrayOfArray } from ' ../utils'
187
187
import { tv } from ' ../utils/tv'
188
188
import UIcon from ' ./Icon.vue'
189
189
import UAvatar from ' ./Avatar.vue'
@@ -233,9 +233,11 @@ const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.ui?.inputMenu ||
233
233
buttonGroup: orientation .value
234
234
}))
235
235
236
- function displayValue(value : T ): string {
237
- const item = items .value .find (item => compare (typeof item === ' object' && props .valueKey ? get (item as Record <string , any >, props .valueKey as string ) : item , value ))
238
- return item && (typeof item === ' object' ? get (item , props .labelKey as string ) : item )
236
+ function displayValue(value : GetItemValue <T , VK >): string {
237
+ return getDisplayValue (items .value , value , {
238
+ labelKey: props .labelKey ,
239
+ valueKey: props .valueKey
240
+ }) ?? ' '
239
241
}
240
242
241
243
const groups = computed <InputMenuItem [][]>(() =>
@@ -246,7 +248,7 @@ const groups = computed<InputMenuItem[][]>(() =>
246
248
: []
247
249
)
248
250
// eslint-disable-next-line vue/no-dupe-keys
249
- const items = computed (() => groups .value .flatMap (group => group ))
251
+ const items = computed (() => groups .value .flatMap (group => group ) as T [] )
250
252
251
253
const filteredGroups = computed (() => {
252
254
if (props .ignoreFilter || ! searchTerm .value ) {
@@ -441,7 +443,7 @@ defineExpose({
441
443
<TagsInputItem v-for =" (item, index) in tags" :key =" index" :value =" item" :class =" ui.tagsItem({ class: [props.ui?.tagsItem, isInputItem(item) && item.ui?.tagsItem] })" >
442
444
<TagsInputItemText :class =" ui.tagsItemText({ class: [props.ui?.tagsItemText, isInputItem(item) && item.ui?.tagsItemText] })" >
443
445
<slot name =" tags-item-text" :item =" (item as NestedItem<T>)" :index =" index" >
444
- {{ displayValue(item as T) ?? item }}
446
+ {{ displayValue(item as GetItemValue< T , VK >) }}
445
447
</slot >
446
448
</TagsInputItemText >
447
449
0 commit comments