@@ -52,7 +52,7 @@ export function initSlots(
5252
5353 instance . slots = shallowReactive ( { } )
5454 const renderedSlotKeys : Set < string > [ ] = [ ]
55- const slotNameLevels : Record < string , [ number , Slot ] [ ] > = { }
55+ const slotsQueue : Record < string , [ number , Slot ] [ ] > = { }
5656 rawSlots . forEach ( ( slots , index ) => {
5757 const isDynamicSlot = isDynamicSlotFn ( slots )
5858 if ( isDynamicSlot ) {
@@ -61,17 +61,20 @@ export function initSlots(
6161 renderedSlotKeys [ index ] || ( renderedSlotKeys [ index ] = new Set ( ) )
6262 let dynamicSlot : ReturnType < DynamicSlotFn >
6363 dynamicSlot = slots ( )
64- const restoreKeys = cleanupSlot ( index )
64+ const restoreSlotNames = cleanupSlot ( index )
6565 if ( isArray ( dynamicSlot ) ) {
6666 for ( const slot of dynamicSlot ) {
6767 registerSlot ( slot . name , slot . fn , index , renderedKeys )
6868 }
6969 } else if ( dynamicSlot ) {
7070 registerSlot ( dynamicSlot . name , dynamicSlot . fn , index , renderedKeys )
7171 }
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 )
7578 }
7679 }
7780 for ( const name of renderedKeys ) {
@@ -93,22 +96,22 @@ export function initSlots(
9396 } )
9497
9598 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 )
99102 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 ]
103106 return
104107 }
105108 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 )
108111 }
109112 }
110113 } )
111- return restoreKeys
114+ return restoreSlotNames
112115 }
113116
114117 function registerSlot (
@@ -117,17 +120,17 @@ export function initSlots(
117120 level : number ,
118121 renderedKeys ?: Set < string > ,
119122 ) {
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 ]
125128 renderedSlotKeys [ hidenLevel ] && renderedSlotKeys [ hidenLevel ] . delete ( name )
126129 }
127- if ( slotNameLevels [ name ] [ 0 ] [ 0 ] === level ) {
130+ if ( slotsQueue [ name ] [ 0 ] [ 0 ] === level ) {
128131 renderedKeys && renderedKeys . add ( name )
129132 }
130- resolveSlot ( name , slotNameLevels [ name ] [ 0 ] [ 1 ] )
133+ resolveSlot ( name , slotsQueue [ name ] [ 0 ] [ 1 ] )
131134 }
132135
133136 function resolveSlot ( name : string , fn : Slot ) {
0 commit comments