Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save oskar-kupski-elpassion/6f95be50d0ab8f203ffcffb8bae44caf to your computer and use it in GitHub Desktop.
Save oskar-kupski-elpassion/6f95be50d0ab8f203ffcffb8bae44caf to your computer and use it in GitHub Desktop.
import {
useQuery,
QueryKey,
QueryFunction,
UseQueryResult
} from 'react-query';
export function useAdaptedQuery<ApiReturnType, ReturnType = ApiReturnType>(
queryKey: QueryKey,
fn: QueryFunction<ApiReturnType>,
options: {
keepPreviousData?: boolean;
onSuccess?: (data: ReturnType) => void;
select?: (data: ApiReturnType) => ReturnType;
staleTime?: number;
} = {}
):
| [undefined, true, Error | null, UseQueryResult<ReturnType, Error>]
| [undefined, false, Error, UseQueryResult<ReturnType, Error>]
| [ReturnType, false, null, UseQueryResult<ReturnType, Error>] {
const queryResult = useQuery<ApiReturnType, Error, ReturnType>(queryKey, fn, {
...options,
staleTime: options.staleTime || 5 * 60 * 1000, // 5 min by default
});
if (queryResult.isLoading)
return [
queryResult.data,
queryResult.isLoading,
queryResult.error,
queryResult,
] as [undefined, true, Error | null, UseQueryResult<ReturnType, Error>];
if (queryResult.error)
return [
queryResult.data,
queryResult.isLoading,
queryResult.error,
queryResult,
] as [undefined, false, Error, UseQueryResult<ReturnType, Error>];
return [
queryResult.data,
queryResult.isLoading,
queryResult.error,
queryResult,
] as [ReturnType, false, null, UseQueryResult<ReturnType, Error>];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment