UNPKG

@ui5/webcomponents-react

Version:

React Wrapper for UI5 Web Components and additional components

50 lines 1.96 kB
import AvatarSize from '@ui5/webcomponents/dist/types/AvatarSize.js'; import { useStylesheet } from '@ui5/webcomponents-react-base/internal/hooks'; import { clsx } from 'clsx'; import { cloneElement, useEffect, useMemo, useRef, useState } from 'react'; import { classNames, styleData } from './CollapsedAvatar.module.css.js'; import { jsx as _jsx } from "react/jsx-runtime"; export const CollapsedAvatar = props => { const { image, imageShapeCircle, style, hideCollapsedAvatar } = props; useStylesheet(styleData, CollapsedAvatar.displayName); const [isMounted, setIsMounted] = useState(false); const domRef = useRef(null); const avatarContent = useMemo(() => { if (!image) return null; if (typeof image === 'string') { return /*#__PURE__*/_jsx("span", { className: clsx(classNames.imageContainer, imageShapeCircle ? classNames.circle : undefined), children: /*#__PURE__*/_jsx("img", { className: classNames.image, src: image, alt: "Object Page Image" }) }); } else { return /*#__PURE__*/cloneElement(image, { size: AvatarSize.S, className: image.props?.className ? `${classNames.imageContainer} ${image.props?.className}` : classNames.imageContainer }); } }, [image, imageShapeCircle]); useEffect(() => { // Trigger fade-in animation after mount // eslint-disable-next-line react-hooks/set-state-in-effect setIsMounted(true); }, []); const containerClasses = clsx(classNames.base, isMounted ? classNames.visible : classNames.hidden, hideCollapsedAvatar ? classNames.notDisplayed : undefined); return /*#__PURE__*/_jsx("div", { ref: domRef, className: containerClasses, style: style, "data-component-name": "ObjectPageCollapsedAvatar", "aria-hidden": hideCollapsedAvatar ? 'true' : 'false', children: avatarContent }); }; CollapsedAvatar.displayName = 'CollapsedAvatar';