|
|
|
@ -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 (
|
|
|
|
|
<NavbarNavItem
|
|
|
|
|
name={group.name}
|
|
|
|
|
to={`/main/group/${group._id}`}
|
|
|
|
|
showPill={true}
|
|
|
|
|
badge={hasUnread}
|
|
|
|
|
>
|
|
|
|
|
<Avatar shape="square" size={48} name={group.name} src={group.avatar} />
|
|
|
|
|
</NavbarNavItem>
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
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) => (
|
|
|
|
|
<div key={group._id}>
|
|
|
|
|
<NavbarNavItem
|
|
|
|
|
name={group.name}
|
|
|
|
|
to={`/main/group/${group._id}`}
|
|
|
|
|
showPill={true}
|
|
|
|
|
>
|
|
|
|
|
<Avatar
|
|
|
|
|
shape="square"
|
|
|
|
|
size={48}
|
|
|
|
|
name={group.name}
|
|
|
|
|
src={group.avatar}
|
|
|
|
|
/>
|
|
|
|
|
</NavbarNavItem>
|
|
|
|
|
<GroupNavItem group={group} />
|
|
|
|
|
</div>
|
|
|
|
|
))}
|
|
|
|
|
|
|
|
|
|