@100mslive/react-native-room-kit
Version:
100ms Room Kit provides simple & easy to use UI components to build Live Streaming & Video Conferencing experiences in your apps.
213 lines • 9.57 kB
JavaScript
import { useDispatch, useSelector, useStore } from 'react-redux';
import { setIsLocalAudioMutedState, setIsLocalScreenSharedState, setIsLocalVideoMutedState, setRoomLocallyMuted } from './redux/actions';
import { selectAllowedTracksToPublish, selectCanPublishTrack, selectIsAnyStreamingOn, selectIsHLSStreamingOn } from './hooks-sdk-selectors';
import { useCallback } from 'react';
import { HMSRecordingState } from '@100mslive/react-native-hms';
export const useAllowedTracksToPublish = () => {
return useSelector(selectAllowedTracksToPublish);
};
export const useCanPublishAudio = () => {
return useSelector(state => selectCanPublishTrack(state, 'audio'));
};
export const useCanPublishVideo = () => {
return useSelector(state => selectCanPublishTrack(state, 'video'));
};
export const useCanPublishScreen = () => {
return useSelector(state => selectCanPublishTrack(state, 'screen'));
};
export const useHMSActions = () => {
const dispatch = useDispatch();
const store = useStore();
const setLocalAudioEnabled = useCallback(async enable => {
const state = store.getState();
const localPeer = state.hmsStates.localPeer;
if (!localPeer) {
return Promise.reject('Local Peer Instance is not available!');
}
const localAudioTrack = localPeer.localAudioTrack();
if (!localAudioTrack) {
return Promise.reject('Local Peer Audio Track Instance is not available!');
}
try {
dispatch(setIsLocalAudioMutedState(enable));
localAudioTrack.setMute(enable);
} catch (error) {
dispatch(setIsLocalAudioMutedState(!enable));
return Promise.reject(error);
}
}, []);
const setLocalVideoEnabled = useCallback(async enable => {
const state = store.getState();
const localPeer = state.hmsStates.localPeer;
if (!localPeer) {
return Promise.reject('Local Peer Instance is not available!');
}
const localVideoTrack = localPeer.localVideoTrack();
if (!localVideoTrack) {
return Promise.reject('Local Peer Video Track Instance is not available!');
}
try {
dispatch(setIsLocalVideoMutedState(enable));
localVideoTrack.setMute(enable);
} catch (error) {
dispatch(setIsLocalVideoMutedState(!enable));
return Promise.reject(error);
}
}, []);
const switchCamera = useCallback(async () => {
const state = store.getState();
const localPeer = state.hmsStates.localPeer;
if (!localPeer) {
return Promise.reject('Local Peer Instance is not available!');
}
const localVideoTrack = localPeer.localVideoTrack();
if (!localVideoTrack) {
return Promise.reject('Local Peer Video Track Instance is not available!');
}
localVideoTrack.switchCamera();
}, []);
const setScreenShareEnabled = useCallback(async enable => {
const state = store.getState();
const hmsInstance = state.user.hmsInstance;
if (!hmsInstance) {
return Promise.reject('HMSSDK Instance is not available!');
}
try {
if (enable) {
const result = await hmsInstance.startScreenshare();
console.log('Start Screenshare Success: ', result);
} else {
const result = await hmsInstance.stopScreenshare();
console.log('Stop Screenshare Success: ', result);
}
dispatch(setIsLocalScreenSharedState(enable));
} catch (error) {
if (enable) {
console.log('Start Screenshare Error: ', error);
} else {
console.log('Stop Screenshare Error: ', error);
}
return Promise.reject(error);
}
}, []);
const changeMetadata = useCallback(async metadata => {
const state = store.getState();
const hmsInstance = state.user.hmsInstance;
if (!hmsInstance) {
return Promise.reject('HMSSDK Instance is not available!');
}
try {
const parsedMetadata = typeof metadata === 'string' ? metadata : JSON.stringify(metadata);
const result = await hmsInstance.changeMetadata(parsedMetadata);
console.log('Change Metadata Success: ', result);
} catch (error) {
console.log('Change Metadata Error: ', error);
return Promise.reject(error);
}
}, []);
const changeName = useCallback(async name => {
const state = store.getState();
const hmsInstance = state.user.hmsInstance;
if (!hmsInstance) {
return Promise.reject('HMSSDK Instance is not available!');
}
try {
const result = await hmsInstance.changeName(name);
console.log('Change Name Success: ', result);
} catch (error) {
console.log('Change Name Error: ', error);
return Promise.reject(error);
}
}, []);
const raiseLocalPeerHand = useCallback(async () => {
const state = store.getState();
const hmsInstance = state.user.hmsInstance;
if (!hmsInstance) {
return Promise.reject('HMSSDK Instance is not available!');
}
try {
const result = await hmsInstance.raiseLocalPeerHand();
console.log('Raise Local Peer Hand Success: ', result);
} catch (error) {
console.log('Raise Local Peer Hand Error: ', error);
return Promise.reject(error);
}
}, []);
const lowerLocalPeerHand = useCallback(async () => {
const state = store.getState();
const hmsInstance = state.user.hmsInstance;
if (!hmsInstance) {
return Promise.reject('HMSSDK Instance is not available!');
}
try {
const result = await hmsInstance.lowerLocalPeerHand();
console.log('Lower Local Peer Hand Success: ', result);
} catch (error) {
console.log('Lower Local Peer Hand Error: ', error);
return Promise.reject(error);
}
}, []);
const lowerRemotePeerHand = useCallback(async peer => {
const state = store.getState();
const hmsInstance = state.user.hmsInstance;
if (!hmsInstance) {
return Promise.reject('HMSSDK Instance is not available!');
}
try {
const result = await hmsInstance.lowerRemotePeerHand(peer);
console.log('Lower Remote Peer Hand Success: ', result);
} catch (error) {
console.log('Lower Remote Peer Hand Error: ', error);
return Promise.reject(error);
}
}, []);
const setRoomMuteLocally = useCallback(async mute => {
const state = store.getState();
const hmsInstance = state.user.hmsInstance;
if (!hmsInstance) {
return Promise.reject('HMSSDK Instance is not available!');
}
try {
const result = await hmsInstance.setPlaybackForAllAudio(mute);
console.log('Set Room Mute Locally Success: ', result);
dispatch(setRoomLocallyMuted(mute));
} catch (error) {
console.log('Set Room Mute Locally Error: ', error);
return Promise.reject(error);
}
}, []);
return {
setLocalAudioEnabled,
setLocalVideoEnabled,
switchCamera,
setScreenShareEnabled,
changeMetadata,
changeName,
raiseLocalPeerHand,
lowerLocalPeerHand,
lowerRemotePeerHand,
setRoomMuteLocally
};
};
export const useIsHLSStreamingOn = () => {
return useSelector(selectIsHLSStreamingOn);
};
export const useIsAnyStreamingOn = () => {
return useSelector(selectIsAnyStreamingOn);
};
export const useIsAnyRecordingOn = () => {
return useSelector(state => {
var _room$browserRecordin, _room$browserRecordin2, _room$serverRecording, _room$serverRecording2, _room$hlsRecordingSta, _room$hlsRecordingSta2;
const room = state.hmsStates.room;
return (room === null || room === void 0 || (_room$browserRecordin = room.browserRecordingState) === null || _room$browserRecordin === void 0 ? void 0 : _room$browserRecordin.state) === HMSRecordingState.STARTED || (room === null || room === void 0 || (_room$browserRecordin2 = room.browserRecordingState) === null || _room$browserRecordin2 === void 0 ? void 0 : _room$browserRecordin2.state) === HMSRecordingState.RESUMED || (room === null || room === void 0 || (_room$serverRecording = room.serverRecordingState) === null || _room$serverRecording === void 0 ? void 0 : _room$serverRecording.state) === HMSRecordingState.STARTED || (room === null || room === void 0 || (_room$serverRecording2 = room.serverRecordingState) === null || _room$serverRecording2 === void 0 ? void 0 : _room$serverRecording2.state) === HMSRecordingState.RESUMED || (room === null || room === void 0 || (_room$hlsRecordingSta = room.hlsRecordingState) === null || _room$hlsRecordingSta === void 0 ? void 0 : _room$hlsRecordingSta.state) === HMSRecordingState.STARTED || (room === null || room === void 0 || (_room$hlsRecordingSta2 = room.hlsRecordingState) === null || _room$hlsRecordingSta2 === void 0 ? void 0 : _room$hlsRecordingSta2.state) === HMSRecordingState.RESUMED;
});
};
export const useIsAnyRecordingPaused = () => {
const isRecordingPaused = useSelector(state => {
var _room$browserRecordin3, _room$serverRecording3, _room$hlsRecordingSta3;
const room = state.hmsStates.room;
return (room === null || room === void 0 || (_room$browserRecordin3 = room.browserRecordingState) === null || _room$browserRecordin3 === void 0 ? void 0 : _room$browserRecordin3.state) === HMSRecordingState.PAUSED || (room === null || room === void 0 || (_room$serverRecording3 = room.serverRecordingState) === null || _room$serverRecording3 === void 0 ? void 0 : _room$serverRecording3.state) === HMSRecordingState.PAUSED || (room === null || room === void 0 || (_room$hlsRecordingSta3 = room.hlsRecordingState) === null || _room$hlsRecordingSta3 === void 0 ? void 0 : _room$hlsRecordingSta3.state) === HMSRecordingState.PAUSED;
});
return isRecordingPaused;
};
//# sourceMappingURL=hooks-sdk.js.map