@@ -143,7 +143,6 @@ const Popover = (
143
143
expandOnMobile,
144
144
onFocusOutside,
145
145
__unstableSlotName = SLOT_NAME ,
146
- __unstableObserveElement,
147
146
__unstableForcePosition = false ,
148
147
__unstableShift = false ,
149
148
...contentProps
@@ -374,59 +373,42 @@ const Popover = (
374
373
return autoUpdate (
375
374
resultingReferenceRef ,
376
375
refs . floating . current ,
377
- update
376
+ update ,
377
+ {
378
+ animationFrame : true ,
379
+ }
378
380
) ;
379
381
// 'reference' and 'refs.floating' are refs and don't need to be listed
380
382
// as dependencies (see https://github.com/WordPress/gutenberg/pull/41612)
381
383
// eslint-disable-next-line react-hooks/exhaustive-deps
382
384
} , [ anchorRef , anchorRect , getAnchorRect , update ] ) ;
383
385
384
- // This is only needed for a smooth transition when moving blocks.
385
- useLayoutEffect ( ( ) => {
386
- if ( ! __unstableObserveElement ) {
387
- return ;
388
- }
389
- const observer = new window . MutationObserver ( update ) ;
390
- observer . observe ( __unstableObserveElement , { attributes : true } ) ;
391
-
392
- return ( ) => {
393
- observer . disconnect ( ) ;
394
- } ;
395
- } , [ __unstableObserveElement , update ] ) ;
396
-
397
386
// If the reference element is in a different ownerDocument (e.g. iFrame),
398
387
// we need to manually update the floating's position as the reference's owner
399
388
// document scrolls. Also update the frame offset if the view resizes.
400
389
useLayoutEffect ( ( ) => {
401
- if ( referenceOwnerDocument === document ) {
390
+ const referenceAndFloatingHaveSameDocument =
391
+ referenceOwnerDocument === document ;
392
+ const hasFrameElement =
393
+ ! ! referenceOwnerDocument ?. defaultView ?. frameElement ;
394
+
395
+ if ( referenceAndFloatingHaveSameDocument || ! hasFrameElement ) {
402
396
frameOffsetRef . current = undefined ;
403
397
return ;
404
398
}
405
399
406
400
const { defaultView } = referenceOwnerDocument ;
407
401
408
- referenceOwnerDocument . addEventListener ( 'scroll' , update ) ;
402
+ const updateFrameOffset = ( ) => {
403
+ frameOffsetRef . current = getFrameOffset ( referenceOwnerDocument ) ;
404
+ update ( ) ;
405
+ } ;
406
+ defaultView . addEventListener ( 'resize' , updateFrameOffset ) ;
409
407
410
- let updateFrameOffset ;
411
- const hasFrameElement =
412
- ! ! referenceOwnerDocument ?. defaultView ?. frameElement ;
413
- if ( hasFrameElement ) {
414
- updateFrameOffset = ( ) => {
415
- frameOffsetRef . current = getFrameOffset (
416
- referenceOwnerDocument
417
- ) ;
418
- update ( ) ;
419
- } ;
420
- updateFrameOffset ( ) ;
421
- defaultView . addEventListener ( 'resize' , updateFrameOffset ) ;
422
- }
408
+ updateFrameOffset ( ) ;
423
409
424
410
return ( ) => {
425
- referenceOwnerDocument . removeEventListener ( 'scroll' , update ) ;
426
-
427
- if ( updateFrameOffset ) {
428
- defaultView . removeEventListener ( 'resize' , updateFrameOffset ) ;
429
- }
411
+ defaultView . removeEventListener ( 'resize' , updateFrameOffset ) ;
430
412
} ;
431
413
} , [ referenceOwnerDocument , update ] ) ;
432
414
0 commit comments