diff --git a/app/assets/javascripts/admin/addon/controllers/admin-user-index.js b/app/assets/javascripts/admin/addon/controllers/admin-user-index.js index f02085ecf2a..8de9af05d51 100644 --- a/app/assets/javascripts/admin/addon/controllers/admin-user-index.js +++ b/app/assets/javascripts/admin/addon/controllers/admin-user-index.js @@ -246,14 +246,7 @@ export default class AdminUserIndexController extends Controller.extend( queryParams: { nonce }, }); } else { - const htmlMessage = error.jqXHR?.responseJSON.html_message; - if (htmlMessage) { - this.dialog.alert({ - message: htmlSafe(error.jqXHR?.responseJSON.error), - }); - } else { - popupAjaxError(error); - } + popupAjaxError(error); } }); } diff --git a/app/assets/javascripts/discourse/app/lib/ajax-error.js b/app/assets/javascripts/discourse/app/lib/ajax-error.js index cf93622a8cb..9e15966e6dd 100644 --- a/app/assets/javascripts/discourse/app/lib/ajax-error.js +++ b/app/assets/javascripts/discourse/app/lib/ajax-error.js @@ -1,7 +1,8 @@ import I18n from "I18n"; import { getOwner } from "discourse-common/lib/get-owner"; +import { htmlSafe } from "@ember/template"; -export function extractError(error, defaultMessage) { +function extractErrorInfo(error, defaultMessage) { if (error instanceof Error) { // eslint-disable-next-line no-console console.error(error.stack); @@ -16,7 +17,9 @@ export function extractError(error, defaultMessage) { error = error.jqXHR; } - let parsedError, parsedJSON; + let html = false, + parsedError, + parsedJSON; if (error.responseJSON) { parsedJSON = error.responseJSON; @@ -33,6 +36,10 @@ export function extractError(error, defaultMessage) { } if (parsedJSON) { + if (parsedJSON.html_message) { + html = true; + } + if (parsedJSON.errors?.length > 1) { parsedError = I18n.t("multiple_errors", { errors: parsedJSON.errors.map((e, i) => `${i + 1}) ${e}`).join(" "), @@ -56,7 +63,14 @@ export function extractError(error, defaultMessage) { } } - return parsedError || defaultMessage || I18n.t("generic_error"); + return { + html, + message: parsedError || defaultMessage || I18n.t("generic_error"), + }; +} + +export function extractError(error, defaultMessage) { + return extractErrorInfo(error, defaultMessage).message; } export function throwAjaxError(undoCallback) { @@ -71,5 +85,11 @@ export function throwAjaxError(undoCallback) { export function popupAjaxError(error) { const dialog = getOwner(this).lookup("service:dialog"); - dialog.alert(extractError(error)); + const errorInfo = extractErrorInfo(error); + + if (errorInfo.html) { + dialog.alert({ message: htmlSafe(errorInfo.message) }); + } else { + dialog.alert(errorInfo.message); + } }