@fishjam-cloud/react-client
Version:
React client library for Fishjam
49 lines (48 loc) • 1.81 kB
JavaScript
import { useCallback, useContext } from "react";
import { FishjamClientContext } from "../contexts/fishjamClient";
import { useFishjamId } from "../contexts/fishjamId";
import { PeerStatusContext } from "../contexts/peerStatus";
import { httpToWebsocketUrl, resolveFishjamUrl } from "../utils/fishjamUrl";
import { useReconnection } from "./internal/useReconnection";
/**
* Hook allows to join or leave a room and check the current connection status.
* @category Connection
* @group Hooks
*/
export function useConnection() {
const fishjamClientRef = useContext(FishjamClientContext);
const fishjamId = useFishjamId();
if (!fishjamClientRef)
throw Error("useConnection must be used within FishjamProvider");
const peerStatus = useContext(PeerStatusContext);
const client = fishjamClientRef.current;
const reconnectionStatus = useReconnection();
const joinRoom = useCallback(({ peerToken, peerMetadata, }) => {
if (!fishjamId) {
throw Error(`You haven't passed your Fishjam ID to the FishjamProvider. You can get your Fishjam ID at https://fishjam.io/app`);
}
const connectUrl = httpToWebsocketUrl(resolveFishjamUrl(fishjamId));
return client.connect({ url: connectUrl, token: peerToken, peerMetadata: peerMetadata ?? {} });
}, [client, fishjamId]);
const leaveRoom = useCallback(() => {
client.disconnect();
}, [client]);
return {
/**
* Join room and start streaming camera and microphone
*/
joinRoom,
/**
* Leave room and stop streaming
*/
leaveRoom,
/**
* Current peer connection status
*/
peerStatus,
/**
* Current reconnection status
*/
reconnectionStatus,
};
}