You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

87 lines
2.4 KiB

"use client";
import {
QueryClient,
QueryClientProvider,
useQueryClient,
} from "@tanstack/react-query";
import { type ReactNode, useEffect, useState } from "react";
import { ViewPaddingsProvider } from "@/components/Componentes/view-paddings-provider";
function AppFocusReloader({ children }: { children: ReactNode }) {
const queryClient = useQueryClient();
useEffect(() => {
if (typeof window !== "undefined") {
(window as any).__queryClient = queryClient;
}
const handleReload = () => {
// Invalidate all active queries so fresh data is reloaded from backend
queryClient.invalidateQueries();
};
const handleVisibilityChange = () => {
if (document.visibilityState === "visible") {
handleReload();
}
};
const handlePageShow = () => {
handleReload();
};
window.addEventListener("focus", handleReload);
window.addEventListener("pageshow", handlePageShow);
document.addEventListener("visibilitychange", handleVisibilityChange);
// Listen for Flutter response events if available
const win = window as any;
const unbindFlutter =
typeof win.addFlutterResponseListener === "function"
? win.addFlutterResponseListener(() => handleReload())
: null;
return () => {
window.removeEventListener("focus", handleReload);
window.removeEventListener("pageshow", handlePageShow);
document.removeEventListener("visibilitychange", handleVisibilityChange);
if (typeof unbindFlutter === "function") {
unbindFlutter();
}
};
}, [queryClient]);
return <>{children}</>;
}
type ProvidersProps = {
children: ReactNode;
};
export default function Providers({ children }: ProvidersProps) {
const [queryClient] = useState(
() =>
new QueryClient({
defaultOptions: {
queries: {
refetchOnWindowFocus: "always",
refetchOnMount: "always",
refetchOnReconnect: "always",
retry: 1,
staleTime: 0, // Always consider queries stale to ensure fresh data from backend on every page load
gcTime: 10 * 60 * 1000, // 10 minutes
},
},
}),
);
return (
<QueryClientProvider client={queryClient}>
<AppFocusReloader>
<ViewPaddingsProvider />
{children}
</AppFocusReloader>
</QueryClientProvider>
);
}