From 0bef549eb68eb4a09258746bde2874a06e69df6d Mon Sep 17 00:00:00 2001 From: Zak Henry Date: Thu, 18 Mar 2021 09:24:02 +1300 Subject: [PATCH] fix(Root form emission): It is required to double check validation of forms during sub form population phase --- projects/ngx-sub-form/src/lib/ngx-sub-form.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/projects/ngx-sub-form/src/lib/ngx-sub-form.ts b/projects/ngx-sub-form/src/lib/ngx-sub-form.ts index 6954498c..aaee92b0 100644 --- a/projects/ngx-sub-form/src/lib/ngx-sub-form.ts +++ b/projects/ngx-sub-form/src/lib/ngx-sub-form.ts @@ -155,10 +155,18 @@ export function createForm( ) : formGroup.valueChanges; + // it might be surprising to see formGroup.valid being checked twice + // here, however this is intentional. The delay(0) allows any sub form + // components to populate values into the form, and it is possible for + // the form to be invalid after this process. In which case we suppress + // outputting an invalid value, and wait for the user to make the value + // become valid. return formValues$.pipe( filter(() => formGroup.valid), delay(0), - filter(formValue => (options.outputFilterPredicate ?? isEqual)(transformedValue, formValue)), + filter( + formValue => formGroup.valid && (options.outputFilterPredicate ?? isEqual)(transformedValue, formValue), + ), options.handleEmissionRate ?? identity, ); }