Consideraciones iniciales

Sede: Entidad principal del formulario.

Domicilio: Entidad opcional.

Modificar sede-admin.component

* Definir campo addDomicilio

El campo addDomicilio es utilizado para definir la opcionalidad. Se define en el formulario de administración, permitiendo una mayor reutilización del fieldset. Su valor se asigna al input “enable”.

//CONSTRUCTOR
this.adminForm.addControl('addDomicilio', new FormControl(true)); //debe definirse inicialmente en true para dar tiempo a que los fieldset se inicialicen.
<app-sede-fieldset [adminForm]="adminForm" [sync]="sync.sede" [row]="data.sede"></app-sede-fieldset>

<div class="form-group form-check">
  <label class="form-check-label">
    <input class="form-check-input" type="checkbox" formControlName="addDomicilio"><span class="font-weight-bold"> Domicilio</span>
  </label>
</div>

<app-domicilio-fieldset [adminForm]="adminForm" [sync]="sync.domicilio " [row]="data.domicilio" [enable]="adminForm.get('addDomicilio').value" ></app-domicilio-fieldset>

* Redefinir atributo sync, atributo data, método getData(), método onSubmit()

  sync: any = {sede:{"domicilio":false}, domicilio:{}};

  data: any = {sede:null, domicilio:null}

  getData() {
    this.dd.getOrNull(this.entity, this.id).subscribe(
      sede => {
        this.adminForm.enable();
        this.data.sede = sede;

        if(sede && sede.domicilio){
          this.adminForm.controls['addDomicilio'].setValue(true);

          this.dd.getOrNull("domicilio", sede.domicilio).subscribe(
            domicilio => { this.data.domicilio = domicilio },
          )
        } else {
          this.adminForm.controls['addDomicilio'].setValue(false);
        }
      },
    );
  }