diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/hooks/APIClient.ts | 17 | ||||
-rw-r--r-- | src/requests.ts | 27 | ||||
-rw-r--r-- | src/types.ts | 12 |
3 files changed, 56 insertions, 0 deletions
diff --git a/src/hooks/APIClient.ts b/src/hooks/APIClient.ts new file mode 100644 index 0000000..d3c4542 --- /dev/null +++ b/src/hooks/APIClient.ts @@ -0,0 +1,17 @@ +import useSWR, { responseInterface } from 'swr'; +import { get } from '../requests'; +import { User, Event } from '../types'; + +type Response<T> = responseInterface<T, Error>; + +const fetcher = (endpoint: string) => get(endpoint).then(response => response.data); + + +export const useUser = (id: string): Response<User> => { + return useSWR(id && `/users/${id}`, fetcher); +}; + +export const useEvents = (): Response<Event[]> => { + return useSWR(`/events`, fetcher); +}; + diff --git a/src/requests.ts b/src/requests.ts new file mode 100644 index 0000000..368ae40 --- /dev/null +++ b/src/requests.ts @@ -0,0 +1,27 @@ +import axios from 'axios'; +import _ from 'lodash'; + +const baseURL = process.env.NODE_ENV === 'production' + ? 'https://bsu-fantom.herokuapp.com' + : 'http://localhost:3030'; + +const requests = axios.create({ baseURL }); + +requests.interceptors.request.use(config => { + const token = localStorage.getItem('token'); + return _.set(config, 'headers.Authorization', token); +}); + +requests.interceptors.response.use(response => response, error => { + if (error.message === 'Request failed with status code 401' && localStorage.getItem('token')) { + localStorage.removeItem('remember'); + window.location.reload(); + } + return Promise.reject(error); +}); + +export const { + get, post, put, patch +} = requests; +export default requests; + diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..dc429a4 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,12 @@ +interface Base { + _id: string; + createdAt: string; + updatedAt: string; +} + +export interface User extends Base { + username: string; +} + +export interface Event extends Base {} + |