From ade2d4b9775289f0af5a12f83d92bd570e788c51 Mon Sep 17 00:00:00 2001 From: Sean Date: Mon, 9 Nov 2020 19:06:41 +0100 Subject: [PATCH] Add los-close toggle to autopilot Adds a open/close list-of-speakers toggle option to autopilot component Also: hides the list of speakers if the current content object does not allow a list-of-speakers (mediafiles, users) --- .../list-of-speakers-repository.service.ts | 4 +++ .../list-of-speakers.component.html | 17 +++++----- .../list-of-speakers.component.ts | 18 ++--------- .../components/cinema/cinema.component.html | 32 +++++++++++++++---- .../components/cinema/cinema.component.ts | 11 +++++-- client/src/styles.scss | 10 +++++- 6 files changed, 58 insertions(+), 34 deletions(-) diff --git a/client/src/app/core/repositories/agenda/list-of-speakers-repository.service.ts b/client/src/app/core/repositories/agenda/list-of-speakers-repository.service.ts index e0e8c4013..fd49a388c 100644 --- a/client/src/app/core/repositories/agenda/list-of-speakers-repository.service.ts +++ b/client/src/app/core/repositories/agenda/list-of-speakers-repository.service.ts @@ -262,6 +262,10 @@ export class ListOfSpeakersRepositoryService extends BaseHasContentObjectReposit return !this.getViewModelList().some(list => list.hasSpeakerSpoken(speaker)); } + public async setListOpenness(listOfSpeakers: ViewListOfSpeakers, open: boolean): Promise { + await this.update({ closed: !open }, listOfSpeakers); + } + /** * List every speaker only once, who has spoken * diff --git a/client/src/app/site/agenda/components/list-of-speakers/list-of-speakers.component.html b/client/src/app/site/agenda/components/list-of-speakers/list-of-speakers.component.html index 9051ed798..56f9324c6 100644 --- a/client/src/app/site/agenda/components/list-of-speakers/list-of-speakers.component.html +++ b/client/src/app/site/agenda/components/list-of-speakers/list-of-speakers.component.html @@ -61,14 +61,15 @@ [text]="getContentObjectProjectorButtonText()" > - - - diff --git a/client/src/app/site/agenda/components/list-of-speakers/list-of-speakers.component.ts b/client/src/app/site/agenda/components/list-of-speakers/list-of-speakers.component.ts index 102f6f8b9..282f0c79d 100644 --- a/client/src/app/site/agenda/components/list-of-speakers/list-of-speakers.component.ts +++ b/client/src/app/site/agenda/components/list-of-speakers/list-of-speakers.component.ts @@ -175,22 +175,8 @@ export class ListOfSpeakersComponent extends BaseViewComponentDirective implemen this.listOfSpeakersRepo.readdLastSpeaker(this.viewListOfSpeakers).catch(this.raiseError); } - /** - * Closes the current list of speakers - */ - public closeSpeakerList(): Promise { - if (!this.viewListOfSpeakers.closed) { - return this.listOfSpeakersRepo.update({ closed: true }, this.viewListOfSpeakers).catch(this.raiseError); - } - } - - /** - * Opens the list of speaker for the current item - */ - public openSpeakerList(): Promise { - if (this.viewListOfSpeakers.closed) { - return this.listOfSpeakersRepo.update({ closed: false }, this.viewListOfSpeakers).catch(this.raiseError); - } + public async setOpenness(open: boolean): Promise { + await this.listOfSpeakersRepo.setListOpenness(this.viewListOfSpeakers, open).catch(this.raiseError); } /** diff --git a/client/src/app/site/cinema/components/cinema/cinema.component.html b/client/src/app/site/cinema/components/cinema/cinema.component.html index 32a4e2ea0..70b6fc09f 100644 --- a/client/src/app/site/cinema/components/cinema/cinema.component.html +++ b/client/src/app/site/cinema/components/cinema/cinema.component.html @@ -22,16 +22,34 @@ -

+ [customTitle]="true" + [speakers]="listOfSpeakers" + *osPerms="permission.agendaCanSeeListOfSpeakers; and: listOfSpeakers" + > +

{{ 'List of speakers' | translate }} - - lock - + + + + lock + + + +

diff --git a/client/src/app/site/cinema/components/cinema/cinema.component.ts b/client/src/app/site/cinema/components/cinema/cinema.component.ts index 3fcdf56ef..eeb992999 100644 --- a/client/src/app/site/cinema/components/cinema/cinema.component.ts +++ b/client/src/app/site/cinema/components/cinema/cinema.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ViewChild } from '@angular/core'; import { MatSnackBar } from '@angular/material/snack-bar'; import { Title } from '@angular/platform-browser'; @@ -6,9 +6,11 @@ import { TranslateService } from '@ngx-translate/core'; import { OperatorService } from 'app/core/core-services/operator.service'; import { ProjectorService } from 'app/core/core-services/projector.service'; +import { ListOfSpeakersRepositoryService } from 'app/core/repositories/agenda/list-of-speakers-repository.service'; import { ProjectorRepositoryService } from 'app/core/repositories/projector/projector-repository.service'; import { DetailNavigable, isDetailNavigable } from 'app/shared/models/base/detail-navigable'; import { ProjectorElement } from 'app/shared/models/core/projector'; +import { ListOfSpeakersComponent } from 'app/site/agenda/components/list-of-speakers/list-of-speakers.component'; import { ViewListOfSpeakers } from 'app/site/agenda/models/view-list-of-speakers'; import { BaseProjectableViewModel } from 'app/site/base/base-projectable-view-model'; import { BaseViewComponentDirective } from 'app/site/base/base-view'; @@ -87,7 +89,8 @@ export class CinemaComponent extends BaseViewComponentDirective implements OnIni private operator: OperatorService, private projectorService: ProjectorService, private projectorRepo: ProjectorRepositoryService, - private closService: CurrentListOfSpeakersService + private closService: CurrentListOfSpeakersService, + private listOfSpeakersRepo: ListOfSpeakersRepositoryService ) { super(title, translate, snackBar); } @@ -110,4 +113,8 @@ export class CinemaComponent extends BaseViewComponentDirective implements OnIni }) ); } + + public async toggleListOfSpeakersOpen(): Promise { + await this.listOfSpeakersRepo.setListOpenness(this.listOfSpeakers, this.isLosClosed).catch(this.raiseError); + } } diff --git a/client/src/styles.scss b/client/src/styles.scss index 00598b229..804e141bc 100644 --- a/client/src/styles.scss +++ b/client/src/styles.scss @@ -157,10 +157,18 @@ b, // for aligning text lines with an icon and or link .line-and-icon { - display: flex; + display: block; + line-height: 40px; + h2, + span, + a { + vertical-align: bottom; + } + .mat-icon-button, .mat-icon { margin: auto 0; + vertical-align: middle; } }