86 lines
2.1 KiB
Vue
86 lines
2.1 KiB
Vue
<template>
|
|
<UDashboardGroup>
|
|
<UDashboardSearch />
|
|
|
|
<UDashboardSidebar
|
|
v-model:open="open"
|
|
collapsible
|
|
resizable
|
|
class="bg-(--ui-bg-elevated)/25"
|
|
:ui="{ footer: 'lg:border-t lg:border-(--ui-border)' }"
|
|
>
|
|
<template #header>
|
|
<NuxtLink to="/">
|
|
<img src="@@/public/favicon.ico" alt="Logo" />
|
|
</NuxtLink>
|
|
</template>
|
|
|
|
<template #default="{ collapsed }">
|
|
<UDashboardSearchButton :collapsed="collapsed" class="bg-transparent ring-(--ui-border)" />
|
|
|
|
<UNavigationMenu :collapsed="collapsed" :items="links[0]" orientation="vertical" />
|
|
|
|
<UNavigationMenu :collapsed="collapsed" :items="links[1]" orientation="vertical" class="mt-auto" />
|
|
</template>
|
|
|
|
<template #footer="{ collapsed }">
|
|
<UserMenu :collapsed="collapsed" />
|
|
<UButton @click="copyAccessTokenToClipboard">📋</UButton>
|
|
</template>
|
|
</UDashboardSidebar>
|
|
|
|
<slot />
|
|
|
|
<NotificationsSlideover v-model="isNotificationsSlideoverOpen" />
|
|
</UDashboardGroup>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
const { t: $t } = useI18n()
|
|
|
|
const links = [
|
|
[
|
|
{
|
|
label: $t('common.general'),
|
|
icon: 'i-lucide-user',
|
|
to: '/settings',
|
|
exact: true
|
|
}
|
|
],
|
|
[
|
|
{
|
|
label: $t('common.general'),
|
|
icon: 'i-lucide-user',
|
|
to: '/settings',
|
|
exact: true
|
|
}
|
|
]
|
|
]
|
|
const open = ref(false)
|
|
|
|
const isNotificationsSlideoverOpen = ref(false)
|
|
const { unreadCount, fetchUnreadCount, startPeriodicRefresh } = useNotification()
|
|
|
|
onMounted(async () => {
|
|
await fetchUnreadCount()
|
|
startPeriodicRefresh()
|
|
})
|
|
|
|
provide('notificationState', {
|
|
isNotificationsSlideoverOpen,
|
|
unreadCount
|
|
})
|
|
|
|
async function copyAccessTokenToClipboard() {
|
|
const { session } = useUserSession()
|
|
console.log('Access Token :', session.value?.jwt?.accessToken)
|
|
const accessToken = session.value?.jwt?.accessToken
|
|
if (accessToken) {
|
|
navigator.clipboard.writeText(accessToken)
|
|
console.log('Access token copied to clipboard')
|
|
} else {
|
|
console.warn('No access token found in session')
|
|
}
|
|
}
|
|
</script>
|