Centralizing data provider error management

This commit is contained in:
2025-05-06 21:19:32 +02:00
parent d48edbbf5f
commit 4f5d5425fc

View File

@@ -2,6 +2,18 @@ import type { DataProvider, HttpError } from "@refinedev/core";
const API_URL = "/api/v1";
function handleErrors(response: { status: number, statusText: string }) {
let message = response.statusText
if (response.status == 405) {
message = "Resource is not ready";
}
const error: HttpError = {
message: message,
statusCode: response.status,
};
return Promise.reject(error);
}
const dataProvider: DataProvider = {
getOne: async ({ resource, id, meta }) => {
if (id === "") {
@@ -9,14 +21,7 @@ const dataProvider: DataProvider = {
}
const response = await fetch(`${API_URL}/${resource}/${id}`);
if (response.status < 200 || response.status > 299) {
if (response.status == 405) {
const error: HttpError = {
message: "Resource is not ready",
statusCode: 405,
};
return Promise.reject(error);
}
throw response;
return handleErrors(response);
}
const data = await response.json();
@@ -35,17 +40,10 @@ const dataProvider: DataProvider = {
});
if (response.status < 200 || response.status > 299) {
if (response.status == 405) {
const error: HttpError = {
message: "Resource is not ready",
statusCode: 405,
};
return Promise.reject(error);
}
throw response;
return handleErrors(response);
}
const data = await response.json();
const data = await response.json();
return { data };
},
getList: async ({ resource, pagination, filters, sorters, meta }) => {
@@ -72,14 +70,7 @@ const dataProvider: DataProvider = {
const response = await fetch(`${API_URL}/${resource}/?${params.toString()}`);
if (response.status < 200 || response.status > 299) {
if (response.status == 405) {
const error: HttpError = {
message: "Resource is not ready",
statusCode: 405,
};
return Promise.reject(error);
}
throw response;
return handleErrors(response);
}
const data = await response.json();
@@ -105,18 +96,10 @@ const dataProvider: DataProvider = {
});
if (response.status < 200 || response.status > 299) {
if (response.status == 405) {
const error: HttpError = {
message: "Resource is not ready",
statusCode: 405,
};
return Promise.reject(error);
}
throw response;
return handleErrors(response);
}
const data = await response.json();
return { data };
},
deleteOne: async ({ resource, id, variables, meta }) => {
@@ -125,21 +108,11 @@ const dataProvider: DataProvider = {
});
if (response.status < 200 || response.status > 299) {
if (response.status == 405) {
const error: HttpError = {
message: "Resource is not ready",
statusCode: 405,
};
return Promise.reject(error);
}
throw response;
return handleErrors(response);
}
const data = await response.json();
return {
data
};
return { data };
},
getApiUrl: () => API_URL,
// Optional methods: