-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.ts
69 lines (53 loc) · 1.55 KB
/
index.ts
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
import { axiosInstance, generateSort, generateFilter } from "./utils";
import { AxiosInstance } from "axios";
import queryString from "query-string";
type MethodTypes = "get" | "delete" | "head" | "options";
interface GetListParams { // Reprendre les types depuis le projet refine
resource: string;
pagination?: any;
filters?: any[];
sorters?: any[];
meta?: any;
}
export const dataProvider = (
apiUrl: string,
httpClient: AxiosInstance = axiosInstance
) => ({
getList: async ({ resource, pagination, filters, sorters, meta }:GetListParams) => {
const url = `${apiUrl}/${resource}`; //Ajouter /line par défaut ? (si aucun autre /machin)
const { current = 1, pageSize = 10, mode = "server" } = pagination ?? {};
const { headers: headersFromMeta, method } = meta ?? {};
const requestMethod = (method as MethodTypes) ?? "get";
const queryFilters = generateFilter(filters);
const query: {
page?: number;
size?: number;
sort?: string;
qs?: string;
} = {};
if (mode === "server") {
query.page = current;
query.size = pageSize;
}
const generatedSort = generateSort(sorters);
if (generatedSort) {
query.sort = generatedSort
}
if(queryFilters){
query.qs = queryFilters
}
const { data } = await httpClient[requestMethod](
`${url}?${queryString.stringify(query)}`,
{
headers: headersFromMeta,
}
);
return {
data: data.results,
total: data.total,
};
},
getApiUrl: () => {
return apiUrl;
},
});