This blog discusses how the avatar of the user has been shown at different places in the UI like the app bar, feedback comments, etc using the Gravatar service on SUSI.AI. A Gravatar is a Globally Recognized Avatar. Your Gravatar is an image that follows you from site to site appearing beside your name when you do things like comment or post on a blog. So, the Gravatar service has been integrated in SUSI.AI, so that it helps identify the user via the avatar too.
Going through the implementation
- The aim is to get an avatar of the user from the email id. For that purpose, Gravatar exposes a publicly available avatar of the user, which can be accessed via the following steps :
- Creating the Hash of the email
- Sending the image request
- For creating the MD5 hash of the email, use the npm library md5. The function takes a string as input and returns the hash of the string.
- Now, a URL is generated using this hash.
- The URL format is https://www.gravatar.com/avatar/HASH, where ‘HASH’ is the hash of the email of the user. In case, the hash is invalid, Gravatar returns a default avatar image.
- Also, append ‘.jpg’ to the URL to maintain image format consistency on the website. When, the generated URL is used in an <img> tag, it behaves like an image and an avatar is returned when the URL is requested by the browser.
- It has been displayed on various instances in the UI like app bar , feedback comments section, etc. The implementation in the feedback section has been discussed below.
- The CircleImage component has been used for displaying the avatar, which takes name as a required property and src as the link of the image, if present. Following function returns props to the CircleImage component.
import md5 from 'md5'; import { urls } from './'; // urls.GRAVATAR_URL = ‘https://www.gravatar.com/avatar’; let getAvatarProps = emailId => { const emailHash = md5(emailId); const GRAVATAR_IMAGE_URL = `${urls.GRAVATAR_URL}/${emailHash}.jpg`; const avatarProps = { name: emailId.toUpperCase(), src: GRAVATAR_IMAGE_URL, }; return avatarProps; }; export default getAvatarProps;
- Then pass the returned props on the CircleImage component and set it as the leftAvatar property of the feedback comments ListItem. Following is the snippet –
…. <ListItem key={index} leftAvatar={<CircleImage {...avatarProps} size="40" />} primaryText={ <div> <div>{`${data.email.slice( 0, data.email.indexOf('@') + 1, )}...`}</div> <div className="feedback-timestamp"> {this.formatDate(parseDate(data.timestamp))} </div> </div> } secondaryText={<p>{data.feedback}</p>} /> …. . .
- This displays the avatar of the user on the UI. The UI changes have been shown below :
References
- The API reference on Gravatar website