import { Button, PositionAnimated, Options, useCursor, Box } from '@rocket.chat/fuselage'; import React, { useRef, useCallback, useState, useMemo, useEffect } from 'react'; import { useSetting } from '../contexts/SettingsContext'; import { useTranslation } from '../contexts/TranslationContext'; import { UserStatus } from './UserStatus'; const UserStatusMenu = ({ onChange = () => {}, optionWidth, initialStatus = 'offline', placement = 'bottom-end', ...props }) => { const t = useTranslation(); const [status, setStatus] = useState(initialStatus); const allowInvisibleStatus = useSetting('Accounts_AllowInvisibleStatusOption'); const options = useMemo(() => { const renderOption = (status, label) => ( {label} ); const statuses = [ ['online', renderOption('online', t('Online'))], ['busy', renderOption('busy', t('Busy'))], ['away', renderOption('away', t('Away'))], ]; if (allowInvisibleStatus) { statuses.push(['offline', renderOption('offline', t('Invisible'))]); } return statuses; }, [t, allowInvisibleStatus]); const [cursor, handleKeyDown, handleKeyUp, reset, [visible, hide, show]] = useCursor( -1, options, ([selected], [, hide]) => { setStatus(selected); reset(); hide(); }, ); const ref = useRef(); const onClick = useCallback(() => { ref.current.focus() & show(); ref.current.classList.add('focus-visible'); }, [show]); const handleSelection = useCallback( ([selected]) => { setStatus(selected); reset(); hide(); }, [hide, reset], ); useEffect(() => onChange(status), [status, onChange]); return ( <> ); }; export default UserStatusMenu;