import { useIntl } from "react-intl"; import { useState } from "react"; import { _Link, useNavigate } from "react-router"; import { Divider, Menu, Typography } from "antd"; import { Avatar } from "antd"; import { Popover } from "antd"; import { UserOutlined, HomeOutlined, LogoutOutlined, SettingOutlined, } from "@ant-design/icons"; import { useAppSelector } from "../../hooks"; import { currentUser as _currentUser, studioList, } from "../../reducers/current-user"; import type { TooltipPlacement } from "antd/lib/tooltip" import SettingModal from "./setting/SettingModal"; import { AdminIcon } from "../../assets/icon"; import User from "./User"; import { fullUrl } from "../../utils"; import Studio from "./Studio"; import LoginButton from "./LoginButton"; const { Title, Paragraph, Text } = Typography; interface IWidget { placement?: TooltipPlacement; style?: React.CSSProperties; } const SignInAvatarWidget = ({ style, placement = "bottomRight" }: IWidget) => { const intl = useIntl(); const navigate = useNavigate(); const [settingOpen, setSettingOpen] = useState(false); const user = useAppSelector(_currentUser); const studios = useAppSelector(studioList); console.debug("user", user); const canManage = user?.roles?.includes("root") || user?.roles?.includes("administrator"); if (typeof user === "undefined") { return ; } else { const welcome = ( {user.nickName} 账户名 {user.realName} {intl.formatMessage({ id: "buttons.welcome", })} ); let userList = [ { key: user.realName, label: , }, ]; const studioList = studios?.map((item, _id) => { return { key: item.realName ?? "", label: , }; }); if (studioList) { userList = [...userList, ...studioList]; } return ( <> <>{welcome}
, children: userList, }, { key: "setting", label: "设置", icon: , }, { key: "admin", label: intl.formatMessage({ id: "buttons.admin", }), icon: , disabled: !canManage, }, { key: "blog", label: intl.formatMessage({ id: "columns.library.blog.label", }), icon: , }, { key: "logout", label: intl.formatMessage({ id: "buttons.sign-out", }), icon: , }, ].filter((value) => !value.disabled)} onClick={(info) => { switch (info.key) { case "setting": setSettingOpen(true); break; case "admin": window.open(fullUrl(`/admin`), "_blank"); break; case "blog": const blog = `/blog/${user.realName}/overview`; window.open(fullUrl(blog), "_blank"); break; case "logout": sessionStorage.removeItem("token"); localStorage.removeItem("token"); navigate("/anonymous/users/sign-in"); break; } }} />
} placement={placement} > } src={user?.avatar} size="small" > {user.nickName?.slice(0, 2)}
setSettingOpen(false)} /> ); } }; export default SignInAvatarWidget;