refactor: 导航栏悬浮内容

pull/13/head
moonrailgun 4 years ago
parent ea221d2093
commit c731cd0690

@ -3,7 +3,7 @@ import { openModal } from '@/components/Modal';
import { ModalCreateGroup } from '@/components/modals/CreateGroup';
import { Icon } from '@iconify/react';
import React, { useCallback, useMemo } from 'react';
import { GroupInfo, useAppSelector } from 'tailchat-shared';
import { GroupInfo, t, useAppSelector } from 'tailchat-shared';
import { NavbarNavItem } from './NavItem';
function useGroups(): GroupInfo[] {
@ -25,7 +25,11 @@ export const GroupNav: React.FC = React.memo(() => {
<div className="space-y-2">
{Array.isArray(groups) &&
groups.map((group) => (
<NavbarNavItem key={group._id} to={`/main/group/${group._id}`}>
<NavbarNavItem
key={group._id}
name={group.name}
to={`/main/group/${group._id}`}
>
<Avatar
shape="square"
size={48}
@ -36,7 +40,11 @@ export const GroupNav: React.FC = React.memo(() => {
))}
{/* 创建群组 */}
<NavbarNavItem className="bg-green-500" onClick={handleCreateGroup}>
<NavbarNavItem
className="bg-green-500"
name={t('创建群组')}
onClick={handleCreateGroup}
>
<Icon className="text-3xl text-white" icon="mdi-plus" />
</NavbarNavItem>
</div>

@ -1,3 +1,4 @@
import { Tooltip } from 'antd';
import type { ClassValue } from 'clsx';
import clsx from 'clsx';
import React from 'react';
@ -5,28 +6,34 @@ import { useLocation } from 'react-router';
import { Link } from 'react-router-dom';
export const NavbarNavItem: React.FC<{
name: string;
className?: ClassValue;
to?: string;
onClick?: () => void;
}> = React.memo((props) => {
const { className, to } = props;
const { name, className, to } = props;
const location = useLocation();
const isActive = typeof to === 'string' && location.pathname.startsWith(to);
const inner = (
<div
className={clsx(
'w-12 h-12 hover:rounded-lg transition-all cursor-pointer flex items-center justify-center overflow-hidden',
className,
{
'rounded-1/2': !isActive,
'rounded-lg': isActive,
}
)}
onClick={props.onClick}
<Tooltip
title={<div className="font-bold px-1.5 py-0.5">{name}</div>}
placement="right"
>
{props.children}
</div>
<div
className={clsx(
'w-12 h-12 hover:rounded-lg transition-all cursor-pointer flex items-center justify-center overflow-hidden',
className,
{
'rounded-1/2': !isActive,
'rounded-lg': isActive,
}
)}
onClick={props.onClick}
>
{props.children}
</div>
</Tooltip>
);
if (typeof to === 'string') {

@ -1,5 +1,5 @@
import React from 'react';
import { useAppSelector } from 'tailchat-shared';
import { t, useAppSelector } from 'tailchat-shared';
import { Icon } from '@iconify/react';
import { Avatar } from '@/components/Avatar';
import { NavbarNavItem } from './NavItem';
@ -18,7 +18,7 @@ export const Navbar: React.FC = React.memo(() => {
{/* Navbar */}
<div className="flex-1">
<NavbarNavItem to={'/main/personal'}>
<NavbarNavItem name={t('我')} to={'/main/personal'}>
<Avatar
shape="square"
size={48}

@ -14,3 +14,9 @@
.ant-input:hover, .ant-input:focus, .ant-input-focused {
border-right-width: inherit !important;
}
.ant-tooltip {
.ant-tooltip-inner {
background-color: black;
}
}

Loading…
Cancel
Save