110 lines
3.0 KiB
TypeScript
110 lines
3.0 KiB
TypeScript
import type { DataProvider } from "@refinedev/core";
|
|
|
|
//const API_URL = "https://api.fake-rest.refine.dev";
|
|
const API_URL = "http://localhost:8000";
|
|
|
|
const fetcher = async (url: string, options?: RequestInit) => {
|
|
return fetch(url, {
|
|
...options,
|
|
headers: {
|
|
...options?.headers,
|
|
Authorization: "Bearer " + localStorage.getItem("access_token"),
|
|
},
|
|
});
|
|
};
|
|
|
|
export const dataProvider: DataProvider = {
|
|
getOne: async ({ resource, id, meta }) => {
|
|
const response = await fetcher(`${API_URL}/${resource}/${id}`);
|
|
|
|
if (response.status < 200 || response.status > 299) throw response;
|
|
|
|
const data = await response.json();
|
|
|
|
return {
|
|
data
|
|
};
|
|
},
|
|
update: async ({ resource, id, variables }) => {
|
|
const response = await fetcher(`${API_URL}/${resource}/${id}`, {
|
|
method: "PUT",
|
|
body: JSON.stringify(variables),
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
},
|
|
});
|
|
|
|
if (response.status < 200 || response.status > 299) throw response;
|
|
|
|
const data = await response.json();
|
|
|
|
return { data };
|
|
},
|
|
getList: async ({ resource, pagination, filters, sorters, meta }) => {
|
|
const params = new URLSearchParams();
|
|
|
|
if (pagination) {
|
|
params.append("page", String(pagination.current));
|
|
params.append("size", String(pagination.pageSize));
|
|
}
|
|
|
|
if (sorters && sorters.length > 0) {
|
|
params.append("_sort", sorters.map((sorter) => sorter.field).join(","));
|
|
params.append("_order", sorters.map((sorter) => sorter.order).join(","));
|
|
}
|
|
|
|
if (filters && filters.length > 0) {
|
|
filters.forEach((filter) => {
|
|
if ("field" in filter && filter.value.length > 0 && filter.operator === "contains") {
|
|
params.append(filter.field + "__like", "%" + filter.value + "%");
|
|
}
|
|
});
|
|
}
|
|
|
|
const response = await fetcher(`${API_URL}/${resource}?${params.toString()}`);
|
|
|
|
if (response.status < 200 || response.status > 299) throw response;
|
|
|
|
const data = await response.json();
|
|
|
|
return {
|
|
data: data.items,
|
|
total: data.total, // We'll cover this in the next steps.
|
|
};
|
|
},
|
|
create: async ({ resource, variables }) => {
|
|
const response = await fetcher(`${API_URL}/${resource}`, {
|
|
method: "POST",
|
|
body: JSON.stringify(variables),
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
},
|
|
});
|
|
|
|
if (response.status < 200 || response.status > 299) throw response;
|
|
|
|
const data = await response.json();
|
|
|
|
return { data };
|
|
},
|
|
deleteOne: async ({ resource, id, variables, meta }) => {
|
|
const response = await fetcher(`${API_URL}/${resource}/${id}`,{
|
|
method: "DELETE",
|
|
});
|
|
|
|
if (response.status < 200 || response.status > 299) throw response;
|
|
|
|
const data = await response.json();
|
|
|
|
return {
|
|
data
|
|
};
|
|
},
|
|
getApiUrl: () => API_URL,
|
|
// Optional methods:
|
|
// getMany: () => { /* ... */ },
|
|
// createMany: () => { /* ... */ },
|
|
// deleteMany: () => { /* ... */ },
|
|
// updateMany: () => { /* ... */ },
|
|
// custom: () => { /* ... */ },
|
|
}; |