GitHub

@@ -5,7 +5,7 @@ import type { AppConfig } from '@nuxt/schema'

55

import theme from '#build/ui/input-menu'

66

import type { UseComponentIconsProps } from '../composables/useComponentIcons'

77

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'

991010

type InputMenu = ComponentConfig<typeof theme, AppConfig, 'inputMenu'>

1111

@@ -183,7 +183,7 @@ import { useComponentIcons } from '../composables/useComponentIcons'

183183

import { useFormField } from '../composables/useFormField'

184184

import { useLocale } from '../composables/useLocale'

185185

import { usePortal } from '../composables/usePortal'

186-

import { compare, get, isArrayOfArray } from '../utils'

186+

import { compare, get, getDisplayValue, isArrayOfArray } from '../utils'

187187

import { tv } from '../utils/tv'

188188

import UIcon from './Icon.vue'

189189

import UAvatar from './Avatar.vue'

@@ -233,9 +233,11 @@ const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.ui?.inputMenu ||

233233

buttonGroup: orientation.value

234234

}))

235235236-

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+

}) ?? ''

239241

}

240242241243

const groups = computed<InputMenuItem[][]>(() =>

@@ -246,7 +248,7 @@ const groups = computed<InputMenuItem[][]>(() =>

246248

: []

247249

)

248250

// 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[])

250252251253

const filteredGroups = computed(() => {

252254

if (props.ignoreFilter || !searchTerm.value) {

@@ -441,7 +443,7 @@ defineExpose({

441443

<TagsInputItem v-for="(item, index) in tags" :key="index" :value="item" :class="ui.tagsItem({ class: [props.ui?.tagsItem, isInputItem(item) && item.ui?.tagsItem] })">

442444

<TagsInputItemText :class="ui.tagsItemText({ class: [props.ui?.tagsItemText, isInputItem(item) && item.ui?.tagsItemText] })">

443445

<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>) }}

445447

</slot>

446448

</TagsInputItemText>

447449

Read the original on github.com ↗