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.

106 lines (104 loc) 2.98 kB
import { useHuddle01_default } from "./chunk-6UAH4WUQ.js"; // src/hooks/usePeerIds.ts import { useCallback, useEffect, useState } from "react"; var usePeerIds = (props) => { const { huddleClient } = useHuddle01_default(); const room = huddleClient.room; const [peerIds, setPeerIds] = useState([]); const isValidPeer = useCallback( (data) => { if (props?.labels) { for (const label of data.labels) { if (data.searchLabelSet.has(label)) { return true; } } return false; } if (props?.roles && data.role && !data.validRoles.has(data.role)) { return false; } return true; }, [] ); const handleSearch = useCallback( (peerIds2) => { const validPeers = []; const searchLabelSet = new Set(props?.labels); const validRoles = new Set(props?.roles); for (const peerId of peerIds2) { const remotePeer = room.remotePeerExists(peerId); const remotePeerLabels = remotePeer?.labels || []; const role = remotePeer?.role || null; if (isValidPeer({ searchLabelSet, validRoles, labels: remotePeerLabels, role })) { validPeers.push(peerId); } } return validPeers; }, [props?.labels] ); useEffect(() => { setPeerIds(handleSearch(room.peerIds)); }, []); useEffect(() => { const handlePeerChange = () => { const newPeerIds = handleSearch(room.peerIds); setPeerIds(newPeerIds); }; const handleStreamAdded = (data) => { if (props?.labels?.includes(data.label)) { setPeerIds(handleSearch(room.peerIds)); } }; const handleRoleUpdate = (data) => { if (props?.onPeerRoleUpdate) { props.onPeerRoleUpdate(data); } if (props?.roles?.includes(data?.prevRole)) { setPeerIds(handleSearch(room.peerIds)); } else if (props?.roles?.includes(data.newRole)) { setPeerIds(handleSearch(room.peerIds)); } }; if (room.state !== "connected") { room.on("room-joined", handlePeerChange); } room.on("new-peer-joined", handlePeerChange); room.on("peer-left", handlePeerChange); if (props?.labels) { room.on("stream-added", handleStreamAdded); room.on("stream-closed", handleStreamAdded); } if (props?.roles) { room.on("room-role-updated", handleRoleUpdate); } return () => { room.off("new-peer-joined", handlePeerChange); room.off("peer-left", handlePeerChange); room.off("room-joined", handlePeerChange); if (props?.labels) { room.off("stream-added", handleStreamAdded); room.off("stream-closed", handleStreamAdded); } if (props?.roles) { room.off("room-role-updated", handleRoleUpdate); } }; }, [props?.labels]); return { peerIds }; }; export { usePeerIds }; //# sourceMappingURL=chunk-AC5OZUQ2.js.map