99 useSetModal ,
1010 useSelectedDevices ,
1111 useToastMessageDispatch ,
12+ useSetting ,
1213} from '@rocket.chat/ui-contexts' ;
1314import { useCallback , useEffect } from 'react' ;
1415import { createPortal } from 'react-dom' ;
@@ -18,7 +19,7 @@ import MediaCallContext, { PeerInfo } from './MediaCallContext';
1819import MediaCallWidget from './MediaCallWidget' ;
1920import TransferModal from './TransferModal' ;
2021import { useCallSounds } from './useCallSounds' ;
21- import { useMediaSession } from './useMediaSession' ;
22+ import { getExtensionFromPeerInfo , useMediaSession } from './useMediaSession' ;
2223import { useMediaSessionInstance } from './useMediaSessionInstance' ;
2324import useMediaStream from './useMediaStream' ;
2425import { isValidTone , useTonePlayer } from './useTonePlayer' ;
@@ -45,6 +46,8 @@ const MediaCallProvider = ({ children }: { children: React.ReactNode }) => {
4546
4647 const requestDevice = useDevicePermissionPrompt2 ( ) ;
4748
49+ const forceSIPRouting = useSetting ( 'VoIP_TeamCollab_SIP_Integration_For_Internal_Calls' ) ;
50+
4851 // For some reason `exhaustive-deps` is complaining that "session" is not in the dependencies
4952 // But we're only using the changeDevice method from the session
5053 // So I'll just destructure it here
@@ -202,10 +205,22 @@ const MediaCallProvider = ({ children }: { children: React.ReactNode }) => {
202205
203206 const getAutocompleteOptions = async ( filter : string ) => {
204207 const peerUsername = session . peerInfo && 'username' in session . peerInfo ? session . peerInfo . username : undefined ;
208+ const peerExtension = session . peerInfo ? getExtensionFromPeerInfo ( session . peerInfo ) : undefined ;
209+
210+ const conditions =
211+ peerExtension || forceSIPRouting
212+ ? {
213+ $and : [
214+ forceSIPRouting && { freeSwitchExtension : { $exists : true } } ,
215+ peerExtension && { freeSwitchExtension : { $ne : peerExtension } } ,
216+ ] . filter ( Boolean ) ,
217+ }
218+ : undefined ;
219+
205220 const exceptions = [ user ?. username , peerUsername ] . filter ( Boolean ) ;
206221
207222 const { items } = await usersAutoCompleteEndpoint ( {
208- selector : JSON . stringify ( { term : filter , exceptions } ) ,
223+ selector : JSON . stringify ( { term : filter , exceptions, ... ( conditions && { conditions } ) } ) ,
209224 } ) ;
210225 return (
211226 items . map ( ( user ) => {
0 commit comments