@@ -73,14 +73,15 @@ type NestedProvide = {
73
73
isGroupActivator ?: boolean
74
74
root : {
75
75
children : Ref < Map < unknown , unknown [ ] > >
76
+ disabled : Ref < Set < unknown > >
76
77
parents : Ref < Map < unknown , unknown > >
77
78
activatable : Ref < boolean >
78
79
selectable : Ref < boolean >
79
80
opened : Ref < Set < unknown > >
80
81
activated : Ref < Set < unknown > >
81
82
selected : Ref < Map < unknown , 'on' | 'off' | 'indeterminate' > >
82
83
selectedValues : Ref < unknown [ ] >
83
- register : ( id : unknown , parentId : unknown , isGroup ?: boolean ) => void
84
+ register : ( id : unknown , parentId : unknown , isDisabled : boolean , isGroup ?: boolean ) => void
84
85
unregister : ( id : unknown ) => void
85
86
open : ( id : unknown , value : boolean , event ?: Event ) => void
86
87
activate : ( id : unknown , value : boolean , event ?: Event ) => void
@@ -99,6 +100,7 @@ export const emptyNested: NestedProvide = {
99
100
unregister : ( ) => null ,
100
101
parents : ref ( new Map ( ) ) ,
101
102
children : ref ( new Map ( ) ) ,
103
+ disabled : ref ( new Set ( ) ) ,
102
104
open : ( ) => null ,
103
105
openOnSelect : ( ) => null ,
104
106
activate : ( ) => null ,
@@ -128,6 +130,7 @@ export const makeNestedProps = propsFactory({
128
130
export const useNested = ( props : NestedProps ) => {
129
131
let isUnmounted = false
130
132
const children = ref ( new Map < unknown , unknown [ ] > ( ) )
133
+ const disabled = ref ( new Set < unknown > ( ) )
131
134
const parents = ref ( new Map < unknown , unknown > ( ) )
132
135
133
136
const opened = useProxiedModel ( props , 'opened' , props . opened , v => new Set ( v ) , v => [ ...v . values ( ) ] )
@@ -181,7 +184,7 @@ export const useNested = (props: NestedProps) => {
181
184
props ,
182
185
'selected' ,
183
186
props . selected ,
184
- v => selectStrategy . value . in ( v , children . value , parents . value ) ,
187
+ v => selectStrategy . value . in ( v , children . value , disabled . value , parents . value ) ,
185
188
v => selectStrategy . value . out ( v , children . value , parents . value ) ,
186
189
)
187
190
@@ -222,7 +225,7 @@ export const useNested = (props: NestedProps) => {
222
225
223
226
return arr
224
227
} ) ,
225
- register : ( id , parentId , isGroup ) => {
228
+ register : ( id , parentId , isDisabled , isGroup ) => {
226
229
if ( nodeIds . has ( id ) ) {
227
230
const path = getPath ( id ) . map ( String ) . join ( ' -> ' )
228
231
const newPath = getPath ( parentId ) . concat ( id ) . map ( String ) . join ( ' -> ' )
@@ -234,6 +237,7 @@ export const useNested = (props: NestedProps) => {
234
237
235
238
parentId && id !== parentId && parents . value . set ( id , parentId )
236
239
240
+ isDisabled && disabled . value . add ( id )
237
241
isGroup && children . value . set ( id , [ ] )
238
242
239
243
if ( parentId != null ) {
@@ -245,6 +249,7 @@ export const useNested = (props: NestedProps) => {
245
249
246
250
nodeIds . delete ( id )
247
251
children . value . delete ( id )
252
+ disabled . value . delete ( id )
248
253
const parent = parents . value . get ( id )
249
254
if ( parent ) {
250
255
const list = children . value . get ( parent ) ?? [ ]
@@ -286,6 +291,7 @@ export const useNested = (props: NestedProps) => {
286
291
value,
287
292
selected : new Map ( selected . value ) ,
288
293
children : children . value ,
294
+ disabled : disabled . value ,
289
295
parents : parents . value ,
290
296
event,
291
297
} )
@@ -312,6 +318,7 @@ export const useNested = (props: NestedProps) => {
312
318
newActivated && ( activated . value = newActivated )
313
319
} ,
314
320
children,
321
+ disabled,
315
322
parents,
316
323
getPath,
317
324
} ,
@@ -322,7 +329,7 @@ export const useNested = (props: NestedProps) => {
322
329
return nested . root
323
330
}
324
331
325
- export const useNestedItem = ( id : Ref < unknown > , isGroup : boolean ) => {
332
+ export const useNestedItem = ( id : Ref < unknown > , isDisabled : Ref < boolean > , isGroup : boolean ) => {
326
333
const parent = inject ( VNestedSymbol , emptyNested )
327
334
328
335
const uidSymbol = Symbol ( getUid ( ) )
@@ -345,7 +352,7 @@ export const useNestedItem = (id: Ref<unknown>, isGroup: boolean) => {
345
352
}
346
353
347
354
onBeforeMount ( ( ) => {
348
- ! parent . isGroupActivator && parent . root . register ( computedId . value , parent . id . value , isGroup )
355
+ ! parent . isGroupActivator && parent . root . register ( computedId . value , parent . id . value , isDisabled . value , isGroup )
349
356
} )
350
357
351
358
onBeforeUnmount ( ( ) => {
0 commit comments