-
-
Notifications
You must be signed in to change notification settings - Fork 2k
/
useListResourceQueries.ts
79 lines (65 loc) · 2.34 KB
/
useListResourceQueries.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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import { useCallback } from "react";
import { useQueryClient } from "react-query";
export const useListResourceQueries = () => {
const queryClient = useQueryClient();
const data = queryClient.getQueryCache();
const listResourceQueries = useCallback(
(resource: string) => {
return data.getAll().filter((query) => {
return query.queryKey.includes(`resource/list/${resource}`);
});
},
[data],
);
return listResourceQueries;
};
export const useGetOneQueries = () => {
const queryClient = useQueryClient();
const data = queryClient.getQueryCache();
return useCallback(
(resource: string) => {
const getOneQueries = data.getAll().filter((query) => {
return query.queryKey.includes(`resource/getOne/${resource}`);
});
return getOneQueries;
},
[data],
);
};
export const useGetManyQueries = () => {
const queryClient = useQueryClient();
const data = queryClient.getQueryCache();
const getManyResourceQueries = useCallback(
(resource: string) => {
return data.getAll().filter((query) => {
return query.queryKey.includes(`resource/getMany/${resource}`);
});
},
[data],
);
return getManyResourceQueries;
};
export const useCacheQueries = () => {
const listResourceQueries = useListResourceQueries();
const getOneQuery = useGetOneQueries();
const getManyResourceQuery = useGetManyQueries();
return useCallback((resource: string, id?: string | string[]) => {
const queries = getOneQuery(resource);
const listQuery = listResourceQueries(resource);
const getManyQuery = getManyResourceQuery(resource);
if (id) {
let getOneQueriesWithId;
if (Array.isArray(id)) {
getOneQueriesWithId = queries.filter((query) => {
return id.includes((query.queryKey[1] as any).id);
});
} else {
getOneQueriesWithId = queries.filter((query) => {
return (query.queryKey[1] as any).id === id;
});
}
return [...listQuery, ...getManyQuery, ...getOneQueriesWithId];
}
return [...listQuery, ...getManyQuery, ...queries];
}, []);
};