Files
whyrating/apps/mobile/src/lib/query.tsx
2026-02-04 01:55:00 +01:00

50 lines
1.3 KiB
TypeScript

import { useReactQueryDevTools } from "@dev-plugins/react-query";
import {
QueryClient,
QueryClientProvider as TanstackQueryClientProvider,
} from "@tanstack/react-query";
import { onlineManager } from "@tanstack/react-query";
import * as Network from "expo-network";
import { useState } from "react";
import { Alert } from "react-native";
import { logger } from "@turbostarter/shared/logger";
import { useRefetchOnAppFocus } from "~/modules/common/hooks/use-refetch-on-app-focus";
onlineManager.setEventListener((setOnline) => {
const eventSubscription = Network.addNetworkStateListener((state) => {
setOnline(!!state.isConnected);
});
return () => eventSubscription.remove();
});
export function QueryClientProvider(props: { children: React.ReactNode }) {
const [queryClient] = useState(
() =>
new QueryClient({
defaultOptions: {
mutations: {
onError: (error: Error | { error: Error }) => {
if ("error" in error) {
error = error.error;
}
logger.error(error);
Alert.alert(error.message);
},
},
},
}),
);
useRefetchOnAppFocus();
useReactQueryDevTools(queryClient);
return (
<TanstackQueryClientProvider client={queryClient}>
{props.children}
</TanstackQueryClientProvider>
);
}