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
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;
|
|
|