diff --git a/next-ui/src/colada/app-releases.test.ts b/next-ui/src/colada/app-releases.test.ts index e48574740..a4b2b3c03 100644 --- a/next-ui/src/colada/app-releases.test.ts +++ b/next-ui/src/colada/app-releases.test.ts @@ -13,10 +13,9 @@ enableAutoUnmount(afterEach) describe('colada releases', () => { test('when getting app releases then values are correct', async () => { createMockColada(useAppReleases) - const { latestRelease, isLatestVersion, refresh, actuatorRefresh } = useAppReleases() + const { latestRelease, isLatestVersion, refresh } = useAppReleases() await refresh() - await actuatorRefresh() expect(latestRelease.value!.version).toBe('1.21.2') expect(isLatestVersion.value).toBe(true) }) diff --git a/next-ui/src/colada/app-releases.ts b/next-ui/src/colada/app-releases.ts index 71c2192c9..6f429e48e 100644 --- a/next-ui/src/colada/app-releases.ts +++ b/next-ui/src/colada/app-releases.ts @@ -1,9 +1,15 @@ import { defineQuery, useQuery } from '@pinia/colada' import { komgaClient } from '@/api/komga-client' import { useActuatorInfo } from '@/colada/actuator-info' +import { combinePromises } from '@/colada/utils' export const useAppReleases = defineQuery(() => { - const { data, ...rest } = useQuery({ + const { + data, + refresh: refreshReleases, + refetch: refetchReleases, + ...rest + } = useQuery({ key: () => ['app-releases'], query: () => komgaClient @@ -15,7 +21,11 @@ export const useAppReleases = defineQuery(() => { 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 isLatestVersion = computed(() => { @@ -26,10 +36,11 @@ export const useAppReleases = defineQuery(() => { return { data, + refresh, + refetch, ...rest, buildVersion, latestRelease, isLatestVersion, - actuatorRefresh, } }) diff --git a/next-ui/src/colada/libraries.ts b/next-ui/src/colada/libraries.ts index 4cb542f24..cb55ed231 100644 --- a/next-ui/src/colada/libraries.ts +++ b/next-ui/src/colada/libraries.ts @@ -1,9 +1,15 @@ import { defineQuery, useQuery } from '@pinia/colada' import { komgaClient } from '@/api/komga-client' import { useClientSettingsUser } from '@/colada/client-settings' +import { combinePromises } from '@/colada/utils' export const useLibraries = defineQuery(() => { - const { data, ...rest } = useQuery({ + const { + data, + refresh: refreshLibraries, + refetch: refetchLibraries, + ...rest + } = useQuery({ key: () => ['libraries'], query: () => komgaClient @@ -15,7 +21,14 @@ export const useLibraries = defineQuery(() => { 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(() => data?.value?.sort( @@ -36,6 +49,8 @@ export const useLibraries = defineQuery(() => { ordered, unpinned, pinned, + refresh, + refetch, ...rest, } }) diff --git a/next-ui/src/colada/utils.ts b/next-ui/src/colada/utils.ts new file mode 100644 index 000000000..0aade91fe --- /dev/null +++ b/next-ui/src/colada/utils.ts @@ -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, + secondary: (() => Promise)[], +): (throwOnError?: boolean) => Promise { + return async function (throwOnError: boolean = false) { + await Promise.allSettled(secondary.map((it) => it())) + return main(throwOnError) + } +}