-
Notifications
You must be signed in to change notification settings - Fork 2
/
axiosBaseQuery.js
40 lines (34 loc) · 1.26 KB
/
axiosBaseQuery.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import axios from 'axios';
import { toast } from 'react-hot-toast';
import { store } from '../redux/store';
const axiosBaseQuery =
({ baseUrl } = { baseUrl: '' }) =>
async ({ url, method, data }) => {
const persistedToken = store.getState().auth.token;
if (url === '/users/current') {
axios.defaults.headers.common.Authorization = `Bearer ${persistedToken}`;
}
try {
const result = await axios({ url: baseUrl + url, method, data });
if (url === '/users/logout') {
axios.defaults.headers.common.Authorization = '';
}
if (url === '/users/current') {
axios.defaults.headers.common.Authorization = `Bearer ${persistedToken}`;
} else {
axios.defaults.headers.common.Authorization = `Bearer ${persistedToken}`;
}
return { data: result.data };
} catch (err) {
let error = { status: err.response?.status, data: err.response?.data };
if (error.status === 400) {
toast.error('The name is already in use 🤷♂️');
} else if (error.status === 401) {
toast.error('Please, authenticate first! ✌😎');
} else {
toast.error('Somethings wrong! Please try again later! 😢');
}
return err;
}
};
export default axiosBaseQuery;