mdc-react
Version:
Material Components for the web implemented in React
64 lines (54 loc) • 1.53 kB
JSX
import { forwardRef } from 'react';
import PropTypes from 'prop-types';
import classnames from 'classnames';
import { Clone } from '../component';
import Icon from '../icon';
import { cssClasses } from './constants';
const Avatar = forwardRef(({
image,
icon,
text,
size,
element = 'span',
component: Element = element,
className,
children = text,
...props
}, ref) => {
const classNames = classnames(cssClasses.ROOT, {
[`${cssClasses.ROOT}--${size}`]: size
}, className);
return (
<Element ref={ref} className={classNames} {...props}>
{image &&
<img
className={cssClasses.IMAGE}
src={image?.src || image}
alt={image?.alt || ''}
/>
}
{icon &&
<Clone
component={icon}
fallback={Icon}
className={cssClasses.ICON}
/>
}
{children &&
<Clone
component={children}
fallback="span"
className={cssClasses.TEXT}
/>
}
</Element>
);
});
Avatar.displayName = 'MDCAvatar';
Avatar.propTypes = {
src: PropTypes.string,
icon: PropTypes.node,
text: PropTypes.node,
size: PropTypes.oneOf(['small', 'medium', 'large'])
};
export default Avatar;