modules_Gravatar_index.js
import { React, PropTypes, classnames } from '@gravityforms/libraries';
import Image from '../../elements/Image';
const { forwardRef } = React;
/**
* @module Gravatar
* @description Renders a Gravatar image.
*
* @since 4.0.7
*
* @param {object} props Component props.
* @param {string} props.altText The alt text for the image.
* @param {boolean} props.circular Whether to display the image as a circle.
* @param {string} props.customAttributes The custom attributes for the component.
* @param {string} props.customClasses The custom classes for the component.
* @param {string} props.defaultImage The default image to use if the email address does not have a Gravatar. One of `404`, `mp`, `identicon`, `monsterid`, `wavatar`, `retro`, `robohash`, `blank`, or a URL.
* @param {string} props.emailHash The email hash for the Gravatar.
* @param {boolean} props.forceDefault Whether to force the default image to be used.
* @param {number} props.height The height of the image.
* @param {object} props.imageAttributes The custom attributes for the image.
* @param {string} props.rating The rating for the Gravatar image. One of `g`, `pg`, `r`, or `x`.
* @param {number} props.size The size of the requested Gravatar image.
* @param {number} props.width The width of the image.
*
* @return {JSX.Element} Return the Gravatar component in React.
*
* @example
* import Gravatar from '@gravityforms/components/react/admin/modules/Gravatar';
*
* return (
* <Gravatar
* altText="Gravatar"
* defaultImage="mp"
* emailHash="8486aca7237c742c03f9b3d5ee3789fabad38a63868b89a9646175fafe297297"
* forceDefault={ true }
* height={ 100 }
* size={ 100 }
* width={ 100 }
* />
* );
*
*/
const Gravatar = forwardRef( ( {
altText = '',
circular = false,
customAttributes = {},
customClasses = [],
defaultImage = '',
emailHash = '',
forceDefault = false,
height = 0,
imageAttributes = {},
rating = '',
size = 0,
width = 0,
}, ref ) => {
const gravatarUrlProps = [];
if ( size ) {
gravatarUrlProps.push( `s=${ size }` );
}
if ( defaultImage ) {
gravatarUrlProps.push( `d=${ defaultImage }` );
}
if ( forceDefault ) {
gravatarUrlProps.push( 'f=y' );
}
if ( rating ) {
gravatarUrlProps.push( `r=${ rating }` );
}
const gravatarUrlQueryString = gravatarUrlProps.length ? `?${ gravatarUrlProps.join( '&' ) }` : '';
const gravatarUrl = `https://gravatar.com/avatar/${ emailHash }${ gravatarUrlQueryString }`;
const props = {
...customAttributes,
asBg: true,
altText,
aspectRatio: height && width ? width / height : 1,
customClasses: classnames(
{
'gform-gravatar': true,
'gform-gravatar--circular': circular,
},
...customClasses,
),
ref,
url: gravatarUrl,
imageAttributes: {
...imageAttributes,
customClasses: classnames(
[ 'gform-gravatar__image' ],
imageAttributes.customClasses || [],
),
},
width,
};
return (
<Image { ...props } />
);
} );
Gravatar.propTypes = {
altText: PropTypes.string,
circular: PropTypes.bool,
customAttributes: PropTypes.object,
customClasses: PropTypes.array,
defaultImage: PropTypes.string,
emailHash: PropTypes.string.isRequired,
forceDefault: PropTypes.bool,
height: PropTypes.number,
imageAttributes: PropTypes.object,
rating: PropTypes.string,
size: PropTypes.number,
width: PropTypes.number,
};
export default Gravatar;