avatar_overlay.tsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import type { Account } from 'mastodon/models/account';
  2. import { useHovering } from '../../hooks/useHovering';
  3. import { autoPlayGif } from '../initial_state';
  4. interface Props {
  5. account: Account | undefined; // FIXME: remove `undefined` once we know for sure its always there
  6. friend: Account | undefined; // FIXME: remove `undefined` once we know for sure its always there
  7. size?: number;
  8. baseSize?: number;
  9. overlaySize?: number;
  10. }
  11. export const AvatarOverlay: React.FC<Props> = ({
  12. account,
  13. friend,
  14. size = 46,
  15. baseSize = 36,
  16. overlaySize = 24,
  17. }) => {
  18. const { hovering, handleMouseEnter, handleMouseLeave } =
  19. useHovering(autoPlayGif);
  20. const accountSrc = hovering
  21. ? account?.get('avatar')
  22. : account?.get('avatar_static');
  23. const friendSrc = hovering
  24. ? friend?.get('avatar')
  25. : friend?.get('avatar_static');
  26. return (
  27. <div
  28. className='account__avatar-overlay'
  29. style={{ width: size, height: size }}
  30. onMouseEnter={handleMouseEnter}
  31. onMouseLeave={handleMouseLeave}
  32. >
  33. <div className='account__avatar-overlay-base'>
  34. <div
  35. className='account__avatar'
  36. style={{ width: `${baseSize}px`, height: `${baseSize}px` }}
  37. >
  38. {accountSrc && <img src={accountSrc} alt={account?.get('acct')} />}
  39. </div>
  40. </div>
  41. <div className='account__avatar-overlay-overlay'>
  42. <div
  43. className='account__avatar'
  44. style={{ width: `${overlaySize}px`, height: `${overlaySize}px` }}
  45. >
  46. {friendSrc && <img src={friendSrc} alt={friend?.get('acct')} />}
  47. </div>
  48. </div>
  49. </div>
  50. );
  51. };