import type { UserPresenceContextValue } from '@rocket.chat/ui-contexts'; import { useSetting, UserPresenceContext } from '@rocket.chat/ui-contexts'; import type { ReactNode } from 'react'; import { useMemo, useEffect } from 'react'; import { useUserPresenceListener } from '../hooks/useUserPresenceListener'; import { Presence } from '../lib/presence'; import { UserPresence } from '../lib/userPresence'; export const userPresence = new UserPresence(); export type UserPresenceProviderProps = { children?: ReactNode; }; const UserPresenceProvider = ({ children }: UserPresenceProviderProps) => { userPresence.use(); useUserPresenceListener(); const usePresenceDisabled = useSetting('Presence_broadcast_disabled', false); useEffect(() => { Presence.setStatus(usePresenceDisabled ? 'disabled' : 'enabled'); }, [usePresenceDisabled]); const contextValue: UserPresenceContextValue = useMemo( () => ({ queryUserData: (uid) => { if (!uid) { return { get: () => undefined, subscribe: () => () => undefined }; } const subscribe = (callback: () => void) => { Presence.listen(uid, callback); return () => { Presence.stop(uid, callback); }; }; const get = () => Presence.store.get(uid); return { subscribe, get }; }, }), [], ); return {children}; }; export default UserPresenceProvider;