User.tsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { Avatar, Popover, Space, Typography } from "antd";
  2. import { getAvatarColor } from "./Studio";
  3. const { Text } = Typography;
  4. export interface IUser {
  5. id: string;
  6. nickName: string;
  7. userName: string;
  8. avatar?: string;
  9. roles?: string[];
  10. }
  11. interface IWidget {
  12. id?: string;
  13. nickName?: string;
  14. userName?: string;
  15. avatar?: string;
  16. showAvatar?: boolean;
  17. showName?: boolean;
  18. showUserName?: boolean;
  19. hidePopover?: boolean;
  20. }
  21. const UserWidget = ({
  22. nickName,
  23. userName,
  24. avatar,
  25. showAvatar = true,
  26. showName = true,
  27. showUserName = false,
  28. hidePopover = false,
  29. }: IWidget) => {
  30. const inner = (
  31. <Space>
  32. {showAvatar ? (
  33. <Avatar
  34. size={"small"}
  35. src={avatar}
  36. style={
  37. avatar ? undefined : { backgroundColor: getAvatarColor(nickName) }
  38. }
  39. >
  40. {nickName?.slice(0, 2)}
  41. </Avatar>
  42. ) : undefined}
  43. {showName ? <Text>{nickName}</Text> : undefined}
  44. {showName && showUserName ? <Text>@</Text> : undefined}
  45. {showUserName ? <Text>{userName}</Text> : undefined}
  46. </Space>
  47. );
  48. return hidePopover ? (
  49. inner
  50. ) : (
  51. <Popover
  52. content={
  53. <div>
  54. <div>
  55. <Avatar
  56. size="large"
  57. src={avatar}
  58. style={
  59. avatar
  60. ? undefined
  61. : { backgroundColor: getAvatarColor(nickName) }
  62. }
  63. >
  64. {nickName?.slice(0, 2)}
  65. </Avatar>
  66. </div>
  67. <Text>{`${nickName}@${userName}`}</Text>
  68. </div>
  69. }
  70. >
  71. {inner}
  72. </Popover>
  73. );
  74. };
  75. export default UserWidget;