Files
cinny/src/app/pages/client/sidebar/InboxTab.tsx

64 lines
2.0 KiB
TypeScript

import { Icon, Icons } from '../../../components/icons';
import React from 'react';
import { useNavigateWithTransition } from '../../../hooks/useViewTransitions';
import { useAtomValue } from 'jotai';
import {
SidebarAvatar,
SidebarItem,
SidebarItemBadge,
SidebarItemTooltip,
} from '../../../components/sidebar';
import { allInvitesAtom } from '../../../state/room-list/inviteList';
import {
getInboxInvitesPath,
getInboxNotificationsPath,
getInboxPath,
joinPathComponent,
} from '../../pathUtils';
import { useInboxSelected } from '../../../hooks/router/useInbox';
import { UnreadBadge } from '../../../components/unread-badge';
import { ScreenSize, useScreenSizeContext } from '../../../hooks/useScreenSize';
import { useNavToActivePathAtom } from '../../../state/hooks/navToActivePath';
export function InboxTab() {
const screenSize = useScreenSizeContext();
const navigate = useNavigateWithTransition();
const navToActivePath = useAtomValue(useNavToActivePathAtom());
const inboxSelected = useInboxSelected();
const allInvites = useAtomValue(allInvitesAtom);
const inviteCount = allInvites.length;
const handleInboxClick = () => {
if (screenSize === ScreenSize.Mobile) {
navigate(getInboxPath());
return;
}
const activePath = navToActivePath.get('inbox');
if (activePath) {
navigate(joinPathComponent(activePath));
return;
}
const path = inviteCount > 0 ? getInboxInvitesPath() : getInboxNotificationsPath();
navigate(path);
};
return (
<SidebarItem active={inboxSelected}>
<SidebarItemTooltip tooltip="Inbox">
{(triggerRef) => (
<SidebarAvatar as="button" ref={triggerRef} outlined onClick={handleInboxClick}>
<Icon src={Icons.Inbox} filled={inboxSelected} />
</SidebarAvatar>
)}
</SidebarItemTooltip>
{inviteCount > 0 && (
<SidebarItemBadge hasCount>
<UnreadBadge highlight count={inviteCount} />
</SidebarItemBadge>
)}
</SidebarItem>
);
}