From 9eb85315ff71485981537c92307a41cdf5cef991 Mon Sep 17 00:00:00 2001 From: Zak Henry Date: Thu, 18 Mar 2021 11:57:27 +1300 Subject: [PATCH] fix(Root form emission): Fix mistaken missed negation in previous refactor. Refactor to make the clever one liner actually readable so this kind of mistake can't happen again --- projects/ngx-sub-form/src/lib/ngx-sub-form.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) 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 aaee92b0..b610c3e2 100644 --- a/projects/ngx-sub-form/src/lib/ngx-sub-form.ts +++ b/projects/ngx-sub-form/src/lib/ngx-sub-form.ts @@ -155,7 +155,7 @@ export function createForm( ) : formGroup.valueChanges; - // it might be surprising to see formGroup.valid being checked twice + // it might be surprising to see formGroup validity 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 @@ -164,9 +164,17 @@ export function createForm( return formValues$.pipe( filter(() => formGroup.valid), delay(0), - filter( - formValue => formGroup.valid && (options.outputFilterPredicate ?? isEqual)(transformedValue, formValue), - ), + filter(formValue => { + if (formGroup.invalid) { + return false; + } + + if (options.outputFilterPredicate) { + return options.outputFilterPredicate(transformedValue, formValue); + } + + return !isEqual(transformedValue, formValue); + }), options.handleEmissionRate ?? identity, ); }