diff --git a/front/packages/models/src/accounts.tsx b/front/packages/models/src/accounts.tsx index 7d57b465..f3d89c19 100644 --- a/front/packages/models/src/accounts.tsx +++ b/front/packages/models/src/accounts.tsx @@ -99,12 +99,19 @@ export const AccountProvider = ({ // update user's data from kyoo un startup, it could have changed. const selected = useMemo(() => accounts.find((x) => x.selected), [accounts]); + const controller = useMemo(() => { + const ret = new AbortController(); + setTimeout(() => ret.abort(), 5_000); + return ret; + }, [selected]); const user = useFetch({ path: ["auth", "me"], parser: UserP, placeholderData: selected as User, enabled: !!selected, - timeout: 5_000, + options: { + signal: controller.signal, + }, }); useEffect(() => { if (!selected || !user.isSuccess || user.isPlaceholderData) return; diff --git a/front/packages/models/src/query.tsx b/front/packages/models/src/query.tsx index 8fa0c82a..b2548239 100644 --- a/front/packages/models/src/query.tsx +++ b/front/packages/models/src/query.tsx @@ -22,7 +22,6 @@ import { ComponentType, ReactElement } from "react"; import { dehydrate, QueryClient, - QueryFunction, QueryFunctionContext, useInfiniteQuery, useQuery, @@ -41,7 +40,6 @@ export let kyooApiUrl = kyooUrl; export const queryFn = async ( context: { - timeout?: number; apiUrl?: string; authenticated?: boolean; method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE"; @@ -72,9 +70,6 @@ export const queryFn = async ( .replace("/?", "?"); let resp; try { - const controller = context.timeout !== undefined ? new AbortController() : undefined; - if (controller) setTimeout(() => controller.abort(), context.timeout); - resp = await fetch(path, { method: context.method, body: "body" in context && context.body ? JSON.stringify(context.body) : undefined, @@ -82,7 +77,7 @@ export const queryFn = async ( ...(token ? { Authorization: token } : {}), ...("body" in context ? { "Content-Type": "application/json" } : {}), }, - signal: controller?.signal ?? context.signal, + signal: context.signal, }); } catch (e) { if (typeof e === "object" && e && "name" in e && e.name === "AbortError") @@ -173,7 +168,6 @@ export type QueryIdentifier = { placeholderData?: T | (() => T); enabled?: boolean; - timeout?: number; options?: Partial[0]>; }; @@ -208,7 +202,7 @@ export const toQueryKey = (query: { export const useFetch = (query: QueryIdentifier) => { return useQuery({ queryKey: toQueryKey(query), - queryFn: (ctx) => queryFn({ ...ctx, timeout: query.timeout, ...query.options }, query.parser), + queryFn: (ctx) => queryFn({ ...ctx, ...query.options }, query.parser), placeholderData: query.placeholderData as any, enabled: query.enabled, }); @@ -217,7 +211,7 @@ export const useFetch = (query: QueryIdentifier) => { export const useInfiniteFetch = (query: QueryIdentifier) => { const ret = useInfiniteQuery, KyooErrors>({ queryKey: toQueryKey(query), - queryFn: (ctx) => queryFn({ ...ctx, timeout: query.timeout }, Paged(query.parser)), + queryFn: (ctx) => queryFn({ ...ctx, ...query.options }, Paged(query.parser)), getNextPageParam: (page: Page) => page?.next || undefined, initialPageParam: undefined, placeholderData: query.placeholderData as any,