forked from RocketChat/Rocket.Chat
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMedium.tsx
More file actions
43 lines (38 loc) · 1.32 KB
/
Medium.tsx
File metadata and controls
43 lines (38 loc) · 1.32 KB
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
import { IconButton, SidebarV2Item, SidebarV2ItemAvatarWrapper, SidebarV2ItemMenu, SidebarV2ItemTitle } from '@rocket.chat/fuselage';
import type { HTMLAttributes, ReactNode } from 'react';
import { memo, useState } from 'react';
type MediumProps = {
title: ReactNode;
titleIcon?: ReactNode;
avatar: ReactNode;
icon?: ReactNode;
actions?: ReactNode;
href?: string;
unread?: boolean;
menu?: () => ReactNode;
badges?: ReactNode;
selected?: boolean;
menuOptions?: any;
} & Omit<HTMLAttributes<HTMLElement>, 'is'>;
const Medium = ({ icon, title, avatar, actions, badges, unread, menu, ...props }: MediumProps) => {
const [menuVisibility, setMenuVisibility] = useState(!!window.DISABLE_ANIMATION);
const handleFocus = () => setMenuVisibility(true);
const handlePointerEnter = () => setMenuVisibility(true);
return (
<SidebarV2Item {...props} onFocus={handleFocus} onPointerEnter={handlePointerEnter}>
<SidebarV2ItemAvatarWrapper>{avatar}</SidebarV2ItemAvatarWrapper>
{icon}
<SidebarV2ItemTitle unread={unread} title={title}>
{title}
</SidebarV2ItemTitle>
{badges}
{actions}
{menu && (
<SidebarV2ItemMenu>
{menuVisibility ? menu() : <IconButton tabIndex={-1} aria-hidden mini rcx-sidebar-v2-item__menu icon='kebab' />}
</SidebarV2ItemMenu>
)}
</SidebarV2Item>
);
};
export default memo(Medium);