From 3ce5b5506e0377a8e2a6129807b0b044d87ed87c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20J=C3=A4ckle?= Date: Fri, 24 Nov 2023 10:03:48 +0100 Subject: [PATCH] improved error toast and showing errors from Ditto MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * display error toast also for message responses with "failed" response code * but still display the response as well in the messages response ace editor * still show JSON errors which are not formatted as "ditto error" (containing at least status and message) Signed-off-by: Thomas Jäckle --- ui/modules/api.ts | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/ui/modules/api.ts b/ui/modules/api.ts index f28fef4104..cd1939c5a9 100644 --- a/ui/modules/api.ts +++ b/ui/modules/api.ts @@ -307,6 +307,14 @@ export function setAuthHeader(forDevOps) { } } +function showDittoError(dittoErr, response) { + if (dittoErr.status && dittoErr.message) { + Utils.showError(dittoErr.description + `\n(${dittoErr.error})`, dittoErr.message, dittoErr.status); + } else { + Utils.showError(JSON.stringify(dittoErr), 'Error', response.status); + } +} + /** * Calls the Ditto api * @param {String} method 'POST', 'GET', 'DELETE', etc. @@ -346,12 +354,15 @@ export async function callDittoREST(method, if (returnHeaders) { return response; } else { - return response.json(); + return response.json().then((dittoErr) => { + showDittoError(dittoErr, response); + return dittoErr; + }); } } else { response.json() .then((dittoErr) => { - Utils.showError(dittoErr.description + `\n(${dittoErr.error})`, dittoErr.message, dittoErr.status); + showDittoError(dittoErr, response); }) .catch((err) => { Utils.showError('No error details from Ditto', response.statusText, response.status); @@ -423,7 +434,7 @@ export async function callConnectionsAPI(operation, successCallback, connectionI if (!response.ok) { response.json() .then((dittoErr) => { - Utils.showError(dittoErr.description, dittoErr.message, dittoErr.status); + showDittoError(dittoErr, response); }) .catch((err) => { Utils.showError('No error details from Ditto', response.statusText, response.status); @@ -436,7 +447,7 @@ export async function callConnectionsAPI(operation, successCallback, connectionI .then((data) => { if (data && data['?'] && data['?']['?'].status >= 400) { const dittoErr = data['?']['?'].payload; - Utils.showError(dittoErr.description, dittoErr.message, dittoErr.status); + showDittoError(dittoErr, response); } else { if (params.unwrapJsonPath) { params.unwrapJsonPath.split('.').forEach(function(node) {