From 2c08542529a5921acada46d3707bedb1274bcbd7 Mon Sep 17 00:00:00 2001 From: nathan Date: Tue, 12 Jul 2022 16:40:38 -0600 Subject: [PATCH] Better handling of select validation --- api/js/etemplate/Et2Select/Et2Select.ts | 30 +++++++++++++++++-------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/api/js/etemplate/Et2Select/Et2Select.ts b/api/js/etemplate/Et2Select/Et2Select.ts index a428ccb20c..c63401ee06 100644 --- a/api/js/etemplate/Et2Select/Et2Select.ts +++ b/api/js/etemplate/Et2Select/Et2Select.ts @@ -449,28 +449,38 @@ export class Et2Select extends Et2WithSearchMixin(Et2WidgetWithSelect) fieldName = await validator.config.fieldName; } // @ts-ignore [allow-protected] - const message = await validator._getMessage({ + return validator._getMessage({ modelValue: value, formControl: this, fieldName, + }).then((message) => + { + feedbackData.push({message, type: validator.type, validator}); }); - feedbackData.push({message, type: validator.type, validator}); }.bind(this); - const resultPromises = validators.map(async validator => + let resultPromises = []; + validators.map(async validator => { let values = this.value; - if (!Array.isArray(values)) values = [values]; - if (!values.length) values = ['']; // so required validation works - values.forEach(async value => { + if(!Array.isArray(values)) + { + values = [values]; + } + if(!values.length) + { + values = ['']; + } // so required validation works + values.forEach(async value => + { const result = validator.execute(value, validator.param, {node: this}); if(result === true) { - await doValidate(validator, value); + resultPromises.push(doValidate(validator, value)); } - else if (result !== false && typeof result.then === 'function') + else if(result !== false && typeof result.then === 'function') { result.then(doValidate(validator, value)); - return result; + resultPromises.push(result); } }); }); @@ -482,6 +492,8 @@ export class Et2Select extends Et2WithSearchMixin(Et2WidgetWithSelect) feedback.feedbackData = feedbackData; feedback.slot = "help-text"; this.append(feedback); + // Not always visible? + (this.shadowRoot.querySelector("#help-text")).style.display = "initial"; } }