refactor colada composables

This commit is contained in:
Gauthier Roebroeck 2025-05-21 10:19:51 +08:00
parent c9c1ddaab7
commit cc94c0c5b1
11 changed files with 53 additions and 61 deletions

View file

@ -3,7 +3,7 @@ import {komgaClient} from '@/api/komga-client'
import type {ActuatorInfo} from '@/types/Actuator'
export const useActuatorInfo = defineQuery(() => {
return useQuery({
const {data, ...rest} = useQuery({
key: () => ['actuator-info'],
query: () => komgaClient.GET('/actuator/info')
// unwrap the openapi-fetch structure on success
@ -12,4 +12,14 @@ export const useActuatorInfo = defineQuery(() => {
staleTime: 60 * 60 * 1000,
gcTime: false,
})
const buildVersion = computed(() => data.value?.build?.version)
const commitId = computed(() => data.value?.git?.commit?.id)
return {
data,
...rest,
buildVersion,
commitId,
}
})

View file

@ -1,8 +1,9 @@
import {defineQuery, useQuery} from '@pinia/colada'
import {komgaClient} from '@/api/komga-client'
import {useActuatorInfo} from '@/colada/queries/actuator-info.ts'
export const useAppReleases = defineQuery(() => {
return useQuery({
const {data, ...rest} = useQuery({
key: () => ['app-releases'],
query: () => komgaClient.GET('/api/v1/releases')
// unwrap the openapi-fetch structure on success
@ -11,4 +12,21 @@ export const useAppReleases = defineQuery(() => {
staleTime: 60 * 60 * 1000,
gcTime: false,
})
const {buildVersion} = useActuatorInfo()
const latestRelease = computed(() => data.value?.find(x => x.latest))
const isLatestVersion = computed(() => {
if(buildVersion.value && latestRelease.value)
return buildVersion.value == latestRelease.value?.version
else return undefined
})
return {
data,
...rest,
buildVersion,
latestRelease,
isLatestVersion,
}
})

View file

@ -1,8 +1,9 @@
import {defineQuery, useQuery} from '@pinia/colada'
import {komgaClient} from '@/api/komga-client'
import {UserRoles} from '@/types/UserRoles.ts'
export const useCurrentUser = defineQuery(() => {
return useQuery({
const {data, ...rest} = useQuery({
key: () => ['current-user'],
query: () => komgaClient.GET('/api/v2/users/me')
// unwrap the openapi-fetch structure on success
@ -12,4 +13,14 @@ export const useCurrentUser = defineQuery(() => {
gcTime: false,
autoRefetch: true,
})
const hasRole =(role: UserRoles) => data.value?.roles.includes(role)
const isAdmin = computed(() => hasRole(UserRoles.ADMIN))
return {
data,
...rest,
hasRole,
isAdmin,
}
})

View file

@ -1,15 +1,15 @@
<template>
<template v-if="commit">
<template v-if="commitId">
<v-btn
prepend-icon="mdi-source-commit"
variant="text"
color="grey"
size="small"
class="text-caption"
:href="'https://github.com/gotson/komga/commits/' + commit"
:href="'https://github.com/gotson/komga/commits/' + commitId"
target="_blank"
>
{{ commit }}
{{ commitId }}
</v-btn>
</template>
</template>
@ -17,7 +17,5 @@
<script setup lang="ts">
import {useActuatorInfo} from '@/colada/queries/actuator-info'
const {data} = useActuatorInfo()
const commit = computed(() => data.value?.git?.commit?.id)
const {commitId} = useActuatorInfo()
</script>

View file

@ -20,9 +20,7 @@
</template>
<script setup lang="ts">
import {useBuildVersion} from '@/composables/buid-version.ts'
import {useLatestVersion} from '@/composables/latest-version.ts'
import {useAppReleases} from '@/colada/queries/app-releases.ts'
const {buildVersion} = useBuildVersion()
const {isLatestVersion} = useLatestVersion()
const {buildVersion, isLatestVersion} = useAppReleases()
</script>

View file

@ -11,8 +11,7 @@
</template>
<script setup lang="ts">
import {useCurrentUserRole} from '@/composables/current-user-role.ts'
import {UserRoles} from '@/types/UserRoles.ts'
import {useCurrentUser} from '@/colada/queries/current-user.ts'
const {hasRole: isAdmin} = useCurrentUserRole(UserRoles.ADMIN)
const {isAdmin} = useCurrentUser()
</script>

View file

@ -10,8 +10,7 @@
</template>
<script setup lang="ts">
import {useCurrentUserRole} from '@/composables/current-user-role.ts'
import {UserRoles} from '@/types/UserRoles.ts'
import {useCurrentUser} from '@/colada/queries/current-user.ts'
const {hasRole: isAdmin} = useCurrentUserRole(UserRoles.ADMIN)
const {isAdmin} = useCurrentUser()
</script>

View file

@ -1,9 +0,0 @@
import {useActuatorInfo} from '@/colada/queries/actuator-info'
export function useBuildVersion() {
const {data} = useActuatorInfo()
const buildVersion = computed(() => data.value?.build?.version)
return {buildVersion}
}

View file

@ -1,10 +0,0 @@
import {useCurrentUser} from '@/colada/queries/current-user.ts'
import {UserRoles} from '@/types/UserRoles.ts'
export function useCurrentUserRole(role: UserRoles) {
const {data} = useCurrentUser()
const hasRole = computed(() => data.value?.roles.includes(role))
return {hasRole}
}

View file

@ -1,17 +0,0 @@
import {useAppReleases} from '@/colada/queries/app-releases.ts'
import {useBuildVersion} from '@/composables/buid-version.ts'
export function useLatestVersion() {
const {data } = useAppReleases()
const {buildVersion} = useBuildVersion()
const latestRelease = computed(() => data.value?.find(x => x.latest))
const isLatestVersion = computed(() => {
if(buildVersion.value && latestRelease.value)
return buildVersion.value == latestRelease.value?.version
else return undefined
})
return {isLatestVersion, latestRelease}
}

View file

@ -93,13 +93,8 @@
<script lang="ts" setup>
import {useAppReleases} from '@/colada/queries/app-releases.ts'
import {marked} from 'marked'
import {useBuildVersion} from '@/composables/buid-version.ts'
import {useLatestVersion} from '@/composables/latest-version.ts'
const {data, error} = useAppReleases()
const {buildVersion: currentVersion} = useBuildVersion()
const {isLatestVersion, latestRelease: latest} = useLatestVersion()
const {data, error, buildVersion: currentVersion, isLatestVersion, latestRelease: latest} = useAppReleases()
</script>
<style lang="scss">