pokertk/src/features/Pokedex/pokedexApi.ts

68 lines
1.9 KiB
TypeScript
Raw Normal View History

2023-03-27 23:18:34 +11:00
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';
import {
pokeApiAllPagesCustomBaseQuery,
pokeApiFullListFetchArgs,
} from './paginationBaseQuery';
2023-03-27 23:18:34 +11:00
import {
PokemonListResponseData,
PokemonResponseData,
RegionListResponseData,
RegionResponseData,
TypeListResponseData,
TypeResponseData,
} from './types/api';
const pokeApiBaseQuery = async (
args: pokeApiFullListFetchArgs,
api: any,
extra: any,
) => {
const baseUrl = 'https://pokeapi.co/api/v2/';
if (args.fetchAllPages) {
return pokeApiAllPagesCustomBaseQuery(args, api, extra, baseUrl);
} else {
return fetchBaseQuery({ baseUrl })(args, api, extra);
}
};
export const pokedexApi = createApi({
reducerPath: 'pokedexApi',
baseQuery: pokeApiBaseQuery,
endpoints: builder => ({
2023-03-27 23:18:34 +11:00
getPokemonList: builder.query<PokemonListResponseData, void>({
query: () => ({ url: `pokemon`, fetchAllPages: true }),
}),
2023-03-27 23:18:34 +11:00
getRegionList: builder.query<RegionListResponseData, void>({
query: () => ({ url: 'region', fetchAllPages: true }),
}),
2023-03-27 23:18:34 +11:00
getTypeList: builder.query<TypeListResponseData, void>({
query: () => ({ url: 'type', fetchAllPages: true }),
2023-03-27 23:18:34 +11:00
transformResponse: (response: RegionListResponseData) => {
return {
...response,
results: [{ name: 'All Types', url: '' }, ...response.results],
};
},
}),
2023-03-27 23:18:34 +11:00
getPokemon: builder.query<PokemonResponseData, number | string>({
query: IdOrName => ({ url: `pokemon/${IdOrName}` }),
}),
2023-03-27 23:18:34 +11:00
getRegion: builder.query<RegionResponseData, number | string>({
query: IdOrName => ({ url: `region/${IdOrName}` }),
}),
2023-03-27 23:18:34 +11:00
getType: builder.query<TypeResponseData, number | string>({
query: IdOrName => ({ url: `type/${IdOrName}` }),
}),
}),
});
export const {
useGetPokemonListQuery,
useGetRegionListQuery,
useGetTypeListQuery,
useGetPokemonQuery,
useGetRegionQuery,
useGetTypeQuery,
} = pokedexApi;