diff --git a/src/app/group-monitor/group-monitor.component.html b/src/app/group-monitor/group-monitor.component.html index 82d43472858f5e02416b82ce2995b1a3d027ecd8..fb5f332797fa100036531776441c955d01d40d71 100644 --- a/src/app/group-monitor/group-monitor.component.html +++ b/src/app/group-monitor/group-monitor.component.html @@ -80,7 +80,7 @@ <div class="toolbar-section"> <button mat-raised-button class="control" color="primary" (click)="testCommandGoto()" - [disabled]="!selectedElement || sessionCheckedGroupCount !== 1"> + [disabled]="!selectedElement?.element || sessionCheckedGroupCount !== 1"> <mat-icon>arrow_forward</mat-icon>SPRINGE ZU <span class="emph">{{selectedElement?.element?.label || selectedElement?.element?.id}}</span> </button> @@ -125,7 +125,7 @@ </button> </div> - <div class="test-view-table-wrapper" (click)="selectElement({element: null, spreading: true, contextBookletId: ''})"> + <div class="test-view-table-wrapper"> <table class="test-view-table" matSort (matSortChange)="setTableSorting($event)"> <thead> @@ -140,13 +140,13 @@ </tr> </thead> - <ng-container *ngFor="let session of sessions$ | async; trackBy: trackSession as sessionSuperId"> + <ng-container *ngFor="let session of sessions$ | async; trackBy: trackSession"> <tc-test-view [testSession]="session" [displayOptions]="displayOptions" [markedElement]="markedElement" (markedElement$)="markElement($event)" - [selectedElement]="selectedElement?.element" + [selected]="selectedElement" (selectedElement$)="selectElement($event)" (bookletId$)="adjustViewModeOnBookletLoad($event)" [checked]="isChecked(session)" diff --git a/src/app/group-monitor/group-monitor.component.ts b/src/app/group-monitor/group-monitor.component.ts index 9f6859aa3fa5e6bb63862fcd273e7e2f114ceb94..731f4fc92f692248c2ba85ee86a9dbace3143482 100644 --- a/src/app/group-monitor/group-monitor.component.ts +++ b/src/app/group-monitor/group-monitor.component.ts @@ -41,7 +41,11 @@ export class GroupMonitorComponent implements OnInit, OnDestroy { selectionSpreading: 'booklet' }; - selectedElement: Selected = null; + selectedElement: Selected = { + contextBookletId: '', + element: undefined, + spreading: false + }; markedElement: Testlet|Unit|null = null; checkedSessions: {[sessionTestSessionId: number]: TestSession} = {}; allSessionsChecked = false; diff --git a/src/app/group-monitor/test-view/test-view.component.html b/src/app/group-monitor/test-view/test-view.component.html index 78937c3a0b5f1c6e0b629762e0a12028e210d8d7..a0c38fa123d66cbe27e9b5e16763cbf9c06b5420 100644 --- a/src/app/group-monitor/test-view/test-view.component.html +++ b/src/app/group-monitor/test-view/test-view.component.html @@ -8,7 +8,7 @@ </td> -<td> +<td (click)="deselect($event)"> <div class="vertical-align-middle"> <ng-container *ngIf="getMode(testSession.mode) as mode" > @@ -25,11 +25,11 @@ </td> -<td *ngIf="displayOptions.groupColumn === 'show'"> +<td *ngIf="displayOptions.groupColumn === 'show'" (click)="deselect($event)"> <div class="vertical-align-middle">{{testSession.groupLabel}}</div> </td> -<td class="booklet"> +<td class="booklet" (click)="deselect($event)"> <ng-container *ngIf="(booklet$ | async) as booklet"> <ng-container *ngIf="isBooklet(booklet); else: noBooklet"> @@ -74,7 +74,7 @@ </ng-template> </td> -<td class="activity"> +<td class="activity" (click)="deselect($event)"> <ng-container *ngIf="(booklet$ | async) as booklet"> <ng-container *ngIf="isBooklet(booklet); else: noBookletReason"> @@ -83,6 +83,7 @@ [class]="hasState(testSession.testState, 'status', 'locked') ? 'locked' : ''" [ngSwitch]="displayOptions.view" (mouseleave)="mark()" + (click)="deselect($event)" > <div class="units full" *ngSwitchCase="'full'" > <ng-container *ngTemplateOutlet="testletFull; context: {$implicit: testlet}"></ng-container> @@ -171,7 +172,7 @@ [class]="{ unit: true, current: testSession.unitName === testletOrUnit.id, - selected: selectedElement?.id === testletOrUnit.id, + selected: (selected?.element?.id === testletOrUnit.id) && checked, marked: markedElement?.id === testletOrUnit.id }" (mouseenter)="mark(testletOrUnit)" @@ -184,7 +185,7 @@ <span *ngSwitchCase="'testlet'" [class]="{ testlet: true, - selected: selectedElement?.id === testletOrUnit.id, + selected: (selected?.element?.id === testletOrUnit.id) && checked, marked: markedElement?.id === testletOrUnit.id }" (mouseenter)="mark(testletOrUnit)" @@ -233,7 +234,7 @@ unit: true, aggregated: true, current: true, - selected: selectedElement?.id === testletOrUnit.id, + selected: (selected?.element?.id === testletOrUnit.id) && checked, marked: markedElement?.id === testletOrUnit.id }" matTooltip="{{featuredUnit.unit.label}}" @@ -249,7 +250,7 @@ [class]="{ unit: true, aggregated: true, - selected: selectedElement?.id === testletOrUnit.id, + selected: (selected?.element?.id === testletOrUnit.id) && checked, marked: markedElement?.id === testletOrUnit.id }" (mouseenter)="mark(testletOrUnit)" diff --git a/src/app/group-monitor/test-view/test-view.component.ts b/src/app/group-monitor/test-view/test-view.component.ts index 6893673c1630e6fd4de92a95ec35a20911cd578c..efefd6f1f885fe5c0161972fc477f430397dcdab 100644 --- a/src/app/group-monitor/test-view/test-view.component.ts +++ b/src/app/group-monitor/test-view/test-view.component.ts @@ -23,7 +23,11 @@ export class TestViewComponent implements OnInit, OnChanges, OnDestroy { @Input() testSession: TestSession; @Input() displayOptions: TestViewDisplayOptions; @Input() markedElement: Testlet|Unit|null = null; - @Input() selectedElement: Testlet|Unit|null = null; + @Input() selected: Selected = { + contextBookletId: '', + element: undefined, + spreading: false + }; @Input() checked: boolean; @Output() bookletId$ = new EventEmitter<string>(); @@ -38,7 +42,6 @@ export class TestViewComponent implements OnInit, OnChanges, OnDestroy { public maxTimeLeft: object|null; // TODO make observable maybe private bookletSubscription: Subscription; - private selectedElementSpreading = true; constructor( private bookletsService: BookletService, @@ -203,30 +206,39 @@ export class TestViewComponent implements OnInit, OnChanges, OnDestroy { } select($event: Event, testletOrUnit: Testlet|Unit|null) { - console.log( - 'SELECT', - this.selectedElement !== null ? this.selectedElement.id : null, - testletOrUnit !== null ? testletOrUnit.id : null - ); - if ((isUnit(testletOrUnit) ? 'unit' : 'block') !== this.displayOptions.selectionMode) { return; } $event.stopPropagation(); - this.selectedElement = testletOrUnit; + this.applySelection(testletOrUnit); + } + + deselect($event: MouseEvent) { + if ($event.currentTarget === $event.target) { + this.applySelection(); + } + } - this.selectedElementSpreading = (this.selectedElement != null) && (this.selectedElement.id === testletOrUnit.id) - ? !this.selectedElementSpreading - : true; + private applySelection(testletOrUnit: Testlet|Unit|null = null) { - this.selectedElement$.emit({ - element: this.selectedElement, + + console.log( + 'a', + (this.selected != null), + 'b', + (this.selected?.element?.id === testletOrUnit?.id), + this.selected?.element?.id , testletOrUnit?.id + ); + this.selected = { + element: testletOrUnit, contextBookletId: this.testSession.bookletName, session: this.testSession, - spreading: this.selectedElementSpreading - }); + spreading: (this.selected?.element?.id === testletOrUnit?.id) ? !this.selected?.spreading : true + }; + + this.selectedElement$.emit(this.selected); } check($event: MatCheckboxChange) {