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.

77 lines (75 loc) 2.19 kB
import { useRoom } from "./chunk-BA6MQGDL.js"; // src/hooks/useRemotePeer.ts import { useCallback, useEffect, useState } from "react"; var useRemotePeer = (props) => { const { room } = useRoom(); const [remotePeer, setRemotePeer] = useState( room.remotePeerExists(props.peerId) || null ); const [metadata, setMetadata] = useState( remotePeer?.getMetadata() || null ); const [role, setRole] = useState( remotePeer?.role || null ); const handleRoleUpdate = useCallback( (data) => { if (data?.role && data.role.length > 0) { setRole(data.role); } }, [] ); const handleNewPeerJoined = useCallback((data) => { if (data.peer.peerId === props.peerId) { setRemotePeer(data.peer); } }, []); const handlePeerLeft = useCallback((data) => { if (peerId === data.peerId) { setRemotePeer(null); } }, []); const handleUpdateMetadata = useCallback(() => { const metadata2 = remotePeer?.getMetadata(); if (props?.onMetadataUpdate && metadata2) { props.onMetadataUpdate({ metadata: metadata2 }); } if (metadata2) setMetadata(metadata2); else setMetadata(null); }, [props?.onMetadataUpdate]); useEffect(() => { room.on("new-peer-joined", handleNewPeerJoined); room.on("peer-left", handlePeerLeft); if (remotePeer) { remotePeer?.on("metadata-updated", handleUpdateMetadata); remotePeer?.on("role-updated", handleRoleUpdate); } return () => { room.off("new-peer-joined", handleNewPeerJoined); room.off("peer-left", handlePeerLeft); remotePeer?.off("metadata-updated", handleUpdateMetadata); remotePeer?.off("role-updated", handleRoleUpdate); }; }, [remotePeer, handleUpdateMetadata, handleRoleUpdate]); const peerId = remotePeer?.peerId; const updateRole = (role2, options) => { if (remotePeer?.updateRole) { remotePeer.updateRole({ role: role2, options }); } else { console.warn("\u274C RemotePeer does not Exist, cannot update role"); } }; return { peerId, role, metadata, updateRole }; }; export { useRemotePeer }; //# sourceMappingURL=chunk-64HIHWVY.js.map