You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

92 lines
2.6 KiB

import { createApi } from "@reduxjs/toolkit/query/react";
import { gql } from "graphql-request";
import { graphqlRequestBaseQuery } from "@rtk-query/graphql-request-base-query";
export interface CovidData {
infected: number;
deceased: number;
recovered: number;
quarantined: number;
tested: number;
created_at: Date;
}
export interface GetAllDataResponse {
allData: CovidData[];
}
export interface GetDataByDateResponse {
searchData: CovidData[];
}
export interface GetDataResponse {
data: CovidData;
}
export const api = createApi({
baseQuery: graphqlRequestBaseQuery({
url: "/graphql",
}),
endpoints: (builder) => ({
getAllData: builder.query<CovidData[], {}>({
query: () => ({
document: gql`
query GetAllData {
allData {
infected
deceased
recovered
quarantined
tested
created_at
}
}
`,
}),
transformResponse: (response: GetAllDataResponse) =>
response.allData,
}),
getData: builder.query<CovidData, string>({
query: (id) => ({
document: gql`
query GetData($id: ID!) {
data(id: ${id}) {
infected
deceased
recovered
quarantined
tested
created_at
}
}
`,
}),
transformResponse: (response: GetDataResponse) => response.data,
}),
getDataByDate: builder.query<
CovidData[],
{ beginDate: Date; endDate?: Date }
>({
query: ({ beginDate, endDate }) => ({
document: gql`
query GetDataByDate($beginDate: Date!, $endDate: Date) {
searchData(beginDate: $beginDate, endDate: $endDate) {
infected
deceased
recovered
quarantined
tested
created_at
}
}
`,
variables: { beginDate, endDate },
}),
transformResponse: (response: GetDataByDateResponse) =>
response.searchData,
}),
}),
});
export const { useGetAllDataQuery, useGetDataQuery, useGetDataByDateQuery } =
api;