phanpy/src/components/avatar.jsx

45 lines
741 B
React
Raw Normal View History

2022-12-10 09:14:48 +00:00
import './avatar.css';
2023-03-13 02:10:21 +00:00
import { useRef } from 'preact/hooks';
2022-12-10 09:14:48 +00:00
const SIZES = {
s: 16,
m: 20,
l: 24,
xl: 32,
xxl: 50,
xxxl: 64,
2022-12-10 09:14:48 +00:00
};
function Avatar({ url, size, alt = '', ...props }) {
2022-12-10 09:14:48 +00:00
size = SIZES[size] || size || SIZES.m;
2023-03-13 02:10:21 +00:00
const avatarRef = useRef();
2022-12-10 09:14:48 +00:00
return (
<span
2023-03-13 02:10:21 +00:00
ref={avatarRef}
2022-12-10 09:14:48 +00:00
class="avatar"
style={{
width: size,
height: size,
}}
title={alt}
{...props}
2022-12-10 09:14:48 +00:00
>
{!!url && (
2023-03-13 02:10:21 +00:00
<img
src={url}
width={size}
height={size}
alt={alt}
loading="lazy"
onLoad={(e) => {
avatarRef.current.classList.add('loaded');
}}
/>
2022-12-10 09:14:48 +00:00
)}
</span>
);
2022-12-16 05:27:04 +00:00
}
export default Avatar;