UKHO / admiralty-design-system

MIT License
5 stars 0 forks source link

[BUG] admiralty-autocomplete cannot display the setValue when using form controls (reactive forms) #224

Closed developernm closed 1 day ago

developernm commented 3 months ago

When you have a value set on the form control, regardless of whether the [value] is a string or an object, the value is not displaying on the autocomplete as selected.

<form [formGroup]="form">
  <admiralty-autocomplete *ngIf="(commissioningOrganisations$ | async) as commissioningOrganisations"
                          id="commissioning-organisation"
                          formControlName="commissionOrganisationSelected"
                          label="Organisation name"
                          (admiraltyChange)="onCommissioningOrganisationChanged($any($event.target).value)">
    <ng-container *ngFor="let organisation of commissioningOrganisations">
      <admiralty-autocomplete-option [value]="organisation.organisationName">{{ organisation.organisationName }}</admiralty-autocomplete-option>
    </ng-container>
  </admiralty-autocomplete>
</form>
export class AppComponent {

  public form: FormGroup;
  public commissioningOrganisations$: Observable<CommissioningOrganisationDto[]>

  constructor(
    private fb: FormBuilder,
  ) {
    this.commissioningOrganisations$ = of([
      { d365Id: '123', orgnanisationName: 'test' },
      { d365Id: '124', orgnanisationName: 'test 2' },
    ])
    this.form = this.fb.group({ commissionOrganisationSelected: ['']})
    this.form.controls.commissionOrganisationSelected.setValue('test 2'); // Note: Tried object as well, still fails
  }

  public onCommissioningOrganisationChanged(value: string): void {
    console.log(this.form.controls.commissionOrganisationSelected.value);
  }
}

From doing the above you expect the value to be set and displayed as selected, but its not.

image

Can you check whether the controlValueAccessor is being correctly used like the other components.