From 2daf595f093d8d0fb0f9a55b4ba87c37721647fc Mon Sep 17 00:00:00 2001 From: jojohoch <joachim.hoch@iqb.hu-berlin.de> Date: Fri, 7 Jan 2022 14:38:04 +0100 Subject: [PATCH] [player] Fix restoring of toggle buttons - Explicitly set the value of the form control of CompoundChildren, because they are not yet fully registered in the onInit phase. - Use ChangeDetectorRef to prevent ExpressionChangedAfterItHasBeenCheckedError --- .../toggle-button/toggle-button.component.ts | 1 + .../element-container/element-container.component.ts | 12 +++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/projects/common/ui-elements/toggle-button/toggle-button.component.ts b/projects/common/ui-elements/toggle-button/toggle-button.component.ts index 08b8307e6..2ca71171d 100644 --- a/projects/common/ui-elements/toggle-button/toggle-button.component.ts +++ b/projects/common/ui-elements/toggle-button/toggle-button.component.ts @@ -7,6 +7,7 @@ import { FormElementComponent } from '../../directives/form-element-component.di template: ` <div class="mat-form-field"> <mat-button-toggle-group [formControl]="elementFormControl" + [value]="elementModel.value" [style.height.px]="elementModel.height"> <mat-button-toggle *ngFor="let option of elementModel.options; let i = index" [value]="i" diff --git a/projects/player/src/app/components/element-container/element-container.component.ts b/projects/player/src/app/components/element-container/element-container.component.ts index 50de60e53..0485a3cb0 100644 --- a/projects/player/src/app/components/element-container/element-container.component.ts +++ b/projects/player/src/app/components/element-container/element-container.component.ts @@ -1,5 +1,5 @@ import { - Component, OnInit, Input, ComponentFactoryResolver, ViewChild, ViewContainerRef, QueryList + Component, OnInit, Input, ComponentFactoryResolver, ViewChild, ViewContainerRef, QueryList, ChangeDetectorRef } from '@angular/core'; import { FormBuilder, FormControl, FormGroup, ValidatorFn @@ -59,7 +59,8 @@ export class ElementContainerComponent implements OnInit { private veronaPostService: VeronaPostService, private mediaPlayerService: MediaPlayerService, private unitStateElementMapperService: UnitStateElementMapperService, - private markingService: MarkingService) { + private markingService: MarkingService, + private changeDetectorRef: ChangeDetectorRef) { } ngOnInit(): void { @@ -119,8 +120,8 @@ export class ElementContainerComponent implements OnInit { elementComponent.parentForm = elementForm; const compoundChildren = elementComponent.getFormElementModelChildren(); this.subscribeCompoundChildren(elementComponent, compoundChildren); + this.registerFormGroup(elementForm); compoundChildren.forEach((element: InputElement) => { - this.registerFormGroup(elementForm); this.formService.registerFormControl({ id: element.id, formControl: new FormControl(element.value), @@ -165,7 +166,12 @@ export class ElementContainerComponent implements OnInit { child.domElement, this.pageIndex ); + const formChild = (child as FormElementComponent); + if (formChild) { + formChild.setFormValue(child.elementModel.value); + } }); + this.changeDetectorRef.detectChanges(); }); } } -- GitLab