UNPKG

@mskcc/carbon-react

Version:

Carbon react components for the MSKCC DSM

99 lines (91 loc) 3.73 kB
/** * MSKCC 2021, 2024 */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _rollupPluginBabelHelpers = require('../../../_virtual/_rollupPluginBabelHelpers.js'); var cx = require('classnames'); var PropTypes = require('prop-types'); var React = require('react'); var MskIcon = require('../../Icon/MskIcon.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx); var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes); var React__default = /*#__PURE__*/_interopDefaultLegacy(React); const colors = ['blue', 'cyan', 'green', 'magenta', 'orange', 'purple', 'red', 'teal', 'yellow']; /** * @component Avatar component is used to display a user's avatar */ const HeaderAvatar = _ref => { var _div; let { children, className, label, color = 'blue', icon, url, size = 'md', ...rest } = _ref; const [isValidImage, setValidImage] = React.useState(true); const imageOnErrorHandler = React.useCallback(() => { setValidImage(false); }, []); const avatarContent = React.useMemo(() => { if (!!url && isValidImage) { return ( /*#__PURE__*/ // set the background image to the url React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({ className: cx__default["default"]('msk-header--avatar-content', 'msk-header--avatar-img-container') }, rest, { // eslint-disable-next-line react/forbid-dom-props style: { backgroundImage: `url(${url})` } }), /*#__PURE__*/React__default["default"].createElement("img", { src: url, alt: label ?? 'avatar image', onError: imageOnErrorHandler, className: cx__default["default"]('msk-header--avatar-img', 'hidden') })) ); } if (label) { return /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({ className: cx__default["default"]('msk-header--avatar-content') }, rest), _div || (_div = /*#__PURE__*/React__default["default"].createElement("div", { className: "msk-header--avatar-title" }, label))); } return /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({ className: cx__default["default"](`msk-header--avatar-content`) }, rest), /*#__PURE__*/React__default["default"].createElement(MskIcon.Icon, { icon: icon || 'account_circle', className: "msk-header--avatar-icon" })); }, [rest, isValidImage, url, label, icon, imageOnErrorHandler]); color = colors.includes(color) ? color : 'blue'; return /*#__PURE__*/React__default["default"].createElement("div", { className: cx__default["default"](className, `msk-header--avatar`, { [`msk-header--avatar--${size}`]: size, [`msk-header--avatar--${color}`]: color, 'msk-header--avatar--label': children }) }, avatarContent, children && /*#__PURE__*/React__default["default"].createElement("span", { className: "msk-header--avatar-content-inner" }, children)); }; HeaderAvatar.displayName = 'HeaderAvatar'; HeaderAvatar.propTypes = { children: PropTypes__default["default"].node, className: PropTypes__default["default"].string, color: PropTypes__default["default"].oneOf(colors), icon: PropTypes__default["default"].string, label: PropTypes__default["default"].string, size: PropTypes__default["default"].oneOf(['sm', 'lg']), url: PropTypes__default["default"].string }; exports.HeaderAvatar = HeaderAvatar; exports.colors = colors;