From 0988a4387d8da36d08c299fc13fedc878d7cac3f Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Sat, 11 Sep 2021 15:49:16 +0800 Subject: [PATCH] =?UTF-8?q?refactor(web):=20=E7=BE=A4=E7=BB=84=E6=9C=AA?= =?UTF-8?q?=E8=AF=BB=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/routes/Main/Navbar/GroupNav.tsx | 31 ++++++++++++++----------- web/src/routes/Main/Navbar/NavItem.tsx | 13 +++++++++-- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/web/src/routes/Main/Navbar/GroupNav.tsx b/web/src/routes/Main/Navbar/GroupNav.tsx index c0e50b4d..71ece9fa 100644 --- a/web/src/routes/Main/Navbar/GroupNav.tsx +++ b/web/src/routes/Main/Navbar/GroupNav.tsx @@ -3,9 +3,25 @@ import { openModal } from '@/components/Modal'; import { ModalCreateGroup } from '@/components/modals/CreateGroup'; import { Icon } from '@iconify/react'; import React, { useCallback, useMemo } from 'react'; -import { GroupInfo, t, useAppSelector } from 'tailchat-shared'; +import { GroupInfo, t, useAppSelector, useGroupUnread } from 'tailchat-shared'; import { NavbarNavItem } from './NavItem'; +const GroupNavItem: React.FC<{ group: GroupInfo }> = React.memo(({ group }) => { + const hasUnread = useGroupUnread(group._id); + + return ( + + + + ); +}); +GroupNavItem.displayName = 'GroupNavItem'; + function useGroups(): GroupInfo[] { const groups = useAppSelector((state) => state.group.groups); return useMemo( @@ -26,18 +42,7 @@ export const GroupNav: React.FC = React.memo(() => { {Array.isArray(groups) && groups.map((group) => (
- - - +
))} diff --git a/web/src/routes/Main/Navbar/NavItem.tsx b/web/src/routes/Main/Navbar/NavItem.tsx index 890dc68f..3e32379e 100644 --- a/web/src/routes/Main/Navbar/NavItem.tsx +++ b/web/src/routes/Main/Navbar/NavItem.tsx @@ -1,4 +1,4 @@ -import { Tooltip } from 'antd'; +import { Tooltip, Badge } from 'antd'; import type { ClassValue } from 'clsx'; import clsx from 'clsx'; import React from 'react'; @@ -10,9 +10,10 @@ export const NavbarNavItem: React.FC<{ className?: ClassValue; to?: string; showPill?: boolean; + badge?: boolean; onClick?: () => void; }> = React.memo((props) => { - const { name, className, to, showPill = false } = props; + const { name, className, to, showPill = false, badge = false } = props; const location = useLocation(); const isActive = typeof to === 'string' && location.pathname.startsWith(to); @@ -60,6 +61,14 @@ export const NavbarNavItem: React.FC<{ )} {inner} + +
+ {badge === true ? ( + + ) : ( + + )} +
); });