diff --git a/client/components/basic/UserStatus.js b/client/components/basic/UserStatus.js index 6e288136904..db308f35492 100644 --- a/client/components/basic/UserStatus.js +++ b/client/components/basic/UserStatus.js @@ -1,5 +1,6 @@ import React, { useEffect, useState } from 'react'; import { StatusBullet } from '@rocket.chat/fuselage'; +import { useSafely } from '@rocket.chat/fuselage-hooks'; import { useTranslation } from '../../contexts/TranslationContext'; import { Presence } from '../../lib/presence'; @@ -34,7 +35,7 @@ export const colors = { }; export const usePresence = (uid, presence) => { - const [status, setStatus] = useState(presence); + const [status, setStatus] = useSafely(useState(presence)); useEffect(() => { const handle = ({ status = 'loading' }) => { setStatus(status); @@ -43,7 +44,7 @@ export const usePresence = (uid, presence) => { return () => { Presence.stop(uid, handle); }; - }, [uid]); + }, [setStatus, uid]); return status; }; diff --git a/client/lib/presence.ts b/client/lib/presence.ts index 4c821f4fbb6..014b7a2a38f 100644 --- a/client/lib/presence.ts +++ b/client/lib/presence.ts @@ -40,7 +40,7 @@ const getPresence = ((): ((uid: User['_id']) => void) => { }); currentUids.forEach((uid) => { - emitter.emit(uid, { uid, status: 'offline' }); + emitter.emit(uid, { _id: uid, status: 'offline' }); }); currentUids.clear(); @@ -99,10 +99,12 @@ const listen = (uid: User['_id'], handler: Handler): void => { }; const stop = (uid: User['_id'], handler: Handler): void => { - emitter.off(uid, handler); - emitter.off(uid, update); - emitter.off('reset', handler); - emitter.emit('remove', uid); + setTimeout(() => { + emitter.off(uid, handler); + emitter.off(uid, update); + emitter.off('reset', handler); + emitter.emit('remove', uid); + }, 5000); }; const reset = (): void => {