import * as React from 'react' import { Network } from '@dcl/schemas/dist/dapps/network' import { Avatar } from '@dcl/schemas/dist/platform/profile/avatar' import Menu from 'semantic-ui-react/dist/commonjs/collections/Menu' import Icon from 'semantic-ui-react/dist/commonjs/elements/Icon' import { AvatarFace } from '../AvatarFace/AvatarFace' import { Mana } from '../Mana/Mana' import { Button } from '../Button/Button' import { Row } from '../Row/Row' import './UserMenu.css' export type UserMenuI18N = { signIn: React.ReactNode signOut: React.ReactNode guest: React.ReactNode settings: React.ReactNode account: React.ReactNode } export type UserMenuProps = { isSignedIn: boolean isSigningIn: boolean isActivity: boolean hasActivity: boolean address?: string manaBalances?: Partial> avatar?: Avatar menuItems?: React.ReactNode i18n: UserMenuI18N onSignOut: () => void onSignIn: () => void onClickProfile: () => void onClickActivity: () => void onClickSettings: () => void onClickBalance: (network: Network) => void } export type UserMenuState = { isOpen: boolean isClickable: boolean } export class UserMenu extends React.Component { static defaultProps: Partial = { manaBalances: {}, i18n: { signIn: 'Sign In', signOut: 'Sign Out', guest: 'Guest', settings: 'Settings', account: 'Account' } } state: UserMenuState = { isOpen: false, isClickable: false } mounted = false ref: HTMLElement | null = null handleClose = (): void => { this.toggle(false) } handleToggle = (): void => { this.toggle(!this.state.isOpen) } toggle(value: boolean): void { this.setState({ isOpen: value }) setTimeout(() => { if (this.mounted) { this.setState({ isClickable: value }) } }, 250) } componentDidMount(): void { this.mounted = true } componentWillUnmount(): void { this.mounted = false } render(): JSX.Element { const { avatar, manaBalances, isSignedIn, isSigningIn, isActivity, hasActivity, onSignOut, onSignIn, onClickProfile, onClickActivity, onClickSettings, onClickBalance, i18n, menuItems } = this.props const { isOpen, isClickable } = this.state const name = avatar ? avatar.name : null return ( {onClickActivity ? ( ) : null}
{isSignedIn && ( <> {Object.keys(manaBalances).map((network) => ( {Number(manaBalances[network].toFixed(2)).toLocaleString()} ))}
{name || i18n.guest}
  • {i18n.account}
  • {menuItems} {onClickSettings ? (
  • {i18n.settings}
  • ) : null} {onSignOut ? (
  • {i18n.signOut}
  • ) : null}
)} {!isSignedIn && ( )}
) } }