| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- import { useIntl } from "react-intl";
- import { useEffect, useState } from "react";
- import { Link, useNavigate } from "react-router";
- import { Tooltip, Typography } from "antd";
- import { Avatar } from "antd";
- import { Popover } from "antd";
- import { ProCard } from "@ant-design/pro-components";
- import {
- UserOutlined,
- HomeOutlined,
- LogoutOutlined,
- SettingOutlined,
- } from "@ant-design/icons";
- import { useAppSelector } from "../../hooks";
- import { currentUser as _currentUser } from "../../reducers/current-user";
- import type { TooltipPlacement } from "antd/lib/tooltip"
- import SettingModal from "./setting/SettingModal";
- import LoginButton from "./LoginButton";
- const { Title } = Typography;
- interface IWidget {
- placement?: TooltipPlacement;
- style?: React.CSSProperties;
- }
- const AvatarWidget = ({ style, placement = "bottomRight" }: IWidget) => {
- const intl = useIntl();
- const navigate = useNavigate();
- const [userName, setUserName] = useState<string>();
- const [nickName, setNickName] = useState<string>();
- const user = useAppSelector(_currentUser);
- useEffect(() => {
- setUserName(user?.realName);
- setNickName(user?.nickName);
- }, [user]);
- const UserCard = () => {
- return (
- <ProCard
- style={{ maxWidth: 500, minWidth: 300 }}
- actions={[
- <Tooltip
- title={intl.formatMessage({
- id: "buttons.setting",
- })}
- >
- <SettingModal trigger={<SettingOutlined key="setting" />} />
- </Tooltip>,
- <Tooltip
- title={intl.formatMessage({
- id: "columns.library.blog.label",
- })}
- >
- <Link to={`/blog/${userName}/overview`}>
- <HomeOutlined key="home" />
- </Link>
- </Tooltip>,
- <Tooltip
- title={intl.formatMessage({
- id: "buttons.sign-out",
- })}
- >
- <LogoutOutlined
- key="logout"
- onClick={() => {
- sessionStorage.removeItem("token");
- localStorage.removeItem("token");
- navigate("/anonymous/users/sign-in");
- }}
- />
- </Tooltip>,
- ]}
- >
- <div>
- <Title level={4}>{nickName}</Title>
- <div style={{ textAlign: "right" }}>
- {intl.formatMessage({
- id: "buttons.welcome",
- })}
- </div>
- </div>
- </ProCard>
- );
- };
- return (
- <>
- <Popover
- content={user ? <UserCard /> : <LoginButton />}
- placement={placement}
- >
- <span style={style}>
- <Avatar
- style={{ backgroundColor: user ? "#87d068" : "gray" }}
- icon={user?.avatar ? undefined : <UserOutlined />}
- src={user?.avatar}
- size="small"
- >
- {user ? nickName?.slice(0, 1) : undefined}
- </Avatar>
- </span>
- </Popover>
- </>
- );
- };
- export default AvatarWidget;
|