owltide/components/Header.vue
Hornwitser ca51c07065 Move push notification setting to separate page
Set up a dedicated Account Setttings page to hold account specific
settings such as the push notifications.
2025-03-07 18:43:24 +01:00

65 lines
1.4 KiB
Vue

<template>
<header>
<nav>
<ul>
<NuxtLink to="/">Home</NuxtLink>
<NuxtLink to="/schedule">Schedule</NuxtLink>
</ul>
</nav>
<div class="account">
<template v-if="session?.account">
{{ session.account.name || "anonymous" }}
(s:{{ session.id }} a:{{ session.account.id }}{{ session.push ? " push" : null }})
{{ session.account.type }}
<NuxtLink to="/account/settings">Settings</NuxtLink>
<button type="button" @click="logOut">Log out</button>
</template>
<template v-else>
<NuxtLink to="/login">Log In</NuxtLink>
</template>
</div>
</header>
</template>
<script lang="ts" setup>
const { data: session, refresh: sessionRefresh } = useAccountSession();
async function logOut() {
try {
const res = await $fetch.raw("/api/auth/session", {
method: "DELETE",
});
await sessionRefresh();
} catch (err: any) {
alert(`Log out failed: ${err.statusCode} ${err.statusMessage}`);
}
}
</script>
<style scoped>
header {
line-height: 1.5; /* Prevent layout shift from log out button */
display: flex;
column-gap: 1em;
flex-wrap: wrap;
border-bottom: 1px solid var(--foreground);
margin-block-start: 1rem;
}
.account {
display: flex;
justify-content: end;
flex-grow: 1;
column-gap: 0.5em;
flex-wrap: wrap;
}
nav ul {
padding: 0;
display: flex;
column-gap: 0.5em;
}
button {
font-family: inherit;
font-size: inherit;
}
</style>