fleet/frontend/components/Avatar/Avatar.tsx
RachelElysia d58183c797
Frontend Integration Tests: Create activity integration tests, reorganized mock server calls (#8620)
* Create activity integration tests, reorganized mock server calls

Co-authored by: Gabe <ghernandez345@gmail.com>

* Specify pagination button
2022-11-15 13:29:12 +00:00

47 lines
1.1 KiB
TypeScript

import React, { useState, useCallback } from "react";
import classnames from "classnames";
import { DEFAULT_GRAVATAR_LINK } from "utilities/constants";
interface IAvatarUserInterface {
gravatarURL?: string;
}
export interface IAvatarInterface {
className?: string;
size?: string;
user: IAvatarUserInterface;
}
const baseClass = "avatar";
const Avatar = ({ className, size, user }: IAvatarInterface): JSX.Element => {
const [isLoading, setIsLoading] = useState(true);
const [isError, setIsError] = useState(false);
const onLoad = useCallback(() => {
setIsLoading(false);
}, []);
const onError = useCallback(() => {
setIsError(true);
}, []);
const avatarClasses = classnames(baseClass, className, {
[`${baseClass}--${size?.toLowerCase()}`]: !!size,
});
const { gravatarURL } = user;
return (
<div className="avatar-wrapper">
<img
alt={"User avatar"}
className={`${avatarClasses} ${isLoading || isError ? "default" : ""}`}
src={gravatarURL || DEFAULT_GRAVATAR_LINK}
onError={onError}
onLoad={onLoad}
/>
</div>
);
};
export default Avatar;