Files
KanbanGit/resources/js/components/UserMenuContent.vue
T
2026-04-18 14:04:09 +02:00

88 lines
2.6 KiB
Vue

<script setup lang="ts">
import { Link, router } from '@inertiajs/vue3';
import { LogOut, Monitor, Moon, Settings, Sun } from 'lucide-vue-next';
import {
DropdownMenuGroup,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuSeparator,
} from '@/components/ui/dropdown-menu';
import UserInfo from '@/components/UserInfo.vue';
import { useAppearance } from '@/composables/useAppearance';
import { logout } from '@/routes/index';
import { edit } from '@/routes/profile/index';
import type { User } from '@/types';
type Props = {
user: User;
};
const handleLogout = () => {
router.flushAll();
};
defineProps<Props>();
const { appearance, updateAppearance } = useAppearance();
</script>
<template>
<DropdownMenuLabel class="p-0 font-normal">
<div class="flex items-center gap-2 px-1 py-1.5 text-left text-sm">
<UserInfo :user="user" :show-email="true" />
</div>
</DropdownMenuLabel>
<DropdownMenuSeparator />
<DropdownMenuGroup>
<DropdownMenuItem :as-child="true">
<Link class="block w-full cursor-pointer" :href="edit()" prefetch>
<Settings class="mr-2 h-4 w-4" />
Settings
</Link>
</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuGroup>
<DropdownMenuLabel class="text-muted-foreground text-xs font-medium">
Appearance
</DropdownMenuLabel>
<DropdownMenuItem
class="cursor-pointer"
:class="{ 'bg-accent': appearance === 'light' }"
@click="updateAppearance('light')"
>
<Sun class="mr-2 h-4 w-4" />
Light
</DropdownMenuItem>
<DropdownMenuItem
class="cursor-pointer"
:class="{ 'bg-accent': appearance === 'dark' }"
@click="updateAppearance('dark')"
>
<Moon class="mr-2 h-4 w-4" />
Dark
</DropdownMenuItem>
<DropdownMenuItem
class="cursor-pointer"
:class="{ 'bg-accent': appearance === 'system' }"
@click="updateAppearance('system')"
>
<Monitor class="mr-2 h-4 w-4" />
System
</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuItem :as-child="true">
<Link
class="block w-full cursor-pointer"
:href="logout()"
@click="handleLogout"
as="button"
data-test="logout-button"
>
<LogOut class="mr-2 h-4 w-4" />
Log out
</Link>
</DropdownMenuItem>
</template>