user-avatar.tsx 1008 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { LoadingSpinner } from "./modals/LoadingProject";
  2. import DefaultUserAvatar from "#/assets/default-user.svg?react";
  3. import { cn } from "#/utils/utils";
  4. interface UserAvatarProps {
  5. onClick: () => void;
  6. avatarUrl?: string;
  7. isLoading?: boolean;
  8. }
  9. export function UserAvatar({ onClick, avatarUrl, isLoading }: UserAvatarProps) {
  10. return (
  11. <button
  12. data-testid="user-avatar"
  13. type="button"
  14. onClick={onClick}
  15. className={cn(
  16. "bg-white w-8 h-8 rounded-full flex items-center justify-center",
  17. isLoading && "bg-transparent",
  18. )}
  19. >
  20. {!isLoading && avatarUrl && (
  21. <img
  22. src={avatarUrl}
  23. alt="user avatar"
  24. className="w-full h-full rounded-full"
  25. />
  26. )}
  27. {!isLoading && !avatarUrl && (
  28. <DefaultUserAvatar
  29. aria-label="user avatar placeholder"
  30. width={20}
  31. height={20}
  32. />
  33. )}
  34. {isLoading && <LoadingSpinner size="small" />}
  35. </button>
  36. );
  37. }