homeio
PublicForked from doctor-io/homeio
useWifiNetworks.ts
"use client";
import { useQuery } from "@tanstack/react-query";
import type { WifiAccessPoint } from "@/lib/shared/contracts/network";
import { queryKeys } from "@/lib/shared/query-keys";
type WifiNetworksResponse = {
data: WifiAccessPoint[];
meta?: {
source?: "helper" | "fallback";
count?: number;
};
};
async function fetchWifiNetworks() {
const response = await fetch("/api/v1/network/networks", {
cache: "no-store",
});
if (!response.ok) {
throw new Error(`Failed to fetch Wi-Fi networks (${response.status})`);
}
const json = (await response.json()) as WifiNetworksResponse;
return json.data;
}
export function useWifiNetworks() {
return useQuery({
queryKey: queryKeys.networkNetworks,
queryFn: fetchWifiNetworks,
refetchInterval: (query) => {
if (query.state.status !== "error") {
return 120_000;
}
const failureCount = Math.max(1, query.state.fetchFailureCount);
const exponentialBackoffMs = 60_000 * 2 ** Math.min(failureCount - 1, 2);
return Math.min(exponentialBackoffMs, 300_000);
},
staleTime: 10_000,
retry: 0,
refetchOnWindowFocus: false,
});
}