diff --git a/_packs/controllers/cart_base_controller.js b/_packs/controllers/cart_base_controller.js index 879d30d..da43477 100644 --- a/_packs/controllers/cart_base_controller.js +++ b/_packs/controllers/cart_base_controller.js @@ -108,14 +108,14 @@ export class CartBaseController extends Controller { async handleFailure (response) { const data = { type: 'primary' } let template = 'alert' - - console.error(response.fail()) + let notify = true const site = window.site + const fail = response.fail() - switch (response.fail().name) { + switch (fail.name) { case 'MisconfigurationError': - data.content = response.fail().message + data.content = fail.message break case 'NoResponseError': data.content = site.i18n.alerts.no_response_error @@ -125,7 +125,7 @@ export class CartBaseController extends Controller { break case 'BasicSpreeError': // XXX: The order is missing, we need to start a new one - if (response.fail().serverResponse.status === 404) { + if (fail.serverResponse.status === 404) { template = 'recover_order' data.content = site.i18n.alerts.recover_order } else { @@ -134,15 +134,26 @@ export class CartBaseController extends Controller { break case 'ExpandedSpreeError': - data.content = response.fail().summary + const content = [] + // XXX: La API devuelve los mensajes de error tal cual en la + // llave `error` pero el cliente solo nos da acceso a `errors`. + for (const field of Object.keys(fail.errors)) { + if (!site.i18n.errors?.fields[field]) { + console.error('El campo no tiene traducción', field) + } + + content.push(`${site.i18n.errors?.fields[field]}: ${fail.errors[field].join(', ')}`) + } + + data.content = content.join('. ') + notify = false break default: - data.content = response.fail().message + data.content = fail.message } - console.error(response.fail().name, data.content) - + if (notify) console.error(fail.name, data.content) window.dispatchEvent(new CustomEvent('notification', { detail: { template, data } })) }