trypost/resources/js/components/NavUser.vue

57 lines
1.9 KiB
Vue
Raw Normal View History

2026-01-15 01:13:44 +00:00
<script setup lang="ts">
import { usePage } from '@inertiajs/vue3';
import { IconChevronRight, IconSelector } from '@tabler/icons-vue';
import { computed } from 'vue';
2026-01-15 01:13:44 +00:00
import NotificationBell from '@/components/NotificationBell.vue';
2026-01-15 01:13:44 +00:00
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuTrigger,
} from '@/components/ui/dropdown-menu';
import {
SidebarMenu,
SidebarMenuButton,
SidebarMenuItem,
useSidebar,
} from '@/components/ui/sidebar';
import UserInfo from '@/components/UserInfo.vue';
import UserMenuContent from './UserMenuContent.vue';
const page = usePage();
const user = computed(() => page.props.auth.user);
2026-03-31 00:18:07 +00:00
const currentWorkspace = computed(() => page.props.auth.currentWorkspace);
const { isMobile } = useSidebar();
2026-01-15 01:13:44 +00:00
</script>
<template>
<SidebarMenu>
<SidebarMenuItem>
2026-03-31 00:18:07 +00:00
<div class="flex items-center gap-1">
<NotificationBell v-if="currentWorkspace" />
2026-01-15 01:13:44 +00:00
<DropdownMenu>
<DropdownMenuTrigger as-child>
<SidebarMenuButton
size="lg"
class="data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground"
data-test="sidebar-menu-button"
>
<UserInfo :user="user" />
<component :is="isMobile ? IconSelector : IconChevronRight" class="ml-auto size-4" />
2026-01-15 01:13:44 +00:00
</SidebarMenuButton>
</DropdownMenuTrigger>
<DropdownMenuContent
class="w-(--reka-dropdown-menu-trigger-width) min-w-56"
:side="isMobile ? 'bottom' : 'right'"
2026-01-15 01:13:44 +00:00
align="end"
:side-offset="4"
>
<UserMenuContent :user="user" />
</DropdownMenuContent>
</DropdownMenu>
2026-03-31 00:18:07 +00:00
</div>
2026-01-15 01:13:44 +00:00
</SidebarMenuItem>
</SidebarMenu>
</template>