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, ); }