@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
JavaScript
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