diff --git a/next-ui/src/colada/mutations/mark-announcements-read.ts b/next-ui/src/colada/mutations/mark-announcements-read.ts new file mode 100644 index 000000000..c6de7fb72 --- /dev/null +++ b/next-ui/src/colada/mutations/mark-announcements-read.ts @@ -0,0 +1,16 @@ +import {defineMutation, useMutation, useQueryCache} from '@pinia/colada' +import {komgaClient} from '@/api/komga-client' + +export const useMarkAnnouncementsRead = defineMutation(() => { + const queryCache = useQueryCache() + return useMutation({ + mutation: (announcementIds: string[]) => + komgaClient.PUT('/api/v1/announcements', {body: announcementIds}), + onSuccess: () => { + queryCache.invalidateQueries({key: ['announcements']}) + }, + onError: (error) => { + console.log('announcements mark read error', error) + }, + }) +}) diff --git a/next-ui/src/colada/queries/actuator-info.ts b/next-ui/src/colada/queries/actuator-info.ts index 61586390e..b35e4e599 100644 --- a/next-ui/src/colada/queries/actuator-info.ts +++ b/next-ui/src/colada/queries/actuator-info.ts @@ -1,8 +1,8 @@ -import {useQuery} from '@pinia/colada' +import {defineQuery, useQuery} from '@pinia/colada' import {komgaClient} from '@/api/komga-client' import type {ActuatorInfo} from '@/types/Actuator' -export function useActuatorInfo() { +export const useActuatorInfo = defineQuery(() => { return useQuery({ key: () => ['actuator-info'], query: () => komgaClient.GET('/actuator/info') @@ -12,4 +12,4 @@ export function useActuatorInfo() { staleTime: 60 * 60 * 1000, gcTime: false, }) -} +}) diff --git a/next-ui/src/colada/queries/announcements.ts b/next-ui/src/colada/queries/announcements.ts new file mode 100644 index 000000000..78d431ddc --- /dev/null +++ b/next-ui/src/colada/queries/announcements.ts @@ -0,0 +1,21 @@ +import {defineQuery, useQuery} from '@pinia/colada' +import {komgaClient} from '@/api/komga-client' + +export const useAnnouncements = defineQuery(() => { + const {data, ...rest} = useQuery({ + key: () => ['announcements'], + query: () => komgaClient.GET('/api/v1/announcements') + // unwrap the openapi-fetch structure on success + .then((res) => res.data), + // 1 hour + staleTime: 60 * 60 * 1000, + gcTime: false, + }) + + const unreadCount = computed(() => data.value?.items + ?.filter((x) => false == x._komga?.read) + ?.length || 0 + ) + + return {...rest, data, unreadCount} +}) diff --git a/next-ui/src/colada/queries/app-releases.ts b/next-ui/src/colada/queries/app-releases.ts index b8208314e..7819a81a3 100644 --- a/next-ui/src/colada/queries/app-releases.ts +++ b/next-ui/src/colada/queries/app-releases.ts @@ -1,7 +1,7 @@ -import {useQuery} from '@pinia/colada' +import {defineQuery, useQuery} from '@pinia/colada' import {komgaClient} from '@/api/komga-client' -export function useAppReleases() { +export const useAppReleases = defineQuery(() => { return useQuery({ key: () => ['app-releases'], query: () => komgaClient.GET('/api/v1/releases') @@ -11,4 +11,4 @@ export function useAppReleases() { staleTime: 60 * 60 * 1000, gcTime: false, }) -} +}) diff --git a/next-ui/src/colada/queries/current-user.ts b/next-ui/src/colada/queries/current-user.ts index 7c2599c7f..9d6dd1846 100644 --- a/next-ui/src/colada/queries/current-user.ts +++ b/next-ui/src/colada/queries/current-user.ts @@ -1,7 +1,7 @@ -import {useQuery} from '@pinia/colada' +import {defineQuery, useQuery} from '@pinia/colada' import {komgaClient} from '@/api/komga-client' -export function useCurrentUser() { +export const useCurrentUser = defineQuery(() => { return useQuery({ key: () => ['current-user'], query: () => komgaClient.GET('/api/v2/users/me') @@ -12,4 +12,4 @@ export function useCurrentUser() { gcTime: false, autoRefetch: true, }) -} +}) diff --git a/next-ui/src/components.d.ts b/next-ui/src/components.d.ts index 1ef4f89cd..8ec317856 100644 --- a/next-ui/src/components.d.ts +++ b/next-ui/src/components.d.ts @@ -21,6 +21,7 @@ declare module 'vue' { AppFooter: typeof import('./components/AppFooter.vue')['default'] BuidVersion: typeof import('./components/BuidVersion.vue')['default'] BuildCommit: typeof import('./components/BuildCommit.vue')['default'] + BuildVersion: typeof import('./components/BuildVersion.vue')['default'] HelloWorld: typeof import('./components/HelloWorld.vue')['default'] LoginForm: typeof import('./components/LoginForm.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] diff --git a/next-ui/src/components/BuidVersion.vue b/next-ui/src/components/BuildVersion.vue similarity index 100% rename from next-ui/src/components/BuidVersion.vue rename to next-ui/src/components/BuildVersion.vue diff --git a/next-ui/src/components/app/drawer/AppDrawerFooter.vue b/next-ui/src/components/app/drawer/AppDrawerFooter.vue index c525ee1aa..bc884c6f0 100644 --- a/next-ui/src/components/app/drawer/AppDrawerFooter.vue +++ b/next-ui/src/components/app/drawer/AppDrawerFooter.vue @@ -4,7 +4,7 @@