@daily-co/daily-react
Version:
Daily React makes it easier to integrate [@daily-co/daily-js](https://www.npmjs.com/package/@daily-co/daily-js) in React applications.
51 lines (44 loc) • 1.65 kB
text/typescript
import { DailyEventObject } from '@daily-co/daily-js';
import { useAtomValue } from 'jotai';
import { useCallback, useDebugValue } from 'react';
import { participantState } from '../DailyParticipants';
import { useThrottledDailyEvent } from './useThrottledDailyEvent';
interface UseParticipantArgs {
onParticipantLeft?(ev: DailyEventObject<'participant-left'>): void;
onParticipantUpdated?(ev: DailyEventObject<'participant-updated'>): void;
}
/**
* Returns the participant identified by the given sessionId.
* @param sessionId – The participant's session_id or "local".
* @deprecated Use [useParticipantProperty](https://docs.daily.co/reference/daily-react/use-participant-property) instead to only subscribe to required participant properties.
*/
export const useParticipant = (
sessionId: string,
{ onParticipantLeft, onParticipantUpdated }: UseParticipantArgs = {}
) => {
const participant = useAtomValue(participantState(sessionId));
useThrottledDailyEvent(
['participant-updated', 'participant-left'],
useCallback(
(evts) => {
const filteredEvts = evts.filter(
(ev) => ev.participant.session_id === sessionId
);
if (!filteredEvts.length) return;
filteredEvts.forEach((ev) => {
switch (ev.action) {
case 'participant-updated':
onParticipantUpdated?.(ev);
break;
case 'participant-left':
onParticipantLeft?.(ev);
break;
}
});
},
[onParticipantLeft, onParticipantUpdated, sessionId]
)
);
useDebugValue(participant);
return participant;
};