feat: whyrating - initial project from turbostarter boilerplate
This commit is contained in:
49
apps/mobile/src/lib/query.tsx
Normal file
49
apps/mobile/src/lib/query.tsx
Normal file
@@ -0,0 +1,49 @@
|
||||
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>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user