|
'use client' |
|
import { useState } from 'react' |
|
import cn from '@/utils/classnames' |
|
|
|
type AvatarProps = { |
|
name: string |
|
avatar?: string |
|
size?: number |
|
className?: string |
|
textClassName?: string |
|
} |
|
const Avatar = ({ |
|
name, |
|
avatar, |
|
size = 30, |
|
className, |
|
textClassName, |
|
}: AvatarProps) => { |
|
const avatarClassName = 'shrink-0 flex items-center rounded-full bg-primary-600' |
|
const style = { width: `${size}px`, height: `${size}px`, fontSize: `${size}px`, lineHeight: `${size}px` } |
|
const [imgError, setImgError] = useState(false) |
|
|
|
const handleError = () => { |
|
setImgError(true) |
|
} |
|
|
|
if (avatar && !imgError) { |
|
return ( |
|
<img |
|
className={cn(avatarClassName, className)} |
|
style={style} |
|
alt={name} |
|
src={avatar} |
|
onError={handleError} |
|
/> |
|
) |
|
} |
|
|
|
return ( |
|
<div |
|
className={cn(avatarClassName, className)} |
|
style={style} |
|
> |
|
<div |
|
className={cn(textClassName, 'text-center text-white scale-[0.4]')} |
|
style={style} |
|
> |
|
{name[0].toLocaleUpperCase()} |
|
</div> |
|
</div> |
|
) |
|
} |
|
|
|
export default Avatar |
|
|