diff options
author | dan <dan.abramov@gmail.com> | 2024-04-03 23:53:44 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-03 23:53:44 +0100 |
commit | 295a0949f44ef332c7b33e3cd03d0c2ea89047cf (patch) | |
tree | 96b6cc9ed615c9c7df6ba50628b92e8266fe489a /src/lib/react-query.ts | |
parent | 6c728f79dea65d9deeb57a430e6c9fad39940316 (diff) | |
download | voidsky-295a0949f44ef332c7b33e3cd03d0c2ea89047cf.tar.zst |
Factor out QueryProvider (#3331)
Diffstat (limited to 'src/lib/react-query.ts')
-rw-r--r-- | src/lib/react-query.ts | 70 |
1 files changed, 0 insertions, 70 deletions
diff --git a/src/lib/react-query.ts b/src/lib/react-query.ts deleted file mode 100644 index d6cd3c54b..000000000 --- a/src/lib/react-query.ts +++ /dev/null @@ -1,70 +0,0 @@ -import {AppState, AppStateStatus} from 'react-native' -import {QueryClient, focusManager} from '@tanstack/react-query' -import {createAsyncStoragePersister} from '@tanstack/query-async-storage-persister' -import AsyncStorage from '@react-native-async-storage/async-storage' -import {PersistQueryClientProviderProps} from '@tanstack/react-query-persist-client' - -import {isNative} from '#/platform/detection' - -// any query keys in this array will be persisted to AsyncStorage -const STORED_CACHE_QUERY_KEYS = ['labelers-detailed-info'] - -focusManager.setEventListener(onFocus => { - if (isNative) { - const subscription = AppState.addEventListener( - 'change', - (status: AppStateStatus) => { - focusManager.setFocused(status === 'active') - }, - ) - - return () => subscription.remove() - } else if (typeof window !== 'undefined' && window.addEventListener) { - // these handlers are a bit redundant but focus catches when the browser window - // is blurred/focused while visibilitychange seems to only handle when the - // window minimizes (both of them catch tab changes) - // there's no harm to redundant fires because refetchOnWindowFocus is only - // used with queries that employ stale data times - const handler = () => onFocus() - window.addEventListener('focus', handler, false) - window.addEventListener('visibilitychange', handler, false) - return () => { - window.removeEventListener('visibilitychange', handler) - window.removeEventListener('focus', handler) - } - } -}) - -export const queryClient = new QueryClient({ - defaultOptions: { - queries: { - // NOTE - // refetchOnWindowFocus breaks some UIs (like feeds) - // so we only selectively want to enable this - // -prf - refetchOnWindowFocus: false, - // Structural sharing between responses makes it impossible to rely on - // "first seen" timestamps on objects to determine if they're fresh. - // Disable this optimization so that we can rely on "first seen" timestamps. - structuralSharing: false, - // We don't want to retry queries by default, because in most cases we - // want to fail early and show a response to the user. There are - // exceptions, and those can be made on a per-query basis. For others, we - // should give users controls to retry. - retry: false, - }, - }, -}) - -export const asyncStoragePersister = createAsyncStoragePersister({ - storage: AsyncStorage, - key: 'queryCache', -}) - -export const dehydrateOptions: PersistQueryClientProviderProps['persistOptions']['dehydrateOptions'] = - { - shouldDehydrateMutation: (_: any) => false, - shouldDehydrateQuery: query => { - return STORED_CACHE_QUERY_KEYS.includes(String(query.queryKey[0])) - }, - } |