SignInAvatar.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { useEffect, useState } from "react";
  2. import { Link, useNavigate } from "react-router-dom";
  3. import { Tooltip } from "antd";
  4. import { Avatar } from "antd";
  5. import { Popover } from "antd";
  6. import { ProCard } from "@ant-design/pro-components";
  7. import {
  8. UserOutlined,
  9. HomeOutlined,
  10. LogoutOutlined,
  11. SettingOutlined,
  12. } from "@ant-design/icons";
  13. import { useAppSelector } from "../../hooks";
  14. import { currentUser as _currentUser } from "../../reducers/current-user";
  15. const Widget = () => {
  16. // TODO
  17. const navigate = useNavigate();
  18. const [userName, setUserName] = useState("");
  19. const [nickName, setNickName] = useState("");
  20. const user = useAppSelector(_currentUser);
  21. useEffect(() => {
  22. setUserName(user ? user.realName : "");
  23. setNickName(user ? user.nickName : "");
  24. }, [user]);
  25. const userCard = (
  26. <>
  27. <ProCard
  28. style={{ maxWidth: 500, minWidth: 300 }}
  29. actions={[
  30. <Tooltip title="设置">
  31. <SettingOutlined key="setting" />
  32. </Tooltip>,
  33. <Tooltip title="个人空间">
  34. <Link to={`/blog/${userName}/overview`}>
  35. <HomeOutlined key="home" />
  36. </Link>
  37. </Tooltip>,
  38. <Tooltip title="退出登录">
  39. <LogoutOutlined
  40. key="logout"
  41. onClick={() => {
  42. sessionStorage.removeItem("token");
  43. localStorage.removeItem("token");
  44. navigate("/anonymous/users/sign-in");
  45. }}
  46. />
  47. </Tooltip>,
  48. ]}
  49. >
  50. <div>
  51. <h2>{nickName}</h2>
  52. <div>欢迎遨游法的海洋</div>
  53. </div>
  54. </ProCard>
  55. </>
  56. );
  57. if (typeof user === "undefined") {
  58. return <Link to="/anonymous/users/sign-in">登录</Link>;
  59. } else {
  60. return (
  61. <>
  62. <Popover content={userCard} placement="bottomRight">
  63. <Avatar
  64. style={{ backgroundColor: "#87d068" }}
  65. icon={<UserOutlined />}
  66. >
  67. {nickName.slice(0, 1)}
  68. </Avatar>
  69. </Popover>
  70. </>
  71. );
  72. }
  73. };
  74. export default Widget;