#1503 - Anlegen von Kunden schlägt fehl

This commit is contained in:
Lorenz Hilpert
2021-03-08 10:48:35 +01:00
parent 42713b8aca
commit 3c6a67b532

View File

@@ -1,5 +1,5 @@
import { Component, ChangeDetectionStrategy, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { AbstractControl, FormBuilder, FormGroup, ValidationErrors, Validators } from '@angular/forms';
import { ActivatedRoute, Router } from '@angular/router';
import { ApplicationService } from '@core/application';
import { BreadcrumbService } from '@core/breadcrumb';
@@ -26,6 +26,16 @@ export class CustomerCreateOnlineComponent extends CustomerCreateComponentBase i
shippingAddressSubscription: Subscription;
organisationSubscription: Subscription;
invalidDomainEmails: string[] = [];
emailDomainErrorValidator = (control: AbstractControl): ValidationErrors => {
const controlValue: string = control.value || '';
const emailDomain = this.invalidDomainEmails.find((s) => controlValue.endsWith(s));
if (controlValue && emailDomain) {
return { emailDomain: `Die Email-Domain ${emailDomain} ist ungültig.` };
}
return null;
};
constructor(
public activatedRoute: ActivatedRoute,
public router: Router,
@@ -112,7 +122,11 @@ export class CustomerCreateOnlineComponent extends CustomerCreateComponentBase i
info: fb.control(customer?.address?.info),
}),
communicationDetails: fb.group({
email: fb.control(customer?.communicationDetails?.email, [Validators.required, validateEmail], [this.emailExistsValidator]),
email: fb.control(
customer?.communicationDetails?.email,
[Validators.required, validateEmail, this.emailDomainErrorValidator],
[this.emailExistsValidator]
),
phone: fb.control(customer?.communicationDetails?.phone, [Validators.pattern(this.PHONE_PATTERN)]),
mobile: fb.control(customer?.communicationDetails?.mobile, [Validators.pattern(this.PHONE_PATTERN)]),
}),
@@ -183,14 +197,24 @@ export class CustomerCreateOnlineComponent extends CustomerCreateComponentBase i
this.router.navigate(['/customer', response.result.id]);
}
} catch (error) {
console.error(error);
this.modal.open({
content: UiMessageModalComponent,
data: { title: 'Es ist ein Fehler aufgetreten', message: Object.values(error.error.invalidProperties).join(', ') },
});
if (error?.error?.invalidProperties?.Email) {
this.addInvalidDomain(this.control.value.communicationDetails?.email);
} else {
this.modal.open({
content: UiMessageModalComponent,
data: { title: 'Es ist ein Fehler aufgetreten', message: Object.values(error.error.invalidProperties).join(', ') },
});
}
}
this.control.enable();
this.control.reset(this.control.value);
this.control.markAllAsTouched();
this.control.updateValueAndValidity();
}
addInvalidDomain(email: string) {
const indexOfAt = email.indexOf('@');
this.invalidDomainEmails.push(email.substring(indexOfAt));
}
}