From b22d093e5b577ae079fbfc31102adfe9f799699b Mon Sep 17 00:00:00 2001 From: tschumpr Date: Thu, 12 Sep 2024 16:45:34 +0200 Subject: [PATCH 1/3] Only parse json if response content type is set --- src/Geopilot.Frontend/src/api/apiContext.tsx | 2 +- .../src/pages/admin/deliveryOverview.tsx | 29 ++++++++++++------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/Geopilot.Frontend/src/api/apiContext.tsx b/src/Geopilot.Frontend/src/api/apiContext.tsx index 05d158ae..a32639fc 100644 --- a/src/Geopilot.Frontend/src/api/apiContext.tsx +++ b/src/Geopilot.Frontend/src/api/apiContext.tsx @@ -19,7 +19,7 @@ export const ApiProvider: FC = ({ children }) => { if (response.ok) { const responseContentType = response.headers.get("content-type"); - if (responseContentType?.indexOf("application/json") !== -1) { + if (responseContentType !== null && responseContentType?.indexOf("application/json") !== -1) { return (await response.json()) as T; } else if (!options.responseType || responseContentType?.includes(options.responseType)) { return (await response.text()) as T; diff --git a/src/Geopilot.Frontend/src/pages/admin/deliveryOverview.tsx b/src/Geopilot.Frontend/src/pages/admin/deliveryOverview.tsx index 393e9a00..4209c30d 100644 --- a/src/Geopilot.Frontend/src/pages/admin/deliveryOverview.tsx +++ b/src/Geopilot.Frontend/src/pages/admin/deliveryOverview.tsx @@ -74,19 +74,26 @@ export const DeliveryOverview = () => { // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - async function handleDelete() { + function handleDelete() { + let completedCount = 0; for (const row of selectedRows) { - fetchApi("/api/v1/delivery/" + row, { method: "DELETE" }).catch((error: ApiError) => { - if (error.status === 404) { - showAlert(t("deliveryOverviewDeleteIdNotExistError", { id: row }), "error"); - } else if (error.status === 500) { - showAlert(t("deliveryOverviewDeleteIdError", { id: row }), "error"); - } else { - showAlert(t("deliveryOverviewDeleteError", { error: error }), "error"); - } - }); + fetchApi("/api/v1/delivery/" + row, { method: "DELETE" }) + .then(() => { + completedCount++; + if (completedCount === selectedRows.length) { + loadDeliveries(); + } + }) + .catch((error: ApiError) => { + if (error.status === 404) { + showAlert(t("deliveryOverviewDeleteIdNotExistError", { id: row }), "error"); + } else if (error.status === 500) { + showAlert(t("deliveryOverviewDeleteIdError", { id: row }), "error"); + } else { + showAlert(t("deliveryOverviewDeleteError", { error: error }), "error"); + } + }); } - await loadDeliveries(); } return ( From e0c27a02b2d8c5bfad5b8fb425c744083e96c7a0 Mon Sep 17 00:00:00 2001 From: tschumpr Date: Thu, 12 Sep 2024 17:54:05 +0200 Subject: [PATCH 2/3] Use promise instead of count --- .../src/pages/admin/deliveryOverview.tsx | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/Geopilot.Frontend/src/pages/admin/deliveryOverview.tsx b/src/Geopilot.Frontend/src/pages/admin/deliveryOverview.tsx index 4209c30d..a788aed1 100644 --- a/src/Geopilot.Frontend/src/pages/admin/deliveryOverview.tsx +++ b/src/Geopilot.Frontend/src/pages/admin/deliveryOverview.tsx @@ -75,15 +75,9 @@ export const DeliveryOverview = () => { }, []); function handleDelete() { - let completedCount = 0; - for (const row of selectedRows) { + const deletePromises = selectedRows.map(row => fetchApi("/api/v1/delivery/" + row, { method: "DELETE" }) - .then(() => { - completedCount++; - if (completedCount === selectedRows.length) { - loadDeliveries(); - } - }) + .then(() => null) .catch((error: ApiError) => { if (error.status === 404) { showAlert(t("deliveryOverviewDeleteIdNotExistError", { id: row }), "error"); @@ -92,8 +86,12 @@ export const DeliveryOverview = () => { } else { showAlert(t("deliveryOverviewDeleteError", { error: error }), "error"); } - }); - } + }), + ); + + Promise.all(deletePromises).then(() => { + loadDeliveries(); + }); } return ( From 714229ef48b82236e14519c522a3940ae05a0f99 Mon Sep 17 00:00:00 2001 From: tschumpr Date: Fri, 13 Sep 2024 10:14:00 +0200 Subject: [PATCH 3/3] Simplify code --- .../src/pages/admin/deliveryOverview.tsx | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/Geopilot.Frontend/src/pages/admin/deliveryOverview.tsx b/src/Geopilot.Frontend/src/pages/admin/deliveryOverview.tsx index a788aed1..0e447405 100644 --- a/src/Geopilot.Frontend/src/pages/admin/deliveryOverview.tsx +++ b/src/Geopilot.Frontend/src/pages/admin/deliveryOverview.tsx @@ -76,17 +76,15 @@ export const DeliveryOverview = () => { function handleDelete() { const deletePromises = selectedRows.map(row => - fetchApi("/api/v1/delivery/" + row, { method: "DELETE" }) - .then(() => null) - .catch((error: ApiError) => { - if (error.status === 404) { - showAlert(t("deliveryOverviewDeleteIdNotExistError", { id: row }), "error"); - } else if (error.status === 500) { - showAlert(t("deliveryOverviewDeleteIdError", { id: row }), "error"); - } else { - showAlert(t("deliveryOverviewDeleteError", { error: error }), "error"); - } - }), + fetchApi("/api/v1/delivery/" + row, { method: "DELETE" }).catch((error: ApiError) => { + if (error.status === 404) { + showAlert(t("deliveryOverviewDeleteIdNotExistError", { id: row }), "error"); + } else if (error.status === 500) { + showAlert(t("deliveryOverviewDeleteIdError", { id: row }), "error"); + } else { + showAlert(t("deliveryOverviewDeleteError", { error: error }), "error"); + } + }), ); Promise.all(deletePromises).then(() => {