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