Don Shrout
Don Shrout

Reputation: 1005

How to filter an observable against object properties

I have an observable, fields$: Observable<Field[]>. I need to look at the required and result properties of each field to determine if all required fields have been populated.

I have another observable, missingRequiredResults$: Observable<boolean>, that I'm using to enable/disable a button via <button type="button" [disabled]="(missingRequiredResults$ | async)">

Here is the method I'm using to set missingRequiredResults$:

private validateRequiredResults() {
  this.missingRequiredResults$ = this.fields$.pipe(
    map(fields => 
      fields.filter(field => {
          field.required == true && (field.result == null || field.result == '')
        }).length != 0
    )
  );
}

No matter what I do, missingRequiredResults$ holds a value of false.

What am I doing wrong?

Upvotes: 0

Views: 514

Answers (1)

Train
Train

Reputation: 3496

You're code is missing the return statement in the curly brackets

private validateRequiredResults() {
  this.missingRequiredResults$ = this.fields$.pipe(
    map(fields => 
      fields.filter(field => {
          return field.required == true && (field.result == null || field.result == '') //add the return statement here
        }).length != 0
    )
  );
}

As you pointed out, you removed the curly brackets and it worked.

Upvotes: 1

Related Questions