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