import { useState } from "react"; import "./Avatar.css"; const COLOURS = [ "#fd5548", "#fd9448", "#ffc61a", "#69b65c", "#279ae1", "#7bccff", "#95e388", ]; const getInitials = (name: string) => name .split(/\s+/) .filter(Boolean) .slice(0, 2) .map((word) => word[0].toUpperCase()) .join(""); const getColour = (name: string) => { let hash = 0; for (const char of name) { hash = char.charCodeAt(0) + ((hash << 5) - hash); } return COLOURS[Math.abs(hash) % COLOURS.length]; }; const PersonIcon = () => ( ); interface AvatarProps { src?: string; alt?: string; name?: string; size?: string; shape?: string; className?: string; } const Avatar = ({ src, alt, name, size = "md", shape = "circle", className, }: AvatarProps) => { const [imgError, setImgError] = useState(false); const classNames = `avatar avatar-${size} avatar-${shape}${className ? ` ${className}` : ""}`; if (src && !imgError) { return (
{alt setImgError(true)} />
); } if (name) { const initials = getInitials(name); const bgColour = getColour(name); return (
); } return (
); }; export default Avatar;