-
Notifications
You must be signed in to change notification settings - Fork 8.2k
/
user_tooltip.tsx
58 lines (53 loc) · 1.88 KB
/
user_tooltip.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the "Elastic License
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
* Public License v 1"; you may not use this file except in compliance with, at
* your election, the "Elastic License 2.0", the "GNU Affero General Public
* License v3.0 only", or the "Server Side Public License, v 1".
*/
import type { EuiToolTipProps } from '@elastic/eui';
import { EuiFlexGroup, EuiFlexItem, EuiText, EuiToolTip } from '@elastic/eui';
import type { FunctionComponent } from 'react';
import React from 'react';
import type { UserProfileAvatarData } from './types';
import { UserAvatar } from './user_avatar';
import type { UserProfileUserInfo } from './user_profile';
import { getUserDisplayName } from './user_profile';
/**
* Props of {@link UserToolTip} component
*/
export interface UserToolTipProps extends Omit<EuiToolTipProps, 'content' | 'title'> {
/**
* User to be rendered
*/
user: UserProfileUserInfo;
/**
* Avatar data of user to be rendered
*/
avatar?: UserProfileAvatarData;
}
/**
* Renders a tooltip with user information
*/
export const UserToolTip: FunctionComponent<UserToolTipProps> = ({ user, avatar, ...rest }) => {
const displayName = getUserDisplayName(user);
return (
<EuiToolTip
content={
<EuiFlexGroup alignItems="center" gutterSize="s">
<EuiFlexItem grow={false}>
<UserAvatar user={user} avatar={avatar} size="l" />
</EuiFlexItem>
<EuiFlexItem grow style={{ minWidth: 0 }}>
<div>{displayName}</div>
{user.email && user.email !== displayName ? (
<EuiText size={'xs'}>{user.email}</EuiText>
) : undefined}
</EuiFlexItem>
</EuiFlexGroup>
}
{...rest}
/>
);
};