6 changed files with 119 additions and 2 deletions
@ -0,0 +1,5 @@ |
|||
import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'; |
|||
import type { RootState, AppDispatch } from './store/store'; |
|||
|
|||
export const useAppDispatch = () => useDispatch<AppDispatch>(); |
|||
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector; |
|||
@ -0,0 +1,92 @@ |
|||
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; |
|||
@ -0,0 +1,15 @@ |
|||
import { configureStore } from '@reduxjs/toolkit'; |
|||
import { api } from '../services/covidDataApi'; |
|||
|
|||
const store = configureStore({ |
|||
reducer: { |
|||
[api.reducerPath]: api.reducer |
|||
}, |
|||
middleware: (getDefaultMiddleware) => |
|||
getDefaultMiddleware().concat(api.middleware), |
|||
}); |
|||
|
|||
export default store; |
|||
|
|||
export type RootState = ReturnType<typeof store.getState>; |
|||
export type AppDispatch = typeof store.dispatch; |
|||
Loading…
Reference in new issue