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'; export const UserStatus = React.memo(({ small, status, ...props }) => { const size = small ? 'small' : 'large'; const t = useTranslation(); switch (status) { case 'online': return ; case 'busy': return ; case 'away': return ; case 'offline': return ; default: return ; } }); export const Busy = (props) => ; export const Away = (props) => ; export const Online = (props) => ; export const Offline = (props) => ; export const Loading = (props) => ; export const colors = { busy: 'danger-500', away: 'warning-600', online: 'success-500', offline: 'neutral-600', }; export const usePresence = (uid, presence) => { const [status, setStatus] = useSafely(useState(presence)); useEffect(() => { const handle = ({ status = 'loading' }) => { setStatus(status); }; Presence.listen(uid, handle); return () => { Presence.stop(uid, handle); }; }, [setStatus, uid]); return status; }; export const ReactiveUserStatus = React.memo(({ uid, presence, ...props }) => { const status = usePresence(uid, presence); return ; });