import { createApi } from "@reduxjs/toolkit/query/react"; import { gql } from "graphql-request"; import { graphqlRequestBaseQuery } from "@rtk-query/graphql-request-base-query"; import { CovidData } from "../types"; 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({ query: () => ({ document: gql` query GetAllData { allData { infected deceased recovered quarantined tested created_at } } `, }), transformResponse: (response: GetAllDataResponse) => response.allData, }), getData: builder.query({ 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;