import validation explanations

This commit is contained in:
Yuri Kuznetsov
2023-01-06 11:01:34 +02:00
parent e9f5d99e9b
commit c149aa8560
4 changed files with 83 additions and 4 deletions
@@ -856,5 +856,18 @@
"noEmptyString": "No Empty String",
"max": "Max Value",
"min": "Min Value"
},
"fieldValidationExplanations": {
"url_valid": "Invalid URL value.",
"currency_valid": "Invalid amount value.",
"currency_validCurrency": "The currency code value is invalid or not allowed.",
"varchar_pattern": "Likely, the value contains not allowed characters.",
"email_emailAddress": "Invalid email address value.",
"phone_phoneNumber": "Invalid phone number value.",
"dateTimeOptional_valid": "Invalid date-time value.",
"dateTime_valid": "Invalid date-time value.",
"date_valid": "Invalid date value.",
"enum_valid": "Invalid enum value. The value must be one of defined enum options. An empty value is allowed only if the field has an empty option.",
"multiEnum_valid": "Invalid multi-enum value. Values must be one of defined field options."
}
}
@@ -7,7 +7,8 @@
"exportRowIndex": "Export Row Index",
"lineNumber": "Line Number",
"exportLineNumber": "Export Line Number",
"row": "Row"
"row": "Row",
"entityType": "Entity Type"
},
"options": {
"type": {
@@ -4,6 +4,11 @@
"type": "link",
"readOnly": true
},
"entityType": {
"type": "foreign",
"link": "import",
"field": "entityType"
},
"rowIndex": {
"type": "int",
"readOnly": true,
@@ -37,7 +37,7 @@ define('views/import-error/fields/validation-failures', ['views/fields/base'], (
return Dep.extend(/** @lends module:views/import-error/fields/validation-failures.Class# */{
detailTemplateContent: `
{{#if value}}
{{#if itemList.length}}
<table class="table">
<thead>
<tr>
@@ -46,10 +46,20 @@ define('views/import-error/fields/validation-failures', ['views/fields/base'], (
</tr>
</thead>
<tbody>
{{#each value}}
{{#each itemList}}
<tr>
<td>{{translate field category='fields' scope=entityType}}</td>
<td>{{translate type category='fieldValidations'}}</td>
<td>
{{translate type category='fieldValidations'}}
{{#if popoverText}}
<a
role="button"
tabindex="-1"
class="text-muted popover-anchor"
data-text="{{popoverText}}"
><span class="fas fa-info-circle"></span></a>
{{/if}}
</td>
</tr>
{{/each}}
</tbody>
@@ -58,5 +68,55 @@ define('views/import-error/fields/validation-failures', ['views/fields/base'], (
<span class="none-value">{{translate 'None'}}</span>
{{/if}}
`,
data: function () {
let data = Dep.prototype.data.call(this);
data.itemList = this.getDataList();
return data;
},
afterRenderDetail: function () {
this.$el.find('.popover-anchor').each((i, el) => {
let text = this.getHelper().transformMarkdownText(el.dataset.text);
Espo.Ui.popover($(el), {content: text}, this);
});
},
/**
* @return {Object[]}
*/
getDataList: function () {
let itemList = Espo.Utils.cloneDeep(this.model.get(this.name)) || [];
let entityType = this.model.get('entityType');
if (Array.isArray(itemList)) {
itemList.forEach(item => {
/** @var {module:field-manager.Class} */
let fieldManager = this.getFieldManager();
/** @var {module:language.Class} */
let language = this.getLanguage();
let fieldType = fieldManager.getEntityTypeFieldParam(entityType, item.field, 'type');
if (!fieldType) {
return;
}
let key = fieldType + '_' + item.type;
if (!language.has(key, 'fieldValidationExplanations', 'Global')) {
return;
}
item.popoverText = language.translate(key, 'fieldValidationExplanations');
});
}
return itemList;
},
});
});