You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.3 KiB

  1. import Icon from '@/components/icon'
  2. import { useTranslation } from '@/i18n.ts'
  3. import { currentUserAtom } from '@/store/user.ts'
  4. import { Avatar as AntAvatar, Dropdown, Spin } from 'antd'
  5. import { useAtomValue } from 'jotai'
  6. const Avatar = () => {
  7. const { t } = useTranslation()
  8. const { data, isLoading } = useAtomValue(currentUserAtom)
  9. return (
  10. <div>
  11. <Dropdown
  12. key={'user'}
  13. placement="bottomRight"
  14. menu={{
  15. items: [
  16. {
  17. key: 'logout',
  18. icon: <Icon type={'park:Logout'}/>,
  19. label: <span style={{
  20. marginInlineStart: 8,
  21. userSelect: 'none'
  22. }}>{t('app.header.logout')}</span>,
  23. },
  24. ],
  25. }}
  26. >
  27. <Spin spinning={isLoading}>
  28. <AntAvatar
  29. key="avatar"
  30. size={'small'}
  31. src={data?.avatar || data?.nickname?.substring(0, 1)}>
  32. {!data?.avatar && data?.nickname?.substring(0, 1)}
  33. </AntAvatar>
  34. <span key="name"
  35. style={{
  36. marginInlineStart: 8,
  37. userSelect: 'none'
  38. }}>
  39. {data?.nickname}
  40. </span>
  41. </Spin>
  42. </Dropdown>
  43. </div>
  44. )
  45. }
  46. export default Avatar