@@ -58,20 +58,19 @@ export const Position = ({ anchor, width = 'stretch', style, className, children
58
58
const [ position , setPosition ] = useState ( ) ;
59
59
const ref = useRef ( ) ;
60
60
61
- const { offsetWidth } = anchor . current || { } ;
61
+ const resizer = useRef ( ) ;
62
62
63
+ const { offsetWidth } = anchor . current || { } ;
63
64
useLayoutEffect ( ( ) => {
64
65
if ( ! ref . current || ! anchor . current ) {
65
66
return ;
66
67
}
67
68
const [ vertical , horizontal ] = placement . split ( ' ' ) ;
68
69
69
- if ( typeof ResizeObserver === 'undefined' ) {
70
- return ;
71
- }
72
70
const handlePosition = throttle ( ( ) => {
73
71
const anchorPosition = offset ( anchor . current ) ;
74
72
const elementPosition = offset ( ref . current . parentElement ) ;
73
+
75
74
setPosition ( {
76
75
...width === 'stretch' && anchor . current && {
77
76
width : offsetWidth ,
@@ -87,20 +86,23 @@ export const Position = ({ anchor, width = 'stretch', style, className, children
87
86
} , 30 ) ;
88
87
89
88
handlePosition ( ) ;
90
- const resizeObserver = new ResizeObserver ( handlePosition ) ;
89
+
90
+ const { current } = anchor ;
91
+ if ( typeof ResizeObserver !== 'undefined' ) {
92
+ resizer . current = new ResizeObserver ( handlePosition ) ;
93
+ resizer . current . observe ( current ) ;
94
+ }
91
95
92
96
window . addEventListener ( 'scroll' , handlePosition ) ;
93
97
window . addEventListener ( 'resize' , handlePosition ) ;
94
- const { current } = anchor ;
95
98
96
- resizeObserver . observe ( current ) ;
97
99
98
100
return ( ) => {
99
101
window . removeEventListener ( 'scroll' , handlePosition ) ;
100
102
window . removeEventListener ( 'resize' , handlePosition ) ;
101
- resizeObserver . unobserve ( current ) ;
103
+ resizer . current && resizer . current . unobserve ( current ) ;
102
104
} ;
103
- } , [ anchor . current , anchor . current , placement , offsetWidth ] ) ;
105
+ } , [ anchor . current , placement , offsetWidth ] ) ;
104
106
105
107
const portalContainer = useMemo ( ( ) => {
106
108
const element = document . createElement ( 'div' ) ;
0 commit comments