|
1 | 1 | import { useMount } from 'ahooks'
|
2 | 2 | import { PropsWithChildren, useRef } from 'react'
|
| 3 | +import { useQueryClient } from '@tanstack/react-query' |
3 | 4 | import { listen, type UnlistenFn } from '@tauri-apps/api/event'
|
4 | 5 | import {
|
| 6 | + CLASH_CONFIG_QUERY_KEY, |
| 7 | + CLASH_INFO_QUERY_KEY, |
| 8 | + CLASH_VERSION_QUERY_KEY, |
5 | 9 | NYANPASU_BACKEND_EVENT_NAME,
|
6 |
| - useClashConfig, |
7 |
| - useClashInfo, |
8 |
| - useClashVersion, |
9 |
| - useSettings, |
10 |
| - useSystemProxy, |
11 |
| -} from '../ipc' |
| 10 | + NYANPASU_SETTING_QUERY_KEY, |
| 11 | + NYANPASU_SYSTEM_PROXY_QUERY_KEY, |
| 12 | +} from '../ipc/consts' |
12 | 13 |
|
13 | 14 | type EventPayload = 'nyanpasu_config' | 'clash_config' | 'proxies' | 'profiles'
|
14 | 15 |
|
| 16 | +const NYANPASU_CONFIG_MUTATION_KEYS = [ |
| 17 | + NYANPASU_SETTING_QUERY_KEY, |
| 18 | + NYANPASU_SYSTEM_PROXY_QUERY_KEY, |
| 19 | + // TODO: proxies hook refetch |
| 20 | + // TODO: profiles hook refetch |
| 21 | +] as const |
| 22 | + |
| 23 | +const CLASH_CONFIG_MUTATION_KEYS = [ |
| 24 | + CLASH_VERSION_QUERY_KEY, |
| 25 | + CLASH_INFO_QUERY_KEY, |
| 26 | + CLASH_CONFIG_QUERY_KEY, |
| 27 | + // TODO: clash rules hook refetch |
| 28 | + // TODO: clash rules providers hook refetch |
| 29 | + // TODO: proxies hook refetch |
| 30 | + // TODO: proxies providers hook refetch |
| 31 | + // TODO: profiles hook refetch |
| 32 | + // TODO: all profiles providers hook refetch, key.includes('getAllProxiesProviders') |
| 33 | +] as const |
| 34 | + |
| 35 | +const PROFILES_MUTATION_KEYS = [ |
| 36 | + CLASH_VERSION_QUERY_KEY, |
| 37 | + CLASH_INFO_QUERY_KEY, |
| 38 | + // TODO: clash rules hook refetch |
| 39 | + // TODO: clash rules providers hook refetch |
| 40 | + // TODO: proxies hook refetch |
| 41 | + // TODO: proxies providers hook refetch |
| 42 | + // TODO: profiles hook refetch |
| 43 | + // TODO: all profiles providers hook refetch, key.includes('getAllProxiesProviders') |
| 44 | +] |
| 45 | + |
| 46 | +const PROXIES_MUTATION_KEYS = [ |
| 47 | + // TODO: key.includes('getProxies') |
| 48 | +] as const |
| 49 | + |
15 | 50 | export const MutationProvider = ({ children }: PropsWithChildren) => {
|
16 | 51 | const unlistenFn = useRef<UnlistenFn>(null)
|
17 | 52 |
|
18 |
| - const settings = useSettings() |
19 |
| - |
20 |
| - const systemProxy = useSystemProxy() |
21 |
| - |
22 |
| - const clashVersion = useClashVersion() |
| 53 | + const queryClient = useQueryClient() |
23 | 54 |
|
24 |
| - const clashInfo = useClashInfo() |
25 |
| - |
26 |
| - const clashConfig = useClashConfig() |
| 55 | + const refetchQueries = (keys: readonly string[]) => { |
| 56 | + Promise.all( |
| 57 | + keys.map((key) => |
| 58 | + queryClient.refetchQueries({ |
| 59 | + queryKey: [key], |
| 60 | + }), |
| 61 | + ), |
| 62 | + ).catch((e) => console.error(e)) |
| 63 | + } |
27 | 64 |
|
28 | 65 | useMount(() => {
|
29 | 66 | listen<EventPayload>(NYANPASU_BACKEND_EVENT_NAME, ({ payload }) => {
|
30 |
| - switch (payload) { |
31 |
| - case 'nyanpasu_config': { |
32 |
| - Promise.all([ |
33 |
| - settings.query.refetch(), |
34 |
| - systemProxy.refetch(), |
35 |
| - // TODO: proxies hook refetch |
36 |
| - // TODO: profiles hook refetch |
37 |
| - ]).catch((e) => { |
38 |
| - console.error(e) |
39 |
| - }) |
| 67 | + console.log('MutationProvider', payload) |
40 | 68 |
|
| 69 | + switch (payload) { |
| 70 | + case 'nyanpasu_config': |
| 71 | + refetchQueries(NYANPASU_CONFIG_MUTATION_KEYS) |
41 | 72 | break
|
42 |
| - } |
43 |
| - |
44 |
| - case 'clash_config': { |
45 |
| - Promise.all([ |
46 |
| - clashVersion.refetch(), |
47 |
| - clashInfo.refetch(), |
48 |
| - clashConfig.query.refetch(), |
49 |
| - // TODO: clash rules hook refetch |
50 |
| - // TODO: clash rules providers hook refetch |
51 |
| - // TODO: proxies hook refetch |
52 |
| - // TODO: proxies providers hook refetch |
53 |
| - // TODO: profiles hook refetch |
54 |
| - // TODO: all profiles providers hook refetch, key.includes('getAllProxiesProviders') |
55 |
| - ]).catch((e) => { |
56 |
| - console.error(e) |
57 |
| - }) |
58 |
| - |
| 73 | + case 'clash_config': |
| 74 | + refetchQueries(CLASH_CONFIG_MUTATION_KEYS) |
59 | 75 | break
|
60 |
| - } |
61 |
| - |
62 |
| - case 'profiles': { |
63 |
| - Promise.all([ |
64 |
| - clashVersion.refetch(), |
65 |
| - clashInfo.refetch(), |
66 |
| - // TODO: clash rules hook refetch |
67 |
| - // TODO: clash rules providers hook refetch |
68 |
| - // TODO: proxies hook refetch |
69 |
| - // TODO: proxies providers hook refetch |
70 |
| - // TODO: profiles hook refetch |
71 |
| - // TODO: all profiles providers hook refetch, key.includes('getAllProxiesProviders') |
72 |
| - ]).catch((e) => { |
73 |
| - console.error(e) |
74 |
| - }) |
75 |
| - |
| 76 | + case 'profiles': |
| 77 | + refetchQueries(PROFILES_MUTATION_KEYS) |
76 | 78 | break
|
77 |
| - } |
78 |
| - |
79 |
| - case 'proxies': { |
80 |
| - Promise.all([ |
81 |
| - // TODO: key.includes('getProxies') |
82 |
| - ]).catch((e) => { |
83 |
| - console.error(e) |
84 |
| - }) |
85 |
| - |
| 79 | + case 'proxies': |
| 80 | + refetchQueries(PROXIES_MUTATION_KEYS) |
86 | 81 | break
|
87 |
| - } |
88 | 82 | }
|
89 | 83 | })
|
90 | 84 | .then((unlisten) => {
|
|
0 commit comments