UNPKG

@huddle01/react

Version:

The Huddle01 React SDK offers a comprehensive suite of hooks, methods and event listeners that allow for seamless real-time audio and video communication with minimal coding required.

76 lines (74 loc) 2.23 kB
import { useHuddle01_default } from "./chunk-EWIULLG2.js"; // src/hooks/useLocalScreenShare.ts import { useCallback, useEffect, useState } from "react"; var useLocalScreenShare = (props) => { const { huddleClient } = useHuddle01_default(); const localPeer = huddleClient.localPeer; const [shareStream, setShareStream] = useState( localPeer.getStream({ label: "screen-share" }) ); const handleStreamFetched = useCallback( (data) => { if (data.mediaKind === "screen") { setShareStream(data.stream); } }, [] ); const handleStreamPlayable = useCallback( (data) => { if (data.label === "screen-share-video") { if (props?.onProduceStart) props?.onProduceStart(data.producer); } if (data.label === "screen-share-audio") { if (props?.onProduceStart) props?.onProduceStart(data.producer); } }, [props?.onProduceStart] ); const handleCloseStream = useCallback( (data) => { if (data.label === "screen-share-video") { setShareStream(null); if (props?.onProduceClose) props?.onProduceClose(data.label); } if (data.label === "screen-share-audio") { setShareStream(null); if (props?.onProduceClose) props?.onProduceClose(data.label); } }, [props?.onProduceClose] ); useEffect(() => { localPeer.on("stream-fetched", handleStreamFetched); localPeer.on("stream-playable", handleStreamPlayable); localPeer.on("stream-closed", handleCloseStream); return () => { localPeer.off("stream-fetched", handleStreamFetched); localPeer.off("stream-playable", handleStreamPlayable); localPeer.off("stream-closed", handleCloseStream); }; }, []); const startScreenShare = useCallback( (data) => { return localPeer.startScreenShare(data); }, [localPeer] ); const stopScreenShare = localPeer.stopScreenShare; const audioTrack = shareStream?.getAudioTracks()[0] || null; const videoTrack = shareStream?.getVideoTracks()[0] || null; return { shareStream, startScreenShare, stopScreenShare, audioTrack, videoTrack }; }; export { useLocalScreenShare }; //# sourceMappingURL=chunk-MOY2DVGQ.js.map