Angular: conditionally required FormControl

It makes a form field required or optional based on a dynamically evaluated condition

import { Validators } from '@angular/forms';

export function requiredIfValidator(predicate: () => boolean) {
  return formControl => {
    if (!formControl.parent) {
      return null;
    }
    if (predicate()) {
      return Validators.required(formControl);
    }
    return null;
  };
}