import {send as notify} from './notification'; import {i18n} from "./i18n"; /** * Error handling for XHR errors * * @param jqXHR * @param textStatus * @param errorThrown * @param icon */ export const handleXhrError = (jqXHR, textStatus, errorThrown, icon = "sad") => { // return if user aborted the request if (textStatus === "abort") { return; } let body; if (jqXHR.responseJSON !== undefined && jqXHR.responseJSON["hydra:description"] !== undefined) { // response is a JSON-LD body = jqXHR.responseJSON["hydra:description"]; } else if (jqXHR.responseJSON !== undefined && jqXHR.responseJSON['detail'] !== undefined) { // response is a plain JSON body = jqXHR.responseJSON['detail']; } else { // no description available body = textStatus; } // if the server is not reachable at all if (jqXHR.status === 0) { body = i18n.t('error.connection-to-server-refused'); } notify({ "summary": i18n.t('error.summary'), "body": body, "icon": icon, "type": "danger", }); if (window._paq !== undefined) { window._paq.push(['trackEvent', 'XhrError', body]); } }; /** * Error handling for fetch errors * * @param error * @param summary * @param icon */ export const handleFetchError = async (error, summary = "", icon = "sad") => { // return if user aborted the request if (error.name === "AbortError") { return; } let body; try { await error.json().then((json) => { if (json["hydra:description"] !== undefined) { // response is a JSON-LD body = json["hydra:description"]; } else if(json['detail'] !== undefined) { // response is a plain JSON body = json['detail']; } else { // no description available body = error.statusText; } }).catch(() => { body = error.statusText !== undefined ? error.statusText : error; }); } catch (e) { // a TypeError means the connection to the server was refused most of the times if (error.name === "TypeError") { body = error.message !== "" ? error.message : i18n.t('error.connection-to-server-refused'); } } notify({ "summary": summary === "" ? i18n.t('error.summary') : summary, "body": body, "icon": icon, "type": "danger", }); if (window._paq !== undefined) { window._paq.push(['trackEvent', 'FetchError', summary === "" ? body : summary + ": " + body]); } };