feat: use new version endpoint to display api information

This commit is contained in:
2026-09-01 17:03:23 +02:00
parent 16405ec5f7
commit 8df92a470e
3 changed files with 61 additions and 0 deletions
+10
View File
@@ -0,0 +1,10 @@
import { API_BASE_URL, extractErrorMessage } from '@/api/http'
import type { VersionInfo } from '@/types/version'
export async function getVersionApi(): Promise<VersionInfo> {
const response = await fetch(`${API_BASE_URL}/version`)
if (!response.ok) {
throw new Error(await extractErrorMessage(response, 'Failed to load API version'))
}
return response.json()
}
+5
View File
@@ -0,0 +1,5 @@
export interface VersionInfo {
version: string
commit: string
buildTime: string
}
+46
View File
@@ -2,6 +2,8 @@
import { onMounted, ref } from 'vue' import { onMounted, ref } from 'vue'
import { useListsStore } from '@/stores/lists' import { useListsStore } from '@/stores/lists'
import { useAuthStore } from '@/stores/auth' import { useAuthStore } from '@/stores/auth'
import { getVersionApi } from '@/api/version'
import type { VersionInfo } from '@/types/version'
import ChangePasswordModal from '@/components/ChangePasswordModal.vue' import ChangePasswordModal from '@/components/ChangePasswordModal.vue'
import InvitesPanel from '@/components/InvitesPanel.vue' import InvitesPanel from '@/components/InvitesPanel.vue'
@@ -9,10 +11,27 @@ const listsStore = useListsStore()
const authStore = useAuthStore() const authStore = useAuthStore()
const showChangePassword = ref(false) const showChangePassword = ref(false)
const versionInfo = ref<VersionInfo | null>(null)
const versionError = ref('')
const isLoadingVersion = ref(false)
onMounted(() => { onMounted(() => {
listsStore.loadLists() listsStore.loadLists()
loadVersion()
}) })
async function loadVersion() {
isLoadingVersion.value = true
versionError.value = ''
try {
versionInfo.value = await getVersionApi()
} catch (err) {
versionError.value = err instanceof Error ? err.message : 'Failed to load API information'
} finally {
isLoadingVersion.value = false
}
}
</script> </script>
<template> <template>
@@ -51,6 +70,27 @@ onMounted(() => {
</p> </p>
</section> </section>
<h1 class="section-heading">API information</h1>
<section class="card info-card">
<p v-if="isLoadingVersion" class="loading-text">Loading</p>
<template v-else-if="versionInfo">
<p class="row">
<span>Version</span>
<strong class="mono-num">{{ versionInfo.version }}</strong>
</p>
<p class="row">
<span>Commit</span>
<strong class="mono-num">{{ versionInfo.commit }}</strong>
</p>
<p class="row">
<span>Build time</span>
<strong>{{ versionInfo.buildTime }}</strong>
</p>
</template>
<p v-else class="banner banner-error">{{ versionError }}</p>
</section>
<ChangePasswordModal v-if="showChangePassword" @close="showChangePassword = false" /> <ChangePasswordModal v-if="showChangePassword" @close="showChangePassword = false" />
</main> </main>
</template> </template>
@@ -107,4 +147,10 @@ onMounted(() => {
margin-top: 0.6rem; margin-top: 0.6rem;
padding: 0.5rem 1rem; padding: 0.5rem 1rem;
} }
.loading-text {
font-size: 0.85rem;
color: var(--c-text-soft);
margin: 0;
}
</style> </style>