import React, { useEffect, useState } from 'react'; import SmoothImage from 'react-smooth-image'; import { Avatar, Badge, Tooltip, useTheme } from '@mui/material'; import { useTranslation } from 'react-i18next'; import { SendReceiveIcon } from '../Icons'; import { apiClient } from '../../services/api'; import placeholder from './placeholder.json'; interface Props { nickname: string | undefined; smooth?: boolean; flipHorizontally?: boolean; style?: object; imageStyle?: object; placeholderType?: 'loading' | 'generating'; statusColor?: 'primary' | 'secondary' | 'default' | 'error' | 'info' | 'success' | 'warning'; orderType?: number; tooltip?: string; tooltipPosition?: string; avatarClass?: string; onLoad?: () => void; baseUrl: string; } const RobotAvatar: React.FC = ({ nickname, orderType, statusColor, tooltip, tooltipPosition = 'right', smooth = false, flipHorizontally = false, placeholderType = 'loading', style = {}, avatarClass = 'flippedSmallAvatar', imageStyle = {}, onLoad = () => {}, baseUrl, }) => { const { t } = useTranslation(); const theme = useTheme(); const [avatarSrc, setAvatarSrc] = useState(); const [nicknameReady, setNicknameReady] = useState(false); const backgroundData = placeholderType == 'generating' ? placeholder.generating : placeholder.loading; const backgroundImage = `url(data:${backgroundData.mime};base64,${backgroundData.data})`; const className = placeholderType == 'loading' ? theme.palette.mode === 'dark' ? 'loadingAvatarDark' : 'loadingAvatar' : 'generatingAvatar'; useEffect(() => { if (nickname != undefined) { if (window.NativeRobosats === undefined) { setAvatarSrc(baseUrl + '/static/assets/avatars/' + nickname + '.png'); setNicknameReady(true); } else { setNicknameReady(true); apiClient .fileImageUrl(baseUrl, '/static/assets/avatars/' + nickname + '.png') .then(setAvatarSrc); } } else { setNicknameReady(false); } }, [nickname]); const statusBadge = (
{orderType === 0 ? ( ) : ( )}
); const getAvatar = () => { if (smooth) { return (
); } else { return ( ); } }; const getAvatarWithBadges = () => { let component = getAvatar(); if (statusColor) { component = ( {component} ); } if (orderType !== undefined) { component = ( {component} ); } return component; }; return tooltip ? ( {getAvatarWithBadges()} ) : ( getAvatarWithBadges() ); }; export default RobotAvatar;