| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import React from 'react';
- import { Avatar, Menu, Spin, Icon } from 'antd';
- import { FormattedMessage } from 'umi-plugin-react/locale';
- import { ClickParam } from 'antd/lib/menu';
- import { ConnectProps, ConnectState } from '@/models/connect';
- import { CurrentUser } from '@/models/user';
- import { connect } from 'dva';
- import router from 'umi/router';
- import HeaderDropdown from '../HeaderDropdown';
- import styles from './index.less';
- export interface GlobalHeaderRightProps extends ConnectProps {
- currentUser?: CurrentUser;
- menu?: boolean;
- }
- class AvatarDropdown extends React.Component<GlobalHeaderRightProps> {
- onMenuClick = (event: ClickParam) => {
- const { key } = event;
- if (key === 'logout') {
- const { dispatch } = this.props;
- dispatch!({
- type: 'login/logout',
- });
- return;
- }
- router.push(`/account/${key}`);
- };
- render() {
- const { currentUser = {}, menu } = this.props;
- if (!menu) {
- return (
- <span className={`${styles.action} ${styles.account}`}>
- <Avatar size="small" className={styles.avatar} src={currentUser.avatar} alt="avatar" />
- <span className={styles.name}>{currentUser.name}</span>
- </span>
- );
- }
- const menuHeaderDropdown = (
- <Menu className={styles.menu} selectedKeys={[]} onClick={this.onMenuClick}>
- <Menu.Item key="center">
- <Icon type="user" />
- <FormattedMessage id="menu.account.center" defaultMessage="account center" />
- </Menu.Item>
- <Menu.Item key="settings">
- <Icon type="setting" />
- <FormattedMessage id="menu.account.settings" defaultMessage="account settings" />
- </Menu.Item>
- <Menu.Divider />
- <Menu.Item key="logout">
- <Icon type="logout" />
- <FormattedMessage id="menu.account.logout" defaultMessage="logout" />
- </Menu.Item>
- </Menu>
- );
- return currentUser && currentUser.name ? (
- <HeaderDropdown overlay={menuHeaderDropdown}>
- <span className={`${styles.action} ${styles.account}`}>
- <Avatar size="small" className={styles.avatar} src={currentUser.avatar} alt="avatar" />
- <span className={styles.name}>{currentUser.name}</span>
- </span>
- </HeaderDropdown>
- ) : (
- <Spin size="small" style={{ marginLeft: 8, marginRight: 8 }} />
- );
- }
- }
- export default connect(({ user }: ConnectState) => ({
- currentUser: user.currentUser,
- }))(AvatarDropdown);
|