mirror of https://github.com/msgbyte/tailchat
refactor(web): sidebar
parent
127b13d0c9
commit
402ddb9a68
@ -0,0 +1,87 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import clsx, { ClassValue } from 'clsx';
|
||||||
|
import { Icon } from '@iconify/react';
|
||||||
|
import { Avatar } from '../../components/Avatar';
|
||||||
|
|
||||||
|
const SidebarItem: React.FC<{
|
||||||
|
className?: ClassValue;
|
||||||
|
icon?: React.ReactNode;
|
||||||
|
action?: React.ReactNode;
|
||||||
|
}> = React.memo((props) => {
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className={clsx(
|
||||||
|
'w-full hover:bg-white hover:bg-opacity-20 cursor-pointer text-white rounded px-2 h-11 flex items-center text-base group',
|
||||||
|
props.className
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
<div className="flex h-8 items-center justify-center text-2xl w-8 mr-3">
|
||||||
|
{props.icon}
|
||||||
|
</div>
|
||||||
|
<div className="flex-1">{props.children}</div>
|
||||||
|
<div className="text-base p-1 cursor-pointer hidden opacity-70 group-hover:block hover:opacity-100">
|
||||||
|
{props.action}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
});
|
||||||
|
SidebarItem.displayName = 'SidebarItem';
|
||||||
|
|
||||||
|
const SidebarSection: React.FC<{
|
||||||
|
action: React.ReactNode;
|
||||||
|
}> = React.memo((props) => {
|
||||||
|
return (
|
||||||
|
<div className="h-10 text-white flex pt-4 px-2">
|
||||||
|
<span className="flex-1 overflow-hidden overflow-ellipsis text-xs text-gray-300">
|
||||||
|
{props.children}
|
||||||
|
</span>
|
||||||
|
<div className="text-base opacity-70 hover:opacity-100 cursor-pointer">
|
||||||
|
{props.action}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
});
|
||||||
|
SidebarSection.displayName = 'SidebarSection';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 侧边栏组件
|
||||||
|
*/
|
||||||
|
export const Sidebar: React.FC = React.memo(() => {
|
||||||
|
return (
|
||||||
|
<div className="w-60 bg-gray-800 p-2">
|
||||||
|
{/* Sidebar */}
|
||||||
|
<SidebarItem icon={<Icon icon="mdi-account-multiple" />}>
|
||||||
|
好友
|
||||||
|
</SidebarItem>
|
||||||
|
<SidebarItem icon={<Icon icon="mdi-puzzle" />}>插件中心</SidebarItem>
|
||||||
|
|
||||||
|
<SidebarSection action={<Icon icon="mdi-plus" />}>私信</SidebarSection>
|
||||||
|
|
||||||
|
<SidebarItem
|
||||||
|
icon={<Avatar name="用户" />}
|
||||||
|
action={<Icon icon="mdi-close" />}
|
||||||
|
>
|
||||||
|
用户1
|
||||||
|
</SidebarItem>
|
||||||
|
<SidebarItem
|
||||||
|
icon={<Avatar name="用户" />}
|
||||||
|
action={<Icon icon="mdi-close" />}
|
||||||
|
>
|
||||||
|
用户1
|
||||||
|
</SidebarItem>
|
||||||
|
<SidebarItem
|
||||||
|
icon={<Avatar name="用户" />}
|
||||||
|
action={<Icon icon="mdi-close" />}
|
||||||
|
>
|
||||||
|
用户1
|
||||||
|
</SidebarItem>
|
||||||
|
<SidebarItem
|
||||||
|
icon={<Avatar name="用户" />}
|
||||||
|
action={<Icon icon="mdi-close" />}
|
||||||
|
>
|
||||||
|
用户1
|
||||||
|
</SidebarItem>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
});
|
||||||
|
Sidebar.displayName = 'Sidebar';
|
Loading…
Reference in New Issue