forked from inshared/query
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuseIsFetching.ts
58 lines (48 loc) · 1.6 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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import { createComputed, createMemo, createSignal, onCleanup } from 'solid-js'
import { useQueryClient } from './QueryClientProvider'
import { parseFilterArgs } from './utils'
import type { QueryFilters } from '@tanstack/query-core'
import type { ContextOptions, SolidQueryFilters, SolidQueryKey } from './types'
import type { Accessor } from 'solid-js'
interface Options extends ContextOptions {}
export function useIsFetching(
filters?: SolidQueryFilters,
options?: Options,
): Accessor<number>
export function useIsFetching(
queryKey?: SolidQueryKey,
filters?: SolidQueryFilters,
options?: Options,
): Accessor<number>
export function useIsFetching(
arg1?: SolidQueryKey | SolidQueryFilters,
arg2?: SolidQueryFilters | Options,
arg3?: Options,
): Accessor<number> {
const [filtersObj, optionsObj = {}] = parseFilterArgs(arg1, arg2, arg3)
const [filters, setFilters] = createSignal(filtersObj)
const [options, setOptions] = createSignal(optionsObj)
const queryClient = createMemo(() =>
useQueryClient({ context: options().context }),
)
const queryCache = createMemo(() => queryClient().getQueryCache())
const [fetches, setFetches] = createSignal(
queryClient().isFetching(filters as QueryFilters),
)
createComputed(() => {
const [newFiltersObj, newOptionsObj = {}] = parseFilterArgs(
arg1,
arg2,
arg3,
)
setFilters(newFiltersObj)
setOptions(newOptionsObj)
})
const unsubscribe = queryCache().subscribe(() => {
setFetches(queryClient().isFetching(filters() as QueryFilters))
})
onCleanup(() => {
unsubscribe()
})
return fetches
}