@@ -52,7 +52,7 @@ export function initSlots(
52
52
53
53
instance . slots = shallowReactive ( { } )
54
54
const renderedSlotKeys : Set < string > [ ] = [ ]
55
- const slotNameLevels : Record < string , [ number , Slot ] [ ] > = { }
55
+ const slotsQueue : Record < string , [ number , Slot ] [ ] > = { }
56
56
rawSlots . forEach ( ( slots , index ) => {
57
57
const isDynamicSlot = isDynamicSlotFn ( slots )
58
58
if ( isDynamicSlot ) {
@@ -61,17 +61,20 @@ export function initSlots(
61
61
renderedSlotKeys [ index ] || ( renderedSlotKeys [ index ] = new Set ( ) )
62
62
let dynamicSlot : ReturnType < DynamicSlotFn >
63
63
dynamicSlot = slots ( )
64
- const restoreKeys = cleanupSlot ( index )
64
+ const restoreSlotNames = cleanupSlot ( index )
65
65
if ( isArray ( dynamicSlot ) ) {
66
66
for ( const slot of dynamicSlot ) {
67
67
registerSlot ( slot . name , slot . fn , index , renderedKeys )
68
68
}
69
69
} else if ( dynamicSlot ) {
70
70
registerSlot ( dynamicSlot . name , dynamicSlot . fn , index , renderedKeys )
71
71
}
72
- if ( restoreKeys . length ) {
73
- for ( const key of restoreKeys ) {
74
- resolveSlot ( key , slotNameLevels [ key ] [ 0 ] [ 1 ] )
72
+ if ( restoreSlotNames . length ) {
73
+ for ( const key of restoreSlotNames ) {
74
+ const [ restoreLevel , restoreFn ] = slotsQueue [ key ] [ 0 ]
75
+ renderedSlotKeys [ restoreLevel ] &&
76
+ renderedSlotKeys [ restoreLevel ] . add ( key )
77
+ resolveSlot ( key , restoreFn )
75
78
}
76
79
}
77
80
for ( const name of renderedKeys ) {
@@ -93,22 +96,22 @@ export function initSlots(
93
96
} )
94
97
95
98
function cleanupSlot ( level : number ) {
96
- const restoreKeys : string [ ] = [ ]
97
- Object . keys ( slotNameLevels ) . forEach ( key => {
98
- const index = slotNameLevels [ key ] . findIndex ( ( [ l ] ) => l === level )
99
+ const restoreSlotNames : string [ ] = [ ]
100
+ Object . keys ( slotsQueue ) . forEach ( slotName => {
101
+ const index = slotsQueue [ slotName ] . findIndex ( ( [ l ] ) => l === level )
99
102
if ( index > - 1 ) {
100
- slotNameLevels [ key ] . splice ( index , 1 )
101
- if ( ! slotNameLevels [ key ] . length ) {
102
- delete slotNameLevels [ key ]
103
+ slotsQueue [ slotName ] . splice ( index , 1 )
104
+ if ( ! slotsQueue [ slotName ] . length ) {
105
+ delete slotsQueue [ slotName ]
103
106
return
104
107
}
105
108
if ( index === 0 ) {
106
- renderedSlotKeys [ level ] && renderedSlotKeys [ level ] . delete ( key )
107
- restoreKeys . push ( key )
109
+ renderedSlotKeys [ level ] && renderedSlotKeys [ level ] . delete ( slotName )
110
+ restoreSlotNames . push ( slotName )
108
111
}
109
112
}
110
113
} )
111
- return restoreKeys
114
+ return restoreSlotNames
112
115
}
113
116
114
117
function registerSlot (
@@ -117,17 +120,17 @@ export function initSlots(
117
120
level : number ,
118
121
renderedKeys ?: Set < string > ,
119
122
) {
120
- slotNameLevels [ name ] = slotNameLevels [ name ] || [ ]
121
- slotNameLevels [ name ] . push ( [ level , fn ] )
122
- slotNameLevels [ name ] . sort ( ( a , b ) => b [ 0 ] - a [ 0 ] )
123
- for ( let i = 1 ; i < slotNameLevels [ name ] . length ; i ++ ) {
124
- const hidenLevel = slotNameLevels [ name ] [ i ] [ 0 ]
123
+ slotsQueue [ name ] = slotsQueue [ name ] || [ ]
124
+ slotsQueue [ name ] . push ( [ level , fn ] )
125
+ slotsQueue [ name ] . sort ( ( a , b ) => b [ 0 ] - a [ 0 ] )
126
+ if ( slotsQueue [ name ] [ 1 ] ) {
127
+ const hidenLevel = slotsQueue [ name ] [ 1 ] [ 0 ]
125
128
renderedSlotKeys [ hidenLevel ] && renderedSlotKeys [ hidenLevel ] . delete ( name )
126
129
}
127
- if ( slotNameLevels [ name ] [ 0 ] [ 0 ] === level ) {
130
+ if ( slotsQueue [ name ] [ 0 ] [ 0 ] === level ) {
128
131
renderedKeys && renderedKeys . add ( name )
129
132
}
130
- resolveSlot ( name , slotNameLevels [ name ] [ 0 ] [ 1 ] )
133
+ resolveSlot ( name , slotsQueue [ name ] [ 0 ] [ 1 ] )
131
134
}
132
135
133
136
function resolveSlot ( name : string , fn : Slot ) {
0 commit comments