From 4adc7d83641dce2fc36a562beb093d45ae843e5f Mon Sep 17 00:00:00 2001
From: Pedro Amorim <pedro.amorim@ptfs-europe.com>
Date: Mon, 31 Jul 2023 14:57:06 +0000
Subject: [PATCH] Bug 34448: Update the way we handle response in
 http-client.js

Test plan:
Before patch:
- Visit a non-existent ID i.e. /cgi-bin/koha/erm/agreements/999
- Visit a char ID i.e. /cgi-bin/koha/erm/agreements/abc

Apply patch:
Repeat above steps.

Run cypress tests
---
 .../prog/js/vue/fetch/http-client.js          | 36 +++++++++----------
 1 file changed, 17 insertions(+), 19 deletions(-)

diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/fetch/http-client.js b/koha-tmpl/intranet-tmpl/prog/js/vue/fetch/http-client.js
index 936231c3f6..fac690fc8c 100644
--- a/koha-tmpl/intranet-tmpl/prog/js/vue/fetch/http-client.js
+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/fetch/http-client.js
@@ -21,16 +21,24 @@ class HttpClient {
             ...options,
             headers: { ...this._headers, ...headers },
         })
-            .then(response => this.checkError(response, return_response))
-            .then(
-                result => {
-                    res = result;
-                },
-                err => {
-                    error = err;
-                    setError(err.toString());
+            .then(response => {
+                if (!response.ok) {
+                    return response.text().then(text => {
+                        let json = JSON.parse(text);
+                        let message =
+                            json.error ||
+                            json.errors.map(e => e.message).join("\n") ||
+                            json;
+                        console.log("Server returned an error:");
+                        console.log(response);
+                        throw new Error(message);
+                    });
                 }
-            )
+                return return_response ? response : response.json();
+            })
+            .then(result => {
+                res = result;
+            })
             .catch(err => {
                 error = err;
                 setError(err);
@@ -143,16 +151,6 @@ class HttpClient {
             method: "PATCH",
         });
     }
-
-    checkError(response, return_response = 0) {
-        if (response.status >= 200 && response.status <= 299) {
-            return return_response ? response : response.json();
-        } else {
-            console.log("Server returned an error:");
-            console.log(response);
-            throw Error("%s (%s)".format(response.statusText, response.status));
-        }
-    }
 }
 
 export default HttpClient;
-- 
2.30.2