UserPicture.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import React from 'react';
  2. import md5 from 'md5';
  3. import PropTypes from 'prop-types';
  4. // TODO UserComponent?
  5. export default class UserPicture extends React.Component {
  6. getUserPicture(user) {
  7. // gravatar
  8. if (user.isGravatarEnabled === true) {
  9. return this.generateGravatarSrc(user);
  10. }
  11. // uploaded image
  12. else if (user.image != null) {
  13. return user.image;
  14. }
  15. else if (user.imageAttachment != null) {
  16. return user.imageAttachment.filePathProxied;
  17. }
  18. else {
  19. return '/images/icons/user.svg';
  20. }
  21. }
  22. generateGravatarSrc(user) {
  23. const email = user.email || '';
  24. const hash = md5(email.trim().toLowerCase());
  25. return `https://gravatar.com/avatar/${hash}`;
  26. }
  27. getClassName() {
  28. let className = ['img-circle', 'picture'];
  29. // size
  30. if (this.props.size) {
  31. className.push('picture-' + this.props.size);
  32. }
  33. return className.join(' ');
  34. }
  35. render() {
  36. const user = this.props.user;
  37. return (
  38. <img
  39. src={this.getUserPicture(user)}
  40. alt={user.username}
  41. className={this.getClassName()}
  42. />
  43. );
  44. }
  45. }
  46. UserPicture.propTypes = {
  47. user: PropTypes.object.isRequired,
  48. size: PropTypes.string,
  49. };
  50. UserPicture.defaultProps = {
  51. user: {},
  52. size: null,
  53. };