import React from 'react'; import {CircleInfo} from '@gravity-ui/icons'; import {Button, ClipboardButton, Icon, Popover, Link as UIKitLink} from '@gravity-ui/uikit'; import {cn} from '../../utils/cn'; import {YDB_POPOVER_CLASS_NAME} from '../../utils/constants'; import {InternalLink} from '../InternalLink/InternalLink'; import './EntityName.scss'; const b = cn('ydb-entity-name'); export interface EntityNameProps { name?: string; renderName?: (name?: string) => React.ReactNode; path?: string; externalLink?: boolean; withLeftTrim?: boolean; hasClipboardButton?: boolean; infoPopoverContent?: React.ReactNode; clipboardButtonAlwaysVisible?: boolean; leadingContent?: React.ReactNode; className?: string; } function defaultRenderName(name?: string) { return name ?? ''; } export function EntityName({ name = '', renderName = defaultRenderName, path, externalLink = false, withLeftTrim = false, hasClipboardButton, infoPopoverContent, clipboardButtonAlwaysVisible = false, leadingContent, className, }: EntityNameProps) { const [infoIconHovered, setInfoIconHovered] = React.useState(false); const renderLink = () => { if (path) { if (externalLink) { return ( {renderName(name)} ); } return ( {renderName(name)} ); } return name && {renderName(name)}; }; return (
{leadingContent ?
{leadingContent}
: null} {(path || name) && (
{renderLink()} {(hasClipboardButton || infoPopoverContent) && (
e.stopPropagation()} > {infoPopoverContent && ( setInfoIconHovered(visible)} > )} {hasClipboardButton && ( )}
)}
)}
); }