@rocali/expo-ts-rest-template
Version:
Expo project template with TypeScript, eslint, prettier, react-navigation, storybook, jest and examples for a quick start.
53 lines (48 loc) • 1.16 kB
text/typescript
import { AxiosError } from 'axios';
import {
useInfiniteQuery,
useQuery,
UseInfiniteQueryOptions,
UseQueryOptions,
} from 'react-query';
import {
getCharacters,
getCharacter,
CharacterData,
CharactersData,
} from '../operations/characters';
//useCharactersQuery
type CharactersQueryOptions = {
options?: Omit<
UseInfiniteQueryOptions<CharactersData, AxiosError>,
'queryKey' | 'queryFn'
>;
};
export function useCharactersQuery({
options = {
getNextPageParam: (lastPage) => {
const nextUrl = lastPage.info.next;
if (nextUrl) {
return Number(nextUrl.charAt(nextUrl.length - 1));
}
return false;
},
},
}: CharactersQueryOptions) {
return useInfiniteQuery(
['characters'],
({ pageParam = 1 }) => getCharacters({ page: pageParam }),
options,
);
}
//useCharacterQuery
type CharacterQueryOptions = {
id: number;
options?: Omit<
UseQueryOptions<CharacterData, AxiosError>,
'queryKey' | 'queryFn'
>;
};
export function useCharacterQuery({ id, options = {} }: CharacterQueryOptions) {
return useQuery(['character', [id]], () => getCharacter(id), options);
}