1- import { computeMenuPosition , wasClickOutside } from '@livekit/components-core' ;
1+ import { computeMenuPosition , wasClickOutside , log } from '@livekit/components-core' ;
22import * as React from 'react' ;
33import { MediaDeviceSelect } from '../components/controls/MediaDeviceSelect' ;
4- import { log } from '@livekit/components-core' ;
54import type { LocalAudioTrack , LocalVideoTrack } from 'livekit-client' ;
65
76/** @public */
@@ -66,14 +65,18 @@ export function MediaDeviceMenu({
6665 } , [ isOpen ] ) ;
6766
6867 React . useLayoutEffect ( ( ) => {
68+ let cleanup : ReturnType < typeof computeMenuPosition > | undefined ;
6969 if ( button . current && tooltip . current && ( devices || updateRequired ) ) {
70- computeMenuPosition ( button . current , tooltip . current ) . then ( ( { x, y } ) => {
70+ cleanup = computeMenuPosition ( button . current , tooltip . current , ( x , y ) => {
7171 if ( tooltip . current ) {
7272 Object . assign ( tooltip . current . style , { left : `${ x } px` , top : `${ y } px` } ) ;
7373 }
7474 } ) ;
7575 }
7676 setUpdateRequired ( false ) ;
77+ return ( ) => {
78+ cleanup ?.( ) ;
79+ } ;
7780 } , [ button , tooltip , devices , updateRequired ] ) ;
7881
7982 const handleClickOutside = React . useCallback (
@@ -93,12 +96,10 @@ export function MediaDeviceMenu({
9396
9497 React . useEffect ( ( ) => {
9598 document . addEventListener < 'click' > ( 'click' , handleClickOutside ) ;
96- window . addEventListener < 'resize' > ( 'resize' , ( ) => setUpdateRequired ( true ) ) ;
9799 return ( ) => {
98100 document . removeEventListener < 'click' > ( 'click' , handleClickOutside ) ;
99- window . removeEventListener < 'resize' > ( 'resize' , ( ) => setUpdateRequired ( true ) ) ;
100101 } ;
101- } , [ handleClickOutside , setUpdateRequired ] ) ;
102+ } , [ handleClickOutside ] ) ;
102103
103104 return (
104105 < >
0 commit comments