forked from TanStack/query
/
useIsFetching.ts
37 lines (31 loc) 路 1.05 KB
/
useIsFetching.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import { QueryKey, parseFilterArgs, QueryFilters } from '@tanstack/query-core'
import { ContextOptions } from './types'
import { useQueryClient } from './QueryClientProvider'
import { Accessor, createSignal, onCleanup } from 'solid-js'
interface Options extends ContextOptions {}
export function useIsFetching(
filters?: QueryFilters,
options?: Options,
): Accessor<number>
export function useIsFetching(
queryKey?: QueryKey,
filters?: QueryFilters,
options?: Options,
): Accessor<number>
export function useIsFetching(
arg1?: QueryKey | QueryFilters,
arg2?: QueryFilters | Options,
arg3?: Options,
): Accessor<number> {
const [filters, options = {}] = parseFilterArgs(arg1, arg2, arg3)
const queryClient = useQueryClient({ context: options.context })
const queryCache = queryClient.getQueryCache()
const [fetches, setFetches] = createSignal(queryClient.isFetching(filters))
const unsubscribe = queryCache.subscribe((_result) => {
setFetches(queryClient.isFetching(filters))
})
onCleanup(() => {
unsubscribe()
})
return fetches
}