in app/hooks/useAttendee.tsx [11:42]
export default function useAttendee(attendeeId: string) {
const chime: ChimeSdkWrapper | null = useContext(getChimeContext());
const [attendee, setAttendee] = useState<RosterAttendeeType>(
chime?.roster[attendeeId] || {}
);
useEffect(() => {
let previousRosterAttendee: RosterAttendeeType | null = null;
const callback = (newRoster: RosterType) => {
const rosterAttendee = newRoster[attendeeId]
? ({ ...newRoster[attendeeId] } as RosterAttendeeType)
: null;
// In the classroom demo, we don't subscribe to volume and signal strength changes.
// The VideoNameplate component that uses this hook will re-render only when name and muted status change.
if (rosterAttendee) {
if (
!previousRosterAttendee ||
previousRosterAttendee.name !== rosterAttendee.name ||
previousRosterAttendee.muted !== rosterAttendee.muted
) {
setAttendee(rosterAttendee);
}
}
previousRosterAttendee = rosterAttendee;
};
chime?.subscribeToRosterUpdate(callback);
return () => {
chime?.unsubscribeFromRosterUpdate(callback);
};
}, []);
return attendee;
}