import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { fetchMedia, fetchMediaSyncStatus, triggerMediaSync } from './api.js'; export const mediaQueryKeys = { items: ['dashboard', 'media'] as const, syncStatus: ['dashboard', 'media', 'sync-status'] as const, }; export function useMediaQuery() { return useQuery({ queryKey: mediaQueryKeys.items, queryFn: fetchMedia }); } export function useMediaSyncStatusQuery() { return useQuery({ queryKey: mediaQueryKeys.syncStatus, queryFn: fetchMediaSyncStatus, refetchInterval(query) { return query.state.data?.isSyncing ? 1_000 : 15_000; }, }); } export function useTriggerMediaSyncMutation() { const queryClient = useQueryClient(); return useMutation({ mutationFn(isFull: boolean) { const syncRequest = triggerMediaSync(isFull); void queryClient.invalidateQueries({ queryKey: mediaQueryKeys.syncStatus }); return syncRequest; }, async onSuccess() { await Promise.all([ queryClient.invalidateQueries({ queryKey: mediaQueryKeys.items }), queryClient.invalidateQueries({ queryKey: mediaQueryKeys.syncStatus }), ]); }, onError() { void queryClient.invalidateQueries({ queryKey: mediaQueryKeys.syncStatus }); }, }); }