import React from 'react'; import { Box, Margins, Divider, Option } from '@rocket.chat/fuselage'; import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; import { Meteor } from 'meteor/meteor'; import { FlowRouter } from 'meteor/kadira:flow-router'; import UserAvatar from '../../components/avatar/UserAvatar'; import { UserStatus } from '../../components/UserStatus'; import { useSetting } from '../../contexts/SettingsContext'; import { useTranslation } from '../../contexts/TranslationContext'; import { useRoute } from '../../contexts/RouterContext'; import { useReactiveValue } from '../../hooks/useReactiveValue'; import { useAtLeastOnePermission } from '../../contexts/AuthorizationContext'; import { userStatus } from '../../../app/user-status'; import { callbacks } from '../../../app/callbacks'; import { popover, AccountBox, modal, SideNav } from '../../../app/ui-utils'; const ADMIN_PERMISSIONS = [ 'view-logs', 'manage-emoji', 'manage-sounds', 'view-statistics', 'manage-oauth-apps', 'view-privileged-setting', 'manage-selected-settings', 'view-room-administration', 'view-user-administration', 'access-setting-permissions', 'manage-outgoing-integrations', 'manage-incoming-integrations', 'manage-own-outgoing-integrations', 'manage-own-incoming-integrations', ]; const style = { marginInline: '-16px', }; const setStatus = (status, statusText) => { AccountBox.setStatus(status, statusText); callbacks.run('userStatusManuallySet', status); }; const getItems = () => AccountBox.getItems(); const UserDropdown = ({ user, onClose }) => { const t = useTranslation(); const homeRoute = useRoute('home'); const accountRoute = useRoute('account'); const adminRoute = useRoute('admin'); const { name, username, avatarETag, status, statusText, } = user; const useRealName = useSetting('UI_Use_Real_Name'); const showAdmin = useAtLeastOnePermission(ADMIN_PERMISSIONS); const handleCustomStatus = useMutableCallback((e) => { e.preventDefault(); modal.open({ title: t('Edit_Status'), content: 'editStatus', data: { onSave() { modal.close(); }, }, modalClass: 'modal', showConfirmButton: false, showCancelButton: false, confirmOnEnter: false, }); onClose(); }); const handleLogout = useMutableCallback(() => { Meteor.logout(() => { callbacks.run('afterLogoutCleanUp', user); Meteor.call('logoutCleanUp', user); homeRoute.push({}); popover.close(); }); }); const handleMyAccount = useMutableCallback(() => { accountRoute.push({}); popover.close(); }); const handleAdmin = useMutableCallback(() => { adminRoute.push({ group: 'info' }); popover.close(); }); const accountBoxItems = useReactiveValue(getItems); return {useRealName ? name || username : username} {statusText || t(status)}
{t('Status')} {Object.keys(userStatus.list).map((key) => { const status = userStatus.list[key]; const name = status.localizeName ? t(status.name) : status.name; const modifier = status.statusType || user.status; return ; })}
{(accountBoxItems.length || showAdmin) && <>
{showAdmin &&
}
; }; export default UserDropdown;