format multiple error messages when validating

This commit is contained in:
Kyle Spearrin 2018-08-02 08:46:08 -04:00
parent 6f64c5cb5a
commit 49d3f22704
1 changed files with 30 additions and 5 deletions

View File

@ -1,12 +1,21 @@
import { Injectable } from '@angular/core'; import {
Injectable,
SecurityContext,
} from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
import { ToasterService } from 'angular2-toaster'; import {
BodyOutputType,
Toast,
ToasterService,
} from 'angular2-toaster';
import { I18nService } from '../../abstractions/i18n.service'; import { I18nService } from '../../abstractions/i18n.service';
@Injectable() @Injectable()
export class ValidationService { export class ValidationService {
constructor(private toasterService: ToasterService, private i18nService: I18nService) { } constructor(private toasterService: ToasterService, private i18nService: I18nService,
private sanitizer: DomSanitizer) { }
showError(data: any): string[] { showError(data: any): string[] {
const defaultErrorMessage = this.i18nService.t('unexpectedError'); const defaultErrorMessage = this.i18nService.t('unexpectedError');
@ -25,13 +34,29 @@ export class ValidationService {
} }
data.validationErrors[key].forEach((item: string) => { data.validationErrors[key].forEach((item: string) => {
errors.push(item); let prefix = '';
if (key.indexOf('[') > -1 && key.indexOf(']') > -1) {
const lastSep = key.lastIndexOf('.');
prefix = key.substr(0, lastSep > -1 ? lastSep : key.length) + ': ';
}
errors.push(prefix + item);
}); });
} }
} }
if (errors.length > 0) { if (errors.length === 1) {
this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'), errors[0]); this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'), errors[0]);
} else if (errors.length > 1) {
let errorMessage = '';
errors.forEach((e) => errorMessage += ('<p>' + this.sanitizer.sanitize(SecurityContext.HTML, e) + '</p>'));
const toast: Toast = {
type: 'error',
title: this.i18nService.t('errorOccurred'),
body: errorMessage,
bodyOutputType: BodyOutputType.TrustedHtml,
timeout: 5000 * errors.length,
};
this.toasterService.popAsync(toast);
} }
return errors; return errors;