Source

adminjs-design-system/src/molecules/logged-user.tsx

  1. import React from 'react'
  2. import styled from 'styled-components'
  3. import { Box } from '../atoms/box/box'
  4. import { DropDown, DropDownTrigger, DropDownMenu } from './drop-down/index'
  5. import { Text } from '../atoms/text'
  6. import { Icon } from '../atoms/icon'
  7. const height = '46px'
  8. const LoggedUserInfo = styled(Box)`
  9. display: flex;
  10. flex-direction: row;
  11. vertical-align: middle;
  12. color: ${({ theme }): string => theme.colors.grey60};
  13. height: ${height};
  14. & img {
  15. border-radius: 9999px;
  16. margin-right: 0 8px;
  17. width: 36px;
  18. height: 36px;
  19. object-fit: cover;
  20. border-radius: 9999px;
  21. }
  22. `
  23. /**
  24. * @memberof LoggedUser
  25. * @alias LoggedUserProps
  26. * @private
  27. */
  28. export type LoggedUserProps = {
  29. email: string;
  30. title?: string;
  31. avatarUrl?: string;
  32. }
  33. /**
  34. * @classdesc
  35. *
  36. * <img src="components/logged-user.png" />
  37. *
  38. * Logged in user state in the header
  39. *
  40. *
  41. * ### Usage
  42. *
  43. * ```javascript
  44. * import { LoggedUser, LoggedUserProps } from '@adminjs/design-system'
  45. * ```
  46. *
  47. * @component
  48. * @subcategory Molecules
  49. * @hideconstructor
  50. * @see {@link https://storybook.adminjs.co/?path=/story/designsystem-molecules-loggeduser--default Storybook}
  51. * @see LoggedUserProps
  52. * @section design-system
  53. * @deprecated In favour of {@link CurrentUserNav} component
  54. */
  55. const LoggedUser: React.FC<LoggedUserProps> = (props) => {
  56. const { email, title, avatarUrl, children } = props
  57. return (
  58. <DropDown>
  59. <DropDownTrigger>
  60. <LoggedUserInfo pr="xl">
  61. <Box mr="default">
  62. <Text
  63. fontSize="default"
  64. lineHeight={title ? 'lg' : 'xl'}
  65. fontWeight="normal"
  66. >
  67. {email}
  68. </Text>
  69. <Text fontSize="sm" color="grey40" lineHeight="sm">{title}</Text>
  70. </Box>
  71. {avatarUrl ? (
  72. <img src={avatarUrl} alt="avatar" />
  73. ) : null}
  74. <Icon icon="OverflowMenuVertical" size={16} my="default" color="grey60" />
  75. </LoggedUserInfo>
  76. </DropDownTrigger>
  77. <DropDownMenu top={height}>
  78. {children}
  79. </DropDownMenu>
  80. </DropDown>
  81. )
  82. }
  83. export { LoggedUser }
  84. export default LoggedUser