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.

100 lines (98 loc) 2.97 kB
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