diff --git a/src/lib/components/Navigation.svelte b/src/lib/components/Navigation.svelte index 63caebdf..06fb6965 100644 --- a/src/lib/components/Navigation.svelte +++ b/src/lib/components/Navigation.svelte @@ -5,13 +5,17 @@ import { m } from '$lib/paraglide/messages' import { page } from '$app/stores' import { goto } from '$app/navigation' + import { createQuery } from '@tanstack/svelte-query' + import { crewQueries } from '$lib/api/queries/crew.queries' import Button from './ui/Button.svelte' import Icon from './Icon.svelte' import DropdownItem from './ui/dropdown/DropdownItem.svelte' + import NotificationBadge from './ui/NotificationBadge.svelte' import { DropdownMenu } from 'bits-ui' import type { UserCookie } from '$lib/types/UserCookie' import { getAvatarSrc, getAvatarSrcSet } from '$lib/utils/avatar' import UserSettingsModal from './UserSettingsModal.svelte' + import InvitationsModal from './crew/InvitationsModal.svelte' import { authStore } from '$lib/stores/auth.store' // Props from layout data @@ -128,6 +132,18 @@ // Settings modal state let settingsModalOpen = $state(false) + // Invitations modal state + let invitationsModalOpen = $state(false) + + // Query for pending invitations (only when authenticated) + const pendingInvitationsQuery = createQuery(() => ({ + ...crewQueries.pendingInvitations(), + enabled: isAuth + })) + + // Derived count of pending invitations + const pendingInvitationCount = $derived(pendingInvitationsQuery.data?.length ?? 0) + // Handle logout async function handleLogout() { try { @@ -223,16 +239,23 @@ aria-label="Your account" class="profile-link" > - {#if avatarSrc} - {username} - {/if} + + {#if avatarSrc} + {username} + {/if} + {#if pendingInvitationCount > 0} + + + + {/if} + {username} @@ -270,6 +293,14 @@ Crew + + + {/if}