From 0bd00f869aa4e7c0089af2af851f6416b11a417f Mon Sep 17 00:00:00 2001 From: jojohoch <joachim.hoch@iqb.hu-berlin.de> Date: Tue, 9 Nov 2021 11:24:21 +0100 Subject: [PATCH] [player] Refactor presentationProgress Improve detection of valid pages, sections and elements --- .../unit-state/unit-state.component.ts | 46 ++++++++++++++----- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/projects/player/src/app/components/unit-state/unit-state.component.ts b/projects/player/src/app/components/unit-state/unit-state.component.ts index 09fa97f8f..7d98749e0 100644 --- a/projects/player/src/app/components/unit-state/unit-state.component.ts +++ b/projects/player/src/app/components/unit-state/unit-state.component.ts @@ -74,11 +74,32 @@ export class UnitStateComponent implements OnInit, OnDestroy { } private get responseProgress(): Progress { + // TODO: Check other relevant Elements if (this.form.valid) { return 'complete'; } - const pages: FormArray = this.form.get('pages') as FormArray; - return (pages.controls.some((control: AbstractControl): boolean => control.value)) ? 'some' : 'none'; + const pagesControls: AbstractControl[] = (this.form.get('pages') as FormArray).controls; + for (let i = 0; i < pagesControls.length; i++) { + const pageControl = pagesControls[i]; + if (pageControl.valid) { + return 'some'; + } + const sectionControls = (pageControl.get('sections') as FormArray).controls; + for (let ii = 0; ii < sectionControls.length; ii++) { + const sectionControl = sectionControls[ii]; + if (sectionControl.valid) { + return 'some'; + } + const elementControls = (sectionControl.get('elements') as FormArray).controls; + for (let iii = 0; iii < elementControls.length; iii++) { + const elementControl = elementControls[iii]; + if (elementControl.valid) { + return 'some'; + } + } + } + } + return 'none'; } private get presentationProgress(): Progress { @@ -128,15 +149,18 @@ export class UnitStateComponent implements OnInit, OnDestroy { } private sendVopStateChangedNotification(): void { - const unitState: UnitState = { - dataParts: { - elementCodes: JSON.stringify(this.unitStateService.unitStateElementCodes) - }, - presentationProgress: this.presentationProgress, - responseProgress: this.responseProgress, - unitStateDataType: this.metaDataService.playerMetadata.supportedUnitStateDataTypes - }; - this.veronaPostService.sendVopStateChangedNotification({ unitState }); + // give the form time to change its valid status + Promise.resolve().then(() => { + const unitState: UnitState = { + dataParts: { + elementCodes: JSON.stringify(this.unitStateService.unitStateElementCodes) + }, + presentationProgress: this.presentationProgress, + responseProgress: this.responseProgress, + unitStateDataType: this.metaDataService.playerMetadata.supportedUnitStateDataTypes + }; + this.veronaPostService.sendVopStateChangedNotification({ unitState }); + }); } ngOnDestroy(): void { -- GitLab