owltide/pages/account/settings.vue
Hornwitser f2ab306338 Always await useAccountSession
If this is not done the session is not properly loaded during server
side rendering, making it possible for missmatch and bugs to happen.
2025-05-23 21:33:48 +02:00

65 lines
1.3 KiB
Vue

<template>
<main>
<h1>Account Settings</h1>
<p v-if="session?.account.type !== 'anonymous'">
Name: {{ session?.account.name }}
</p>
<p>Access: {{ session?.account.type }}</p>
<form @submit.prevent="changeSettings">
<label>
Timezone
<input type="text" v-model="timezone">
</label>
<button type="submit">
Save
</button>
</form>
<p>
<PushNotification />
</p>
<fieldset>
<legend>Danger Zone</legend>
Delete my account and all data associated with it
<button @click="deleteAccount">
Delete
</button>
</fieldset>
</main>
</template>
<script lang="ts" setup>
definePageMeta({
middleware: ["authenticated"],
});
const { data: session, refresh: sessionRefresh } = await useAccountSession();
const timezone = ref(session.value?.account.timezone ?? "");
async function changeSettings() {
try {
await $fetch("/api/account", {
method: "patch",
body: {
timezone: timezone.value,
}
});
await sessionRefresh();
} catch (err: any) {
alert(err.data.message);
}
}
async function deleteAccount() {
try {
await $fetch.raw("/api/account", {
method: "DELETE",
});
await sessionRefresh();
await navigateTo("/");
} catch (err: any) {
alert(`Delete account failed: ${err.statusCode} ${err.statusMessage}`);
}
}
</script>