diff --git a/apps/mobile/src/app/_layout.tsx b/apps/mobile/src/app/_layout.tsx index e2c6872..598903a 100644 --- a/apps/mobile/src/app/_layout.tsx +++ b/apps/mobile/src/app/_layout.tsx @@ -4,12 +4,14 @@ import * as SecureStore from "expo-secure-store"; import { View, Text } from "react-native"; import { useEffect, useState } from "react"; import { SafeAreaProvider } from "react-native-safe-area-context"; +import { QueryClientProvider } from "@tanstack/react-query"; import { validateEnv } from "../utils/env"; import { ThemeProvider } from "../contexts/ThemeContext"; import { StatisticsProvider } from "../contexts/StatisticsContext"; import { FitnessGoalsProvider } from "../contexts/FitnessGoalsContext"; import { RecommendationsProvider } from "../contexts/RecommendationsContext"; import { NotificationsProvider } from "../contexts/NotificationsContext"; +import { queryClient } from "../lib/query-client"; import log from "../utils/logger"; // Wrapper to use notification permissions hook after ClerkLoaded @@ -172,21 +174,23 @@ export default function RootLayout() { return ( - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + ); } diff --git a/apps/mobile/src/lib/query-client.ts b/apps/mobile/src/lib/query-client.ts new file mode 100644 index 0000000..c37d2c9 --- /dev/null +++ b/apps/mobile/src/lib/query-client.ts @@ -0,0 +1,18 @@ +import { QueryClient } from "@tanstack/react-query"; + +export const queryClient = new QueryClient({ + defaultOptions: { + queries: { + staleTime: 30000, + gcTime: 5 * 60 * 1000, + retry: 1, + refetchOnWindowFocus: false, + refetchOnReconnect: true, + }, + }, +}); + +export const userScopedKey = ( + resource: string, + userId: string, +): [string, string] => [resource, userId];