@@ -21,6 +21,7 @@ import Export from '@/pages/export/Export'
2121import Import from '@/pages/import/Import'
2222import { useProfileDialog } from '@/services/account/useAccount'
2323import { useLoginDialog , useLogout , useUser } from '@/services/auth/useAuth'
24+ import { usePendingRequests } from '@/services/friends/useFriends'
2425import { useActionableTradeCount } from '@/services/trade/useTrade.ts'
2526import { Badge } from './ui/badge'
2627
@@ -29,6 +30,8 @@ export function Header() {
2930 const { t, i18n } = useTranslation ( 'header' )
3031 const { data : user } = useUser ( )
3132 const { data : actionableTradeCount } = useActionableTradeCount ( )
33+ const { data : pendingRequests = [ ] } = usePendingRequests ( )
34+ const pendingFriendCount = pendingRequests . length
3235 const logoutMutation = useLogout ( )
3336
3437 const { isLoginDialogOpen, setIsLoginDialogOpen } = useLoginDialog ( )
@@ -62,36 +65,36 @@ export function Header() {
6265 < NavigationMenu className = "max-w-full justify-start" >
6366 < NavigationMenuList >
6467 { /* dynamic item for mobile that switches between overview and collection depending on the current page */ }
65- < NavigationMenuLink asChild className = "block sm :hidden" >
68+ < NavigationMenuLink asChild className = "block md :hidden" >
6669 < Link to = { isOverviewPage ? '/collection' : '/' } >
6770 < Button className = "px-2 sm:px-4" variant = "ghost" >
6871 { isOverviewPage ? t ( 'collection' ) : t ( 'overview' ) }
6972 </ Button >
7073 </ Link >
7174 </ NavigationMenuLink >
7275
73- < NavigationMenuLink asChild className = "hidden sm :block" >
76+ < NavigationMenuLink asChild className = "hidden md :block" >
7477 < Link to = "/" >
7578 < Button className = "px-2 sm:px-4" variant = "ghost" >
7679 { t ( 'overview' ) }
7780 </ Button >
7881 </ Link >
7982 </ NavigationMenuLink >
80- < NavigationMenuLink asChild className = "hidden sm :block" >
83+ < NavigationMenuLink asChild className = "hidden md :block" >
8184 < Link to = "/collection" >
8285 < Button className = "px-2 sm:px-4" variant = "ghost" >
8386 { t ( 'collection' ) }
8487 </ Button >
8588 </ Link >
8689 </ NavigationMenuLink >
87- < NavigationMenuLink asChild className = "hidden sm :block" >
90+ < NavigationMenuLink asChild className = "hidden md :block" >
8891 < Link to = "/decks" >
8992 < Button className = "px-2 sm:px-4" variant = "ghost" >
9093 { t ( 'Decks' ) }
9194 </ Button >
9295 </ Link >
9396 </ NavigationMenuLink >
94- < NavigationMenuLink asChild className = { `${ actionableTradeCount ? 'block' : 'hidden' } sm :block` } >
97+ < NavigationMenuLink asChild className = { `${ actionableTradeCount ? 'block' : 'hidden' } md :block` } >
9598 < Link to = "/trade" >
9699 < Button className = "px-2 sm:px-4" variant = "ghost" >
97100 { t ( 'trade' ) }
@@ -104,22 +107,35 @@ export function Header() {
104107 </ Button >
105108 </ Link >
106109 </ NavigationMenuLink >
107- < NavigationMenuLink asChild className = { `${ actionableTradeCount ? 'hidden sm:block' : '' } ` } >
110+ < NavigationMenuLink asChild className = { `${ pendingFriendCount && ! actionableTradeCount ? 'block' : 'hidden' } md:block` } >
111+ < Link to = "/friends" >
112+ < Button className = "px-2 sm:px-4" variant = "ghost" >
113+ { t ( 'friends' ) }
114+ < Badge
115+ className = { `h-5 min-w-5 rounded-full font-mono tabular-nums -mt-2 ${ pendingFriendCount ? 'flex' : 'hidden' } justify-center` }
116+ variant = "destructive"
117+ >
118+ { pendingFriendCount }
119+ </ Badge >
120+ </ Button >
121+ </ Link >
122+ </ NavigationMenuLink >
123+ < NavigationMenuLink asChild className = { `${ actionableTradeCount || pendingFriendCount ? 'hidden sm:block' : '' } ` } >
108124 < Link to = "/scan" >
109125 < Button className = "px-2 sm:px-4" variant = "ghost" >
110126 { t ( 'scan' ) }
111127 </ Button >
112128 </ Link >
113129 </ NavigationMenuLink >
114130 < NavigationMenuLink asChild className = "hidden lg:block" >
115- < Link to = "https://blog.tcgpocketcollectiontracker.com" className = "hidden md :block" >
131+ < Link to = "https://blog.tcgpocketcollectiontracker.com" className = "hidden lg :block" >
116132 < Button className = "px-2 sm:px-4" variant = "ghost" >
117133 { t ( 'blog' ) }
118134 </ Button >
119135 </ Link >
120136 </ NavigationMenuLink >
121137 < NavigationMenuLink asChild className = "hidden lg:block" >
122- < Link to = "https://community.tcgpocketcollectiontracker.com" className = "hidden md :block" >
138+ < Link to = "https://community.tcgpocketcollectiontracker.com" className = "hidden lg :block" >
123139 < Button className = "px-2 sm:px-4" variant = "ghost" >
124140 { t ( 'community' ) }
125141 </ Button >
@@ -158,6 +174,9 @@ export function Header() {
158174 < DropdownMenuLabel > { t ( 'myAccount' ) } </ DropdownMenuLabel >
159175 < DropdownMenuSeparator />
160176 < DropdownMenuItem onClick = { ( ) => setIsProfileDialogOpen ( true ) } > { t ( 'editProfile' ) } </ DropdownMenuItem >
177+ < DropdownMenuItem asChild >
178+ < Link to = "/friends" > { t ( 'friends' ) } </ Link >
179+ </ DropdownMenuItem >
161180 < DropdownMenuSeparator />
162181 < DropdownMenuItem onClick = { ( ) => setIsExportDialogOpen ( true ) } > { t ( 'export' ) } </ DropdownMenuItem >
163182 < DropdownMenuItem onClick = { ( ) => setIsImportDialogOpen ( true ) } > { t ( 'import' ) } </ DropdownMenuItem >
0 commit comments