refactor: show pill in NavItem

pull/13/head
moonrailgun 5 years ago
parent b31ffdf6e3
commit f282003073

@ -26,7 +26,11 @@ export const GroupNav: React.FC = React.memo(() => {
{Array.isArray(groups) && {Array.isArray(groups) &&
groups.map((group) => ( groups.map((group) => (
<div key={group._id}> <div key={group._id}>
<NavbarNavItem name={group.name} to={`/main/group/${group._id}`}> <NavbarNavItem
name={group.name}
to={`/main/group/${group._id}`}
showPill={true}
>
<Avatar <Avatar
shape="square" shape="square"
size={48} size={48}

@ -9,20 +9,21 @@ export const NavbarNavItem: React.FC<{
name: string; name: string;
className?: ClassValue; className?: ClassValue;
to?: string; to?: string;
showPill?: boolean;
onClick?: () => void; onClick?: () => void;
}> = React.memo((props) => { }> = React.memo((props) => {
const { name, className, to } = props; const { name, className, to, showPill = false } = props;
const location = useLocation(); const location = useLocation();
const isActive = typeof to === 'string' && location.pathname.startsWith(to); const isActive = typeof to === 'string' && location.pathname.startsWith(to);
const inner = ( let inner = (
<Tooltip <Tooltip
title={<div className="font-bold px-1.5 py-0.5">{name}</div>} title={<div className="font-bold px-1.5 py-0.5">{name}</div>}
placement="right" placement="right"
> >
<div <div
className={clsx( className={clsx(
'w-12 h-12 hover:rounded-lg transition-all cursor-pointer flex items-center justify-center overflow-hidden', 'w-12 h-12 hover:rounded-lg transition-all duration-300 cursor-pointer flex items-center justify-center overflow-hidden',
className, className,
{ {
'rounded-1/2': !isActive, 'rounded-1/2': !isActive,
@ -37,9 +38,29 @@ export const NavbarNavItem: React.FC<{
); );
if (typeof to === 'string') { if (typeof to === 'string') {
return <Link to={to}>{inner}</Link>; inner = <Link to={to}>{inner}</Link>;
} }
return inner; return (
<div className="w-full px-3 relative group">
{showPill && (
<div
className="absolute w-2 left-0 top-0 bottom-0 flex items-center"
style={{ marginLeft: -4 }}
>
<span
className={clsx(
'bg-white w-2 h-2 rounded transition-all duration-300',
{
'h-2 group-hover:h-5': !isActive,
'h-10': isActive,
}
)}
/>
</div>
)}
{inner}
</div>
);
}); });
NavbarNavItem.displayName = 'NavbarNavItem'; NavbarNavItem.displayName = 'NavbarNavItem';

@ -5,6 +5,7 @@ import { NavbarNavItem } from './NavItem';
import { GroupNav } from './GroupNav'; import { GroupNav } from './GroupNav';
import { MobileMenuBtn } from './MobileMenuBtn'; import { MobileMenuBtn } from './MobileMenuBtn';
import { SettingBtn } from './SettingBtn'; import { SettingBtn } from './SettingBtn';
import { Divider } from 'antd';
/** /**
* *
@ -13,12 +14,12 @@ export const Navbar: React.FC = React.memo(() => {
const userInfo = useAppSelector((state) => state.user.info); const userInfo = useAppSelector((state) => state.user.info);
return ( return (
<div className="w-18 bg-gray-900 flex flex-col justify-start items-center pt-4 pb-4 p-1"> <div className="w-18 bg-gray-900 flex flex-col justify-start items-center pt-4 pb-4">
<MobileMenuBtn /> <MobileMenuBtn />
{/* Navbar */} {/* Navbar */}
<div className="flex-1"> <div className="flex-1 w-full">
<NavbarNavItem name={t('我')} to={'/main/personal'}> <NavbarNavItem name={t('我')} to={'/main/personal'} showPill={true}>
<Avatar <Avatar
shape="square" shape="square"
size={48} size={48}
@ -26,7 +27,10 @@ export const Navbar: React.FC = React.memo(() => {
src={userInfo?.avatar} src={userInfo?.avatar}
/> />
</NavbarNavItem> </NavbarNavItem>
<div className="h-px w-full bg-white mt-4 mb-4"></div>
<div className="px-3">
<Divider />
</div>
<GroupNav /> <GroupNav />
</div> </div>

@ -77,6 +77,7 @@ module.exports = {
display: ['group-hover'], display: ['group-hover'],
borderRadius: ['hover'], borderRadius: ['hover'],
borderWidth: ['last'], borderWidth: ['last'],
height: ['group-hover'],
}, },
}, },
plugins: [tailchat], plugins: [tailchat],

Loading…
Cancel
Save