@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.
100 lines (98 loc) • 2.97 kB
JavaScript
import {
useHuddle01_default
} from "./chunk-6UAH4WUQ.js";
// src/hooks/useRoom.ts
import { useCallback, useEffect, useState } from "react";
var useRoom = (props) => {
const { huddleClient } = useHuddle01_default();
const room = huddleClient.room;
const [state, setState] = useState(room.state);
const handleRoomClose = useCallback(
(data) => {
if (props?.onLeave) props.onLeave(data);
if (data.reason === "CLOSED") setState("closed");
else setState("left");
},
[props?.onLeave]
);
const handleRoomJoin = useCallback(() => {
if (props?.onJoin) props.onJoin({ room: huddleClient.room });
setState("connected");
}, [props?.onJoin]);
const handleRoomJoinFailed = useCallback(
(data) => {
if (props?.onFailed) props.onFailed(data);
if (data.status === "ROOM_ERRORED" || data.status === "ROOM_NOT_FOUND") {
setState("failed");
}
},
[props?.onFailed]
);
const handlePeerJoin = useCallback(
({ peer }) => {
if (props?.onPeerJoin) {
props.onPeerJoin({ peer });
}
},
[props?.onPeerJoin]
);
const handlePeerLeft = useCallback(
(data) => {
if (props?.onPeerLeft) props.onPeerLeft(data);
},
[props?.onPeerLeft]
);
const handleRoomConnecting = useCallback(() => {
setState("connecting");
}, []);
useEffect(() => {
room.on("room-joined", handleRoomJoin);
room.on("room-closed", handleRoomClose);
room.on("room-joined-failed", handleRoomJoinFailed);
room.on("room-connecting", handleRoomConnecting);
props?.onPeerJoin && room.on("new-peer-joined", handlePeerJoin);
props?.onPeerLeft && room.on("peer-left", handlePeerLeft);
props?.onWaiting && room.on("room-waiting", props.onWaiting);
return () => {
props?.onPeerJoin && room.off("new-peer-joined", handlePeerJoin);
props?.onPeerLeft && room.off("peer-left", handlePeerLeft);
props?.onWaiting && room.off("room-waiting", props.onWaiting);
room.off("room-joined", handleRoomJoin);
room.off("room-closed", handleRoomClose);
room.off("room-joined-failed", handleRoomJoinFailed);
room.off("room-connecting", handleRoomConnecting);
};
}, [
handleRoomJoin,
handleRoomClose,
handlePeerJoin,
handlePeerLeft,
handleRoomJoinFailed
]);
const closeStreamOfLabel = useCallback(room.closeStreamOfLabel, []);
const muteEveryone = useCallback(room.muteEveryone, []);
const joinRoom = useCallback(
(data) => {
setState("connecting");
return huddleClient.joinRoom(data);
},
[]
);
const leaveRoom = useCallback(huddleClient.leaveRoom, []);
const closeRoom = useCallback(huddleClient.closeRoom, []);
const kickPeer = useCallback(room.kickPeer, []);
return {
room,
state,
joinRoom,
leaveRoom,
closeRoom,
kickPeer,
muteEveryone,
closeStreamOfLabel
};
};
export {
useRoom
};
//# sourceMappingURL=chunk-BA6MQGDL.js.map