import { HeaderToggleButton, MainCard } from '@/components'; import { Avatar, IconButton, Transitions } from '@/components/@extended'; import { usePopoverState } from '@/hooks'; import { LogoutOutlined } from '@ant-design/icons'; import { CardContent, ClickAwayListener, Grid, List, Paper, Popper, Stack, Tooltip, Typography, useTheme } from '@mui/material'; import { useDataProvider, useGetIdentity, useLogout } from 'ra-core'; import React, { ReactNode, useCallback, useEffect, useMemo, useState } from 'react'; import { ChangePasswordButton, LogoutButton, StopImpersonateButton } from './buttons'; interface HeaderProfileProps { roles?: ReactNode; } function HeaderProfile(props: HeaderProfileProps) { const { roles } = props; const theme = useTheme(); const dataProvider = useDataProvider(); const { identity } = useGetIdentity(); const hasProfilePic = identity !== undefined && identity.image && true && identity.image !== ''; const [profileImage, setProfileImage] = useState(null); const { open, anchorEl, handleToggle, handleClose } = usePopoverState(); const logout = useLogout(); const handleLogout = useCallback(() => { // noinspection JSIgnoredPromiseFromCall logout(); }, [logout]); useEffect(() => { if (hasProfilePic) { dataProvider.getFile('/profile/me/image').then((image: string) => setProfileImage(image)); } }, [dataProvider, hasProfilePic]); const userRoles = useMemo( () => React.isValidElement(roles) ? ( roles ) : roles ? ( <>{roles} ) : ( identity?.roles?.map((r: { name: string }) => r.name.replace('ROLE_', '')).join(',') ), [roles, identity] ); return ( <> {/** @ts-ignore */} {identity?.name} {({ TransitionProps }) => ( {/* @ts-expect-error WARN: wtf */} {identity?.name} {userRoles} )} ); } export { HeaderProfile };