Bom dia, segui os passos da aula 4 do curso 2 de angular, e funcionou corretamente para o formulário que adiciona um usuário. Possuindo um validador assíncrono como o mostrado no vídeo mas para não ter emails duplicados.
Porém ao criar um formulário para editar um usuário existente passando as informações do usuário antigo como base me gerou problemas.
ngOnInit(): void {
this.userForm = this.formBuilder.group({
email: [data.email,
[
Validators.required,
Validators.email
],
this.userValidatorService.checkEmailTaken(data.email)
],
fullName: [data.name,
[
Validators.required,
Validators.minLength(2),
Validators.maxLength(40)
]
],
Após colocar o 'data.email' para inicializar o formulário com o campo preenchido, gerou erro indicando que o valueChanges é null e por isso não possui a propriedade .pipe ;
Então coloquei uma verificação no valueChanges para prevenir este erro.
checkEmailTaken(editValue) {
return (control: AbstractControl) => {
if (control.valueChanges) {
return control.valueChanges
.pipe(debounceTime(300))
.pipe(switchMap((plcName) => this.plcService.getPLCByName(plcName)))
.pipe(
map((isTaken) =>
isTaken.length > 0 ? { emailTaken: true } : null
)
)
.pipe(tap((r) => console.log(r)))
.pipe(first());
}
O erro parou, porém o não consigo enviar o formulário a não ser que troque o e-mail por outro, gostaria de poder realizar a verificação em que o valor no campo e-mail passe, ou se não for duplicado, como no formulário de adição , ou se for igual ao e-mail atual que é passado pelo parâmetro 'editValue'.
Alguém poderia me ajudar com esta duvida?