@@ -40,7 +40,7 @@ import type { ActiveStrategy } from './activeStrategies'
4040import type { OpenStrategy } from './openStrategies'
4141import type { SelectStrategy } from './selectStrategies'
4242import type { ListItem } from '@/composables/list-items'
43- import type { EventProp } from '@/util'
43+ import type { EventProp , ValueComparator } from '@/util'
4444
4545export type ActiveStrategyProp =
4646 | 'single-leaf'
@@ -153,10 +153,12 @@ export const useNested = (
153153 items,
154154 returnObject,
155155 scrollToActive,
156+ valueComparator,
156157 } : {
157158 items : Ref < ListItem [ ] >
158159 returnObject : MaybeRefOrGetter < boolean >
159160 scrollToActive : MaybeRefOrGetter < boolean >
161+ valueComparator ?: MaybeRefOrGetter < ValueComparator | undefined >
160162 } ,
161163) => {
162164 let isUnmounted = false
@@ -212,18 +214,49 @@ export const useNested = (
212214 }
213215 } )
214216
217+ const flatItems = computed ( ( ) => {
218+ const flat : ListItem [ ] = [ ]
219+ const stack = [ ...items . value ]
220+ while ( stack . length ) {
221+ const item = stack . pop ( ) !
222+ flat . push ( item )
223+ if ( item . children ) stack . push ( ...item . children )
224+ }
225+ return flat
226+ } )
227+
228+ function resolveValue ( value : unknown ) : unknown {
229+ const comparator = toValue ( valueComparator )
230+ if ( ! comparator ) return value
231+ const _returnObject = toValue ( returnObject )
232+ for ( const item of flatItems . value ) {
233+ const itemVal = _returnObject ? toRaw ( item . raw ) : item . value
234+ if ( comparator ( value , itemVal ) ) return itemVal
235+ }
236+ return value
237+ }
238+
215239 const activated = useProxiedModel (
216240 props ,
217241 'activated' ,
218242 props . activated ,
219- v => activeStrategy . value . in ( v , children . value , parents . value ) ,
243+ v => activeStrategy . value . in (
244+ Array . isArray ( v ) ? v . map ( resolveValue ) : v ,
245+ children . value ,
246+ parents . value ,
247+ ) ,
220248 v => activeStrategy . value . out ( v , children . value , parents . value ) ,
221249 )
222250 const selected = useProxiedModel (
223251 props ,
224252 'selected' ,
225253 props . selected ,
226- v => selectStrategy . value . in ( v , children . value , parents . value , disabled . value ) ,
254+ v => selectStrategy . value . in (
255+ Array . isArray ( v ) ? v . map ( resolveValue ) : v ,
256+ children . value ,
257+ parents . value ,
258+ disabled . value ,
259+ ) ,
227260 v => selectStrategy . value . out ( v , children . value , parents . value ) ,
228261 )
229262
0 commit comments