Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 1x 66x 66x 51x 51x 8x 43x 66x | import type { Signal } from '@angular/core';
import { toSignal } from '@angular/core/rxjs-interop';
import type { FormControl, FormControlStatus, FormGroup } from '@angular/forms';
import { debounceTime, map } from 'rxjs';
import type { Observable } from 'rxjs';
import { FORMS } from '~/app/shared/constants';
import { ERROR_NAME } from './confirm-match.validator';
/**
* Only display the confirmmatch error if the two controls are valid, and the form has the error.
*/
export const confirmMatchFormErrors = (form: FormGroup, control1: FormControl, control2: FormControl): Signal<boolean> => {
const initialValue: boolean = form.invalid && control1.valid && control2.valid && form.errors?.[ERROR_NAME] != undefined;
const formStatus$: Observable<boolean> = form.statusChanges.pipe(
// Wait for input to stop before displaying error messages
debounceTime(FORMS.inputDebounce),
map((status: FormControlStatus): boolean => {
const { errors } = form;
if (status === 'INVALID' && control1.valid && control2.valid && errors) {
return errors[ERROR_NAME] != undefined;
}
return false;
}),
);
return toSignal(formStatus$, { initialValue });
};
|