cartodb/lib/assets/javascripts/builder/editor/layers/notification-error-message-handler.js

86 lines
2.7 KiB
JavaScript
Raw Normal View History

2020-06-15 10:58:47 +08:00
var _ = require('underscore');
var Messages = require('./notification-error-messages.json');
var Utils = require('builder/helpers/utils');
var CONTACT_LINK_TEMPLATE;
var SAMPLE_LINK_TEMPLATE;
var getBodyAttributes = function (errorType, layerDefModel) {
var bodyAttrs = {};
if (errorType === 'timeout') {
// if layerDefModel is defined, hen use html code
// this happens for notification, but not for tooltip errors where we don't want html
if (layerDefModel != null) {
CONTACT_LINK_TEMPLATE = _.template("<a href='mailto:<%- mail %>'><%- contact %></a>")({
contact: _t('notifications.analysis.contact.label'),
mail: _t('notifications.analysis.contact.mail')
});
SAMPLE_LINK_TEMPLATE = _.template("<button class='js-add-analysis u-actionTextColor' data-layer-id='<%- layerId %>'><%- sample %></button>")({
sample: _t('notifications.analysis.sample'),
layerId: layerDefModel && layerDefModel.get('id') || ''
});
} else {
CONTACT_LINK_TEMPLATE = _t('notifications.analysis.contact.label');
SAMPLE_LINK_TEMPLATE = _t('notifications.analysis.sample');
}
bodyAttrs = {
sample: SAMPLE_LINK_TEMPLATE,
contact: CONTACT_LINK_TEMPLATE
};
}
return bodyAttrs;
};
module.exports = {
extractErrorFromAnalysisNode: function (analysisNode, layerDefModel) {
var errorType = 'error';
var message = _t('notifications.analysis.failed', {
nodeId: analysisNode.get('id').toUpperCase()
});
var error = analysisNode.get('error');
if ((error && error.message) || analysisNode.get('error_message')) {
var errorMessage = (error && error.message) || analysisNode.get('error_message');
var extractedError = this.extractError(errorMessage, layerDefModel);
message += ': ' + extractedError.message;
errorType = extractedError.type;
}
return { message: message, type: errorType };
},
extractError: function (errorMessage, layerDefModel) {
var errorType;
var matched = false;
var message;
Messages.messages.some(function (m) {
var errorMessageType = m.replaceWith;
var regExp = new RegExp(m.match);
var match = errorMessage.match(regExp);
var body;
errorMessage = Utils.removeNewLines(errorMessage);
if (match) {
if (errorMessageType) {
body = _t('notifications.analysis.errors.' + errorMessageType, getBodyAttributes(errorMessageType, layerDefModel));
message = errorMessage.replace(regExp, body);
} else {
message = match[1];
}
matched = true;
errorType = m.errorType;
}
return matched;
});
return { message: message || errorMessage, type: errorType || 'error' };
}
};