eletrotupi / tcc/ frontend/lib/queryClient.tsbb31fc84a30face6fb284d7f0c7785eab1b7ec23
1.2 KB | 43 lines Raw
1
import { QueryClient } from '@tanstack/react-query';
2
import { createSyncStoragePersister } from '@tanstack/query-sync-storage-persister';
3
import { persistQueryClient }  from '@tanstack/react-query-persist-client';
4
import { createMMKV } from 'react-native-mmkv';
5

6
export const storage = createMMKV({ id: 'query-cache' });
7

8
const mmkvStorage = {
9
  getItem: (key: string) => storage.getString(key) ?? null,
10
  setItem: (key: string, value: string) => storage.set(key, value),
11
  removeItem: (key: string) => storage.remove(key)
12
};
13

14
export const queryClient = new QueryClient({
15
  defaultOptions: {
16
    queries: {
17
      // Show data by 5min before it is considered stale
18
      staleTime: 1000 * 60 * 5,
19
      // Keep inactive queries for 10min
20
      gcTime: 1000 * 60 * 10,
21
      // Retry on flaky connections
22
      retry: 1,
23
      // Don't switch just because the user switched apps
24
      refetchOnWindowFocus: false,
25
    },
26
    mutations: {
27
      retry: 1
28
    }
29
  }
30
});
31

32
const persister = createSyncStoragePersister({
33
  storage: mmkvStorage,
34
  // We don't want to hammer mmkv every keystroke
35
  throttleTime: 1000
36
});
37

38
persistQueryClient({
39
  queryClient,
40
  persister,
41
  // Queries survive for 24h on disk if not invalidated
42
  maxAge: 1000 * 60 * 60 * 24
43
});