-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapiSlice.js
116 lines (113 loc) · 3.73 KB
/
apiSlice.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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import {createApi, fetchBaseQuery} from '@reduxjs/toolkit/query/react';
import { Cookies } from 'react-cookie';
const cookies = new Cookies();
const {headers, credentials} = {
headers: {'Content-Type': 'application/json', "X-CSRFToken": cookies.get('csrftoken')},
credentials: "same-origin"
};
/**
* Конфигурация асинхронных запросов к API сайта для получения данных с сервера
* и преобразовывания этих данных для рендеринга компонентов, использующих полученные данные.
*/
export const apiSlice = createApi({
reducerPath: 'api',
baseQuery: fetchBaseQuery({baseUrl: 'https://mybibliography.ru/api/'}),
tagTypes: ['Sources', 'List', 'User', 'Statistics'],
endpoints: builder => ({
getSources: builder.query({
query: () => 'sources/',
providesTags: ['Sources']
}),
getSource: builder.query({
query: (source) => ({
url: `sources/?q=${source}`,
headers,
credentials
}),
transformResponse: (source) => ({
sourceTitle: source.source_title,
sourceName: source.source_name,
sourceHaveAuthors: source.fields.some((field) => field.name === 'third_surname'),
sourceHaveOptionals: source.fields.some((field) => field.isRequired === 'optional'),
sourceFields: source.fields
})
}),
postSource: builder.mutation({
query: ({type, data}) => ({
url: `sources/?q=${type}`,
method: 'POST',
headers,
credentials,
body: data
}),
invalidatesTags: ['List']
}),
getList: builder.query({
query: () => ({
url: `list/`,
headers,
credentials
}),
providesTags: ['List']
}),
postList: builder.mutation({
query: () => ({
url: 'list/',
method: 'POST',
headers,
credentials
}),
invalidatesTags: ['List']
}),
getSearchResults: builder.query({
query: ({query, offset}) => ({
url: `search/?q=${query}&offset=${offset}`,
headers,
credentials
}),
}),
getUserInfo: builder.query({
query: () => ({
url: 'user/',
headers,
credentials
}),
providesTags: ['User', 'List', 'Order']
}),
getOrder: builder.query({
query: (id) => ({
url: `order/?q=${id}`,
headers,
credentials
}),
providesTags: ['Order']
}),
postOrder: builder.mutation({
query: (data) => ({
url: 'order/',
method: 'POST',
headers,
credentials,
body: data
}),
transformErrorResponse: (response, meta, arg) => response.originalStatus,
invalidatesTags: ['Order']
}),
getStatistics: builder.query({
query: () => `statistics/`,
providesTags: ['Statistics']
}),
})
});
export const {
useGetSourcesQuery,
useGetSourceQuery,
usePostSourceMutation,
useGetListQuery,
usePostListMutation,
useLazyGetSearchResultsQuery,
useGetUserInfoQuery,
useLazyGetOrderQuery,
usePostOrderMutation,
useGetStatisticsQuery
} = apiSlice;