colada thingies

This commit is contained in:
Gauthier Roebroeck 2025-12-04 17:12:13 +08:00
parent 65776273da
commit b0d2427e13
4 changed files with 47 additions and 7 deletions

View file

@ -13,10 +13,9 @@ enableAutoUnmount(afterEach)
describe('colada releases', () => { describe('colada releases', () => {
test('when getting app releases then values are correct', async () => { test('when getting app releases then values are correct', async () => {
createMockColada(useAppReleases) createMockColada(useAppReleases)
const { latestRelease, isLatestVersion, refresh, actuatorRefresh } = useAppReleases() const { latestRelease, isLatestVersion, refresh } = useAppReleases()
await refresh() await refresh()
await actuatorRefresh()
expect(latestRelease.value!.version).toBe('1.21.2') expect(latestRelease.value!.version).toBe('1.21.2')
expect(isLatestVersion.value).toBe(true) expect(isLatestVersion.value).toBe(true)
}) })

View file

@ -1,9 +1,15 @@
import { defineQuery, useQuery } from '@pinia/colada' import { defineQuery, useQuery } from '@pinia/colada'
import { komgaClient } from '@/api/komga-client' import { komgaClient } from '@/api/komga-client'
import { useActuatorInfo } from '@/colada/actuator-info' import { useActuatorInfo } from '@/colada/actuator-info'
import { combinePromises } from '@/colada/utils'
export const useAppReleases = defineQuery(() => { export const useAppReleases = defineQuery(() => {
const { data, ...rest } = useQuery({ const {
data,
refresh: refreshReleases,
refetch: refetchReleases,
...rest
} = useQuery({
key: () => ['app-releases'], key: () => ['app-releases'],
query: () => query: () =>
komgaClient komgaClient
@ -15,7 +21,11 @@ export const useAppReleases = defineQuery(() => {
gcTime: false, gcTime: false,
}) })
const { buildVersion, refresh: actuatorRefresh } = useActuatorInfo() const { buildVersion, refresh: refreshActuator, refetch: refetchActuator } = useActuatorInfo()
const refresh = combinePromises(refreshReleases, [refreshActuator])
const refetch = combinePromises(refetchReleases, [refetchActuator])
const latestRelease = computed(() => data.value?.find((x) => x.latest)) const latestRelease = computed(() => data.value?.find((x) => x.latest))
const isLatestVersion = computed(() => { const isLatestVersion = computed(() => {
@ -26,10 +36,11 @@ export const useAppReleases = defineQuery(() => {
return { return {
data, data,
refresh,
refetch,
...rest, ...rest,
buildVersion, buildVersion,
latestRelease, latestRelease,
isLatestVersion, isLatestVersion,
actuatorRefresh,
} }
}) })

View file

@ -1,9 +1,15 @@
import { defineQuery, useQuery } from '@pinia/colada' import { defineQuery, useQuery } from '@pinia/colada'
import { komgaClient } from '@/api/komga-client' import { komgaClient } from '@/api/komga-client'
import { useClientSettingsUser } from '@/colada/client-settings' import { useClientSettingsUser } from '@/colada/client-settings'
import { combinePromises } from '@/colada/utils'
export const useLibraries = defineQuery(() => { export const useLibraries = defineQuery(() => {
const { data, ...rest } = useQuery({ const {
data,
refresh: refreshLibraries,
refetch: refetchLibraries,
...rest
} = useQuery({
key: () => ['libraries'], key: () => ['libraries'],
query: () => query: () =>
komgaClient komgaClient
@ -15,7 +21,14 @@ export const useLibraries = defineQuery(() => {
gcTime: false, gcTime: false,
}) })
const { userLibraries } = useClientSettingsUser() const {
userLibraries,
refresh: refreshSettings,
refetch: refetchSettings,
} = useClientSettingsUser()
const refresh = combinePromises(refreshLibraries, [refreshSettings])
const refetch = combinePromises(refetchLibraries, [refetchSettings])
const ordered = computed(() => const ordered = computed(() =>
data?.value?.sort( data?.value?.sort(
@ -36,6 +49,8 @@ export const useLibraries = defineQuery(() => {
ordered, ordered,
unpinned, unpinned,
pinned, pinned,
refresh,
refetch,
...rest, ...rest,
} }
}) })

View file

@ -0,0 +1,15 @@
/**
* Convenience function to create a refresh/refetch function for queries
* that depend on other queries.
* @param main
* @param secondary
*/
export function combinePromises(
main: (throwOnError: boolean) => Promise<unknown>,
secondary: (() => Promise<unknown>)[],
): (throwOnError?: boolean) => Promise<unknown> {
return async function (throwOnError: boolean = false) {
await Promise.allSettled(secondary.map((it) => it()))
return main(throwOnError)
}
}