export default function useAttendee()

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;
}