From 24cf011ed126ea951e84eef916373a6fb26c1d99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Mau=C3=9F?= <lukas.mauss@mni.thm.de> Date: Wed, 1 May 2019 16:27:48 +0200 Subject: [PATCH] Fix comment settings extensions --- .../content-edit/content-edit.component.html | 6 +- .../room-delete/room-delete.component.ts | 8 +- .../room-edit/room-edit.component.html | 22 +++--- .../room-edit/room-edit.component.scss | 15 +++- .../_dialogs/room-edit/room-edit.component.ts | 60 +++++++++++---- .../content-creator.component.html | 4 +- .../content-list/content-list.component.html | 12 +-- .../room-creator-page.component.html | 74 +++++++++---------- .../room-creator-page.component.scss | 15 ++++ .../room-creator-page.component.ts | 62 ++++------------ .../room-participant-page.component.html | 15 ++-- .../room-create/room-create.component.html | 2 +- .../room-create/room-create.component.ts | 6 +- .../comment-list/comment-list.component.html | 18 +++-- .../comment-list/comment-list.component.scss | 15 ++-- .../comment-list/comment-list.component.ts | 32 ++++---- .../shared/comment/comment.component.ts | 1 - .../shared/header/header.component.html | 3 +- src/app/services/http/room.service.ts | 11 +++ src/assets/i18n/creator/de.json | 8 +- src/assets/i18n/creator/en.json | 6 +- src/theme/default-Theme/defaultTheme.const.ts | 2 +- 22 files changed, 216 insertions(+), 181 deletions(-) diff --git a/src/app/components/creator/_dialogs/content-edit/content-edit.component.html b/src/app/components/creator/_dialogs/content-edit/content-edit.component.html index fffc5e895..e12c461ab 100644 --- a/src/app/components/creator/_dialogs/content-edit/content-edit.component.html +++ b/src/app/components/creator/_dialogs/content-edit/content-edit.component.html @@ -1,16 +1,16 @@ <div fxLayout="column" fxLayoutAlign="center" fxLayoutGap="10px"> <mat-form-field> - <input matInput [(ngModel)]="content.subject" maxlength="20" placeholder="{{'content.subject' | translate}}" name="subject"/> + <input matInput [(ngModel)]="content.subject" maxlength="40" placeholder="{{'content.subject' | translate}}" name="subject"/> </mat-form-field> <mat-form-field> - <textarea matInput [(ngModel)]="content.body" rows="3" maxlength="100" placeholder="{{'content.body' | translate}}" name="body"></textarea> + <textarea matInput [(ngModel)]="content.body" rows="3" maxlength="255" placeholder="{{'content.body' | translate}}" name="body"></textarea> </mat-form-field> <h4>{{'content.answers' | translate}}</h4> <mat-table [dataSource]="displayAnswers"> <ng-container matColumnDef="label"> <mat-cell *matCellDef="let answer"> <mat-form-field class="input-block"> - <input matInput [(ngModel)]="answer.answerOption.label" maxlength="20" name="answer"/> + <input matInput [(ngModel)]="answer.answerOption.label" maxlength="50" name="answer"/> </mat-form-field> </mat-cell> </ng-container> diff --git a/src/app/components/creator/_dialogs/room-delete/room-delete.component.ts b/src/app/components/creator/_dialogs/room-delete/room-delete.component.ts index b8ac7c16b..35b03c1e7 100644 --- a/src/app/components/creator/_dialogs/room-delete/room-delete.component.ts +++ b/src/app/components/creator/_dialogs/room-delete/room-delete.component.ts @@ -1,9 +1,6 @@ import { Component, Inject, OnInit } from '@angular/core'; -import { Router } from '@angular/router'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material'; -import { NotificationService } from '../../../../services/util/notification.service'; import { RoomCreateComponent } from '../../../shared/_dialogs/room-create/room-create.component'; -import { RoomService } from '../../../../services/http/room.service'; import { Room } from '../../../../models/room'; @Component({ @@ -14,10 +11,7 @@ import { Room } from '../../../../models/room'; export class RoomDeleteComponent implements OnInit { room: Room; - constructor(private roomService: RoomService, - private router: Router, - private notification: NotificationService, - public dialogRef: MatDialogRef<RoomCreateComponent>, + constructor( public dialogRef: MatDialogRef<RoomCreateComponent>, @Inject(MAT_DIALOG_DATA) public data: any) { } diff --git a/src/app/components/creator/_dialogs/room-edit/room-edit.component.html b/src/app/components/creator/_dialogs/room-edit/room-edit.component.html index 6654079e0..c32a98968 100644 --- a/src/app/components/creator/_dialogs/room-edit/room-edit.component.html +++ b/src/app/components/creator/_dialogs/room-edit/room-edit.component.html @@ -1,34 +1,38 @@ <div *ngIf="editRoom"> <mat-card class="header" fxLayoutAlign="center"> - <mat-card-title class="title" fxLayoutAlign="center">General</mat-card-title> + <mat-card-title class="title" fxLayoutAlign="center">{{'room-page.general' | translate}}</mat-card-title> </mat-card> <div fxLayout="column"> <mat-form-field class="input-block"> - <input [(ngModel)]="editRoom.name" matInput placeholder="{{ 'session.session-name' | translate}}" name="room-name"/> + <input [(ngModel)]="editRoom.name" matInput placeholder="{{ 'session.session-name' | translate}}" + name="room-name" maxlength="20"/> </mat-form-field> <mat-form-field class="input-block"> <textarea [(ngModel)]="editRoom.description" matInput matTextareaAutosize - matAutosizeMinRows="2" matAutosizeMaxRows="5" placeholder="{{ 'session.description' | translate}}" name="description"> + matAutosizeMinRows="2" matAutosizeMaxRows="5" maxlength="255" + placeholder="{{ 'session.description' | translate}}" name="description"> </textarea> </mat-form-field> + <div fxLayoutAlign="center center"> + <button mat-raised-button class="delete" (click)="openDeletionRoomDialog()"><mat-icon>delete</mat-icon>Session löschen</button> + </div> </div> <mat-card class="header" fxLayoutAlign="center"> - <mat-card-title class="title" fxLayoutAlign="center">Comments</mat-card-title> + <mat-card-title class="title" fxLayoutAlign="center">{{'room-page.comments' | translate}}</mat-card-title> </mat-card> <div fxLayout="column"> <div fxLayout="row"> - <mat-label>Threshold for visible comments:</mat-label> - <span class="fill-remaining-space"></span> - <mat-label>{{commentThreshold | number}}</mat-label> + <h3>{{ 'room-page.threshold' | translate}}</h3> + <h3>{{commentThreshold | number}}</h3> </div> <mat-slider id="commentSlider" min="-50" max="50" step="1" value="0" - color="accent" [(ngModel)]="editRoom.commentThreshold" (input)="onSliderChange($event)"></mat-slider> + color="accent" [(ngModel)]="commentThreshold" (input)="onSliderChange($event)"></mat-slider> </div> <div fxLayout="row" fxLayoutAlign="center" fxLayoutGap="10px"> <button (click)="dialogRef.close('abort')" mat-button color="primary"> {{ 'room-page.abort' | translate}} </button> - <button (click)="dialogRef.close('edit')" mat-raised-button color="primary"> + <button (click)="dialogRef.close(commentThreshold)" mat-raised-button color="primary"> {{ 'room-page.update' | translate}} </button> </div> diff --git a/src/app/components/creator/_dialogs/room-edit/room-edit.component.scss b/src/app/components/creator/_dialogs/room-edit/room-edit.component.scss index 000ed6790..1c5d94358 100644 --- a/src/app/components/creator/_dialogs/room-edit/room-edit.component.scss +++ b/src/app/components/creator/_dialogs/room-edit/room-edit.component.scss @@ -1,8 +1,7 @@ @import '../../../../../styles'; .header { - color: black; - background-color: mat-color($arsnova-primary,500); + background-color: mat-color($arsnova-primary,200); margin: 0 0 10px 0; } @@ -13,3 +12,15 @@ #commentSlider { width: 100%; } + +.delete { + margin-bottom: 20px; + min-width: 170px; + width: 60%; + background-color: mat-color($arsnova-warn,300); +} + +mat-icon { + margin-right: 10px; +} + diff --git a/src/app/components/creator/_dialogs/room-edit/room-edit.component.ts b/src/app/components/creator/_dialogs/room-edit/room-edit.component.ts index 2e57892c6..e4f337a03 100644 --- a/src/app/components/creator/_dialogs/room-edit/room-edit.component.ts +++ b/src/app/components/creator/_dialogs/room-edit/room-edit.component.ts @@ -1,8 +1,12 @@ import { Component, Inject, OnInit } from '@angular/core'; import { Room } from '../../../../models/room'; import { RoomCreateComponent } from '../../../shared/_dialogs/room-create/room-create.component'; -import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material'; -import { TSMap } from 'typescript-map'; +import { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material'; +import { RoomDeleteComponent } from '../room-delete/room-delete.component'; +import { NotificationService } from '../../../../services/util/notification.service'; +import { TranslateService } from '@ngx-translate/core'; +import { RoomService } from '../../../../services/http/room.service'; +import { Router } from '@angular/router'; @Component({ selector: 'app-room-edit', @@ -14,29 +18,53 @@ export class RoomEditComponent implements OnInit { commentThreshold: number; constructor(public dialogRef: MatDialogRef<RoomCreateComponent>, + public dialog: MatDialog, + public notificationService: NotificationService, + public translationService: TranslateService, + protected roomService: RoomService, + public router: Router, @Inject(MAT_DIALOG_DATA) public data: any) { } - onNoClick(): void { - this.dialogRef.close(); - } - ngOnInit() { - // ToDo: implement a more robust way - // ToDo: have a default comment threshold defined in config files - if (this.editRoom.extensions != null) { - const commentExtension = this.editRoom.extensions.get('comments'); - if ((commentExtension != null) && commentExtension.get('threshold') != null) { - this.commentThreshold = commentExtension.get('threshold'); - } else { - this.commentThreshold = -10; - } + if (this.editRoom.extensions['comments'].commentThreshold != null) { + this.commentThreshold = this.editRoom.extensions['comments'].commentThreshold; } else { this.commentThreshold = -10; } } onSliderChange(event: any) { - this.commentThreshold = event.value; + if (event.value) { + this.commentThreshold = event.value; + } else { + this.commentThreshold = 0; + } + } + + openDeletionRoomDialog(): void { + const dialogRef = this.dialog.open(RoomDeleteComponent, { + width: '400px' + }); + dialogRef.componentInstance.room = this.editRoom; + dialogRef.afterClosed() + .subscribe(result => { + this.confirmDeletion(result); + }); + } + + deleteRoom(room: Room): void { + this.translationService.get('room-page.deleted').subscribe(msg => { + this.notificationService.show(room.name + msg); + }); + this.roomService.deleteRoom(room.id).subscribe(); + this.dialogRef.close(); + this.router.navigate([`/creator`]); + } + + confirmDeletion(dialogAnswer: string): void { + if (dialogAnswer === 'delete') { + this.deleteRoom(this.editRoom); + } } } diff --git a/src/app/components/creator/content-creator/content-creator.component.html b/src/app/components/creator/content-creator/content-creator.component.html index 407b840e6..56fdf8efb 100644 --- a/src/app/components/creator/content-creator/content-creator.component.html +++ b/src/app/components/creator/content-creator/content-creator.component.html @@ -1,11 +1,11 @@ <form> <mat-form-field class="input-block"> <input matInput #subject [(ngModel)]="content.subject" placeholder="{{'content.subject' | translate}}" name="subject" - maxlength="20"> + maxlength="40"> </mat-form-field> <mat-form-field class="input-block"> <textarea matInput #body [(ngModel)]="content.body" placeholder="{{'content.body' | translate}}" name="body" - matTextareaAutosize matAutosizeMinRows="3" matAutosizeMaxRows="8" maxlength="100"></textarea> + matTextareaAutosize matAutosizeMinRows="3" matAutosizeMaxRows="8" maxlength="255"></textarea> </mat-form-field> <mat-form-field> <input matInput #group [formControl]="myControl" [matAutocomplete]="auto" diff --git a/src/app/components/creator/content-list/content-list.component.html b/src/app/components/creator/content-list/content-list.component.html index f71335646..46665fcb5 100644 --- a/src/app/components/creator/content-list/content-list.component.html +++ b/src/app/components/creator/content-list/content-list.component.html @@ -14,23 +14,23 @@ <mat-grid-list cols="3" rowHeight="1:1"> <mat-grid-tile> <button class="actionButton" mat-icon-button color="primary" - matTooltip="{{ 'room-page.create-content' | translate}}" routerLink="/creator/room/{{ roomId }}/create-content"> - <mat-icon class="actionIcon">note_add</mat-icon> + <mat-icon class="actionIcon" matTooltip="{{ 'room-page.create-content' | translate}}">note_add</mat-icon> + <h3>{{ 'room-page.create-content' | translate}}</h3> </button> </mat-grid-tile> <mat-grid-tile> <button class="actionButton" mat-icon-button color="primary" - matTooltip="{{ 'room-page.present' | translate}}" routerLink="/creator/room/{{ roomId }}/{{ contentGroup.name }}/presentation"> - <mat-icon class="actionIcon">school</mat-icon> + <mat-icon class="actionIcon" matTooltip="{{ 'room-page.present' | translate}}">school</mat-icon> + <h3>{{ 'room-page.present' | translate}}</h3> </button> </mat-grid-tile> <mat-grid-tile> <button class="actionButton" mat-icon-button color="primary" - matTooltip="{{ 'room-page.answer-statistics' | translate}}" routerLink="/creator/room/{{ roomId }}/statistics"> - <mat-icon class="actionIcon">insert_chart</mat-icon> + <mat-icon class="actionIcon" matTooltip="{{ 'room-page.answer-statistics' | translate}}">insert_chart</mat-icon> + <h3>{{ 'room-page.answer-statistics' | translate}}</h3> </button> </mat-grid-tile> </mat-grid-list> diff --git a/src/app/components/creator/room-creator-page/room-creator-page.component.html b/src/app/components/creator/room-creator-page/room-creator-page.component.html index 477eb79ea..5a50a5170 100644 --- a/src/app/components/creator/room-creator-page/room-creator-page.component.html +++ b/src/app/components/creator/room-creator-page/room-creator-page.component.html @@ -2,18 +2,25 @@ <div fxLayout="row" fxLayoutAlign="center"> <mat-progress-spinner *ngIf="isLoading" color="accent" mode="indeterminate"></mat-progress-spinner> <mat-card *ngIf="room"> - <mat-card-header fxLayoutAlign="center" fxLayout="row"> - <mat-card-title fxLayoutAlign="center"> - <h2>{{ room.name }}</h2> - </mat-card-title> - <mat-card-subtitle fxLayoutAlign="center"> - <h3> - {{ room.shortId.slice(0,4) }} {{ room.shortId.slice(4,8) }} - </h3> - </mat-card-subtitle> - </mat-card-header> + <div fxLayout="row"> + <span class="fill-remaining-space"></span> + <mat-card-header fxLayoutAlign="center" fxLayout="row"> + <mat-card-title fxLayoutAlign="center"> + <h2>{{ room.name }}</h2> + </mat-card-title> + <mat-card-subtitle fxLayoutAlign="center"> + <h3> + {{ room.shortId.slice(0, 4) }} {{ room.shortId.slice(4, 8) }} + </h3> + </mat-card-subtitle> + </mat-card-header> + <span class="fill-remaining-space"></span> + <button mat-icon-button id="settings" *ngIf="!modify" (click)="showEditDialog()" color="primary"> + <mat-icon id="settings-icon" matTooltip="{{ 'room-page.session-settings' | translate}}">settings</mat-icon> + </button> + </div> <mat-divider></mat-divider> - <mat-card-content fxLayoutAlign="center"> + <mat-card-content id="description" fxLayoutAlign="center"> <mat-expansion-panel *ngIf="!(room.description == '')" class="mat-elevation-z0"> <mat-expansion-panel-header> <h4>{{ 'room-page.description' | translate }}</h4> @@ -23,44 +30,35 @@ </p> </mat-expansion-panel> </mat-card-content> - <mat-grid-list cols="3" rowHeight="2:1"> + <mat-grid-list cols="2" rowHeight="2:1"> <mat-grid-tile colspan="1" rowspan="1"> - <button mat-icon-button color="primary" matTooltip="{{ 'room-page.create-content' | translate}}" - routerLink="/creator/room/{{ room.shortId }}/create-content"> - <mat-icon>note_add</mat-icon> - </button> - </mat-grid-tile> - <mat-grid-tile> - <button mat-icon-button color="primary" matTooltip="{{ 'room-page.comments' | translate}}" - routerLink="/creator/room/{{ room.shortId }}/comments"> - <mat-icon>question_answer</mat-icon> + <button mat-icon-button color="primary" + routerLink="/creator/room/{{ room.shortId }}/create-content"> + <mat-icon matTooltip="{{ 'room-page.create-content' | translate}}">note_add</mat-icon> + <h3>{{ 'room-page.create-content' | translate}}</h3> </button> </mat-grid-tile> <mat-grid-tile> - <button mat-icon-button *ngIf="!modify" (click)="showEditDialog()" color="primary" - matTooltip="{{ 'room-page.session-settings' | translate}}"> - <mat-icon>settings</mat-icon> + <button mat-icon-button color="primary" + routerLink="/creator/room/{{ room.shortId }}/comments"> + <mat-icon matTooltip="{{ 'room-page.comments' | translate}}">question_answer</mat-icon> + <h3>{{ 'room-page.comments' | translate}}</h3> </button> </mat-grid-tile> </mat-grid-list> - <mat-grid-list cols="3" rowHeight="2:1"> - <mat-grid-tile> - <button mat-icon-button color="primary" matTooltip="{{ 'room-page.answer-statistics' | translate}}" - routerLink="/creator/room/{{ room.shortId }}/statistics"> - <mat-icon>insert_chart</mat-icon> - </button> - </mat-grid-tile> + <mat-grid-list cols="2" rowHeight="2:1"> <mat-grid-tile> - <button mat-icon-button color="primary" matTooltip="{{ 'room-page.live-feedback' | translate}}" - routerLink="/creator/room/{{ room.shortId }}/feedback-barometer"> - <mat-icon class="smallerIcon">thumbs_up_down</mat-icon> + <button mat-icon-button color="primary" routerLink="/creator/room/{{ room.shortId }}/statistics"> + <mat-icon matTooltip="{{ 'room-page.answer-statistics' | translate}}">insert_chart</mat-icon> + <h3>{{ 'room-page.answer-statistics' | translate}}</h3> </button> </mat-grid-tile> <mat-grid-tile> - <button mat-icon-button color="warn" (click)="openDeletionRoomDialog()" - matTooltip="{{ 'room-page.delete-room' | translate}}"> - <mat-icon>delete_forever</mat-icon> - </button> + <button mat-icon-button color="primary" routerLink="/creator/room/{{ room.shortId }}/feedback-barometer"> + <mat-icon class="smallerIcon" matTooltip="{{ 'room-page.live-feedback' | translate}}">thumbs_up_down + </mat-icon> + <h3>{{ 'room-page.live-feedback' | translate}}</h3> + </button> </mat-grid-tile> </mat-grid-list> <app-content-groups *ngIf="room && room.contentGroups" [contentGroups]="room.contentGroups"></app-content-groups> diff --git a/src/app/components/creator/room-creator-page/room-creator-page.component.scss b/src/app/components/creator/room-creator-page/room-creator-page.component.scss index 76845e2de..300567e57 100644 --- a/src/app/components/creator/room-creator-page/room-creator-page.component.scss +++ b/src/app/components/creator/room-creator-page/room-creator-page.component.scss @@ -17,12 +17,27 @@ button { } } +#description { + margin-bottom: 0px; +} + .mat-icon-button { width: 75%; height: 75%; margin-bottom: 20px; } +#settings { + width: 10%; + max-width: 40px; +} + +#settings-icon { + font-size: 35px; + height: 35px; + width: 35px; +} + mat-icon { font-size: 50px; height: 50px; diff --git a/src/app/components/creator/room-creator-page/room-creator-page.component.ts b/src/app/components/creator/room-creator-page/room-creator-page.component.ts index a0c050507..ac34846cd 100644 --- a/src/app/components/creator/room-creator-page/room-creator-page.component.ts +++ b/src/app/components/creator/room-creator-page/room-creator-page.component.ts @@ -6,7 +6,6 @@ import { Room } from '../../../models/room'; import { Location } from '@angular/common'; import { NotificationService } from '../../../services/util/notification.service'; import { MatDialog } from '@angular/material'; -import { RoomDeleteComponent } from '../_dialogs/room-delete/room-delete.component'; import { RoomEditComponent } from '../_dialogs/room-edit/room-edit.component'; import { TranslateService } from '@ngx-translate/core'; import { LanguageService } from '../../../services/util/language.service'; @@ -43,51 +42,20 @@ export class RoomCreatorPageComponent extends RoomPageComponent implements OnIni }); } - /* TODO: i18n */ - - updateRoom(): void { - if ((this.updRoom.name === this.room.name) && - (this.updRoom.description === this.room.description) && - (this.commentThreshold === this.updCommentThreshold) - ) { - this.notification.show('There were no changes'); - return; - } else { - this.room.name = this.updRoom.name; - this.room.description = this.updRoom.description; - if (this.room.extensions === null) { - this.room.extensions = new TSMap(); - } + updateRoom(threshold: number): void { + this.room.name = this.updRoom.name; + this.room.description = this.updRoom.description; + if (threshold > -50) { const commentExtension: TSMap<string, any> = new TSMap(); - commentExtension.set('threshold', this.updCommentThreshold); + commentExtension.set('commentThreshold', threshold); + this.room.extensions = new TSMap(); this.room.extensions.set('comments', commentExtension); - this.roomService.updateRoom(this.room) - .subscribe(() => { - this.notification.show('Changes are made'); - }); - } - } - - deleteRoom(room: Room): void { - const msg = room.name + ' deleted'; - this.notification.show(msg); - this.delete(room); - } - - confirmDeletion(dialogAnswer: string): void { - if (dialogAnswer === 'delete') { - this.deleteRoom(this.room); } - } - - openDeletionRoomDialog(): void { - const dialogRef = this.dialog.open(RoomDeleteComponent, { - width: '400px' - }); - dialogRef.componentInstance.room = this.room; - dialogRef.afterClosed() - .subscribe(result => { - this.confirmDeletion(result); + this.roomService.updateRoom(this.room) + .subscribe(() => { + this.translateService.get('room-page.changes-successful').subscribe(msg => { + this.notification.show(msg); + }); }); } @@ -102,11 +70,13 @@ export class RoomCreatorPageComponent extends RoomPageComponent implements OnIni .subscribe(result => { if (result === 'abort') { return; - } - if (result === 'edit') { - this.updateRoom(); + } else { + this.updateRoom(+result); } }); + dialogRef.backdropClick().subscribe( res => { + dialogRef.close('abort'); + }); } } diff --git a/src/app/components/participant/room-participant-page/room-participant-page.component.html b/src/app/components/participant/room-participant-page/room-participant-page.component.html index b1e964c10..9d3af93f6 100644 --- a/src/app/components/participant/room-participant-page/room-participant-page.component.html +++ b/src/app/components/participant/room-participant-page/room-participant-page.component.html @@ -23,21 +23,18 @@ </mat-card-content> <mat-grid-list cols="3" rowHeight="2:1"> <mat-grid-tile> - <button mat-icon-button color="primary" matTooltip="{{ 'room-page.create-comment' | translate}}" - routerLink="/participant/room/{{ room.shortId }}/comments"> - <mat-icon>question_answer</mat-icon> + <button mat-icon-button color="primary" routerLink="/participant/room/{{ room.shortId }}/comments"> + <mat-icon matTooltip="{{ 'room-page.create-comment' | translate}}">question_answer</mat-icon> </button> </mat-grid-tile> <mat-grid-tile> - <button mat-icon-button color="primary" matTooltip="{{ 'room-page.give-feedback' | translate}}" - routerLink="/participant/room/{{ room.shortId }}/feedback-barometer"> - <mat-icon>thumbs_up_down</mat-icon> + <button mat-icon-button color="primary" routerLink="/participant/room/{{ room.shortId }}/feedback-barometer"> + <mat-icon matTooltip="{{ 'room-page.give-feedback' | translate}}">thumbs_up_down</mat-icon> </button> </mat-grid-tile> <mat-grid-tile> - <button mat-icon-button color="primary" matTooltip="Lernstand" - routerLink="/participant/room/{{ room.shortId }}/statistics"> - <mat-icon>insert_chart</mat-icon> + <button mat-icon-button color="primary" routerLink="/participant/room/{{ room.shortId }}/statistics"> + <mat-icon matTooltip="{{ 'statistic.answer-statistic' | translate}}">insert_chart</mat-icon> </button> </mat-grid-tile> </mat-grid-list> diff --git a/src/app/components/shared/_dialogs/room-create/room-create.component.html b/src/app/components/shared/_dialogs/room-create/room-create.component.html index 1c8f06136..b3e1ce6e5 100644 --- a/src/app/components/shared/_dialogs/room-create/room-create.component.html +++ b/src/app/components/shared/_dialogs/room-create/room-create.component.html @@ -1,4 +1,4 @@ -<form (ngSubmit)="addRoom(longRoomName.value, description.value, -100)"> +<form (ngSubmit)="addRoom(longRoomName.value, description.value)"> <div fxLayout="column" fxLayoutAlign="center" fxLayoutGap="10px"> <mat-form-field> <input (keypress)="resetEmptyInputs()" matInput #longRoomName class="input-block" type="text" diff --git a/src/app/components/shared/_dialogs/room-create/room-create.component.ts b/src/app/components/shared/_dialogs/room-create/room-create.component.ts index 2c277d032..81e0dac52 100644 --- a/src/app/components/shared/_dialogs/room-create/room-create.component.ts +++ b/src/app/components/shared/_dialogs/room-create/room-create.component.ts @@ -6,7 +6,6 @@ import { NotificationService } from '../../../../services/util/notification.serv import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material'; import { ContentService } from '../../../../services/http/content.service'; import { TranslateService } from '@ngx-translate/core'; -import { TSMap } from 'typescript-map'; @Component({ selector: 'app-room-create', @@ -41,7 +40,7 @@ export class RoomCreateComponent implements OnInit { this.emptyInputs = false; } - addRoom(longRoomName: string, description: string, commentThreshold: number) { + addRoom(longRoomName: string, description: string) { longRoomName = longRoomName.trim(); if (!longRoomName) { this.emptyInputs = true; @@ -51,9 +50,6 @@ export class RoomCreateComponent implements OnInit { newRoom.name = longRoomName; newRoom.abbreviation = '00000000'; newRoom.description = description; - const commentExtension: TSMap<string, any> = new TSMap(); - commentExtension.set('commentThreshold', commentThreshold); - newRoom.extensions.set('comments', commentExtension); this.roomService.addRoom(newRoom).subscribe(room => { this.room = room; let msg1: string; diff --git a/src/app/components/shared/comment-list/comment-list.component.html b/src/app/components/shared/comment-list/comment-list.component.html index 64683e4f7..8a2110887 100644 --- a/src/app/components/shared/comment-list/comment-list.component.html +++ b/src/app/components/shared/comment-list/comment-list.component.html @@ -4,19 +4,20 @@ </mat-label> <input #searchBox placeholder="{{ 'comment-list-page.search' | translate }}" (input)="searchComments(searchBox.value)"> - <button mat-button *ngIf="searchBox.value || isIconHide" (click)="hideCommentsList=false; searchBox.value=''; isIconHide=false"> + <button mat-icon-button *ngIf="searchBox.value || isIconHide" (click)="hideCommentsList=false; searchBox.value=''; isIconHide=false"> <mat-icon>close</mat-icon> </button> - <button mat-button *ngIf="!searchBox.value && userRole === 1 && comments.length > 0" + <span class="fill-remaining-space"></span> + <button mat-icon-button *ngIf="!searchBox.value && userRole === 1 && comments.length > 0" [matTooltip]="'Export comments'" (click)="export(true)"> <mat-icon class="add-icon" id="export-icon">cloud_download</mat-icon> </button> - <button mat-button *ngIf="!searchBox.value && !isIconHide" color="accent" (click)="openSubmitDialog()"> + <button mat-icon-button *ngIf="!searchBox.value && !isIconHide" color="accent" (click)="openSubmitDialog()"> <mat-icon class="add-icon">add_circle</mat-icon> </button> - <mat-icon mat-icon-button *ngIf="!searchBox.value" class="add-filterIcon" color="accent" [matMenuTriggerFor]="filterMenu"> + <mat-icon mat-icon-button *ngIf="!searchBox.value" class="filterIcon" color="accent" [matMenuTriggerFor]="filterMenu"> sort </mat-icon> @@ -49,9 +50,10 @@ </mat-menu> </div> -<mat-card id="outer-card" *ngIf="hideCommentsList"> - <app-comment *ngFor="let current of filteredComments" [comment]="current"></app-comment> +<mat-card class="outer-card" *ngIf="user.role === 0"> + <app-comment *ngFor="let current of getCommentsParticipant()" [comment]="current"></app-comment> </mat-card> -<mat-card *ngIf="!hideCommentsList"> - <app-comment *ngFor="let current of comments | orderBy: 'timestamp'" [comment]="current"></app-comment> +<mat-card class="outer-card" *ngIf="user.role === 1"> + <app-comment *ngFor="let current of getCommentsCreator()" [comment]="current"></app-comment> </mat-card> + diff --git a/src/app/components/shared/comment-list/comment-list.component.scss b/src/app/components/shared/comment-list/comment-list.component.scss index 15c6d7234..d299e8117 100644 --- a/src/app/components/shared/comment-list/comment-list.component.scss +++ b/src/app/components/shared/comment-list/comment-list.component.scss @@ -1,4 +1,4 @@ -#outer-card { +.outer-card { margin-bottom: 10px; background-color: var(--comment-list-bg); } @@ -11,7 +11,7 @@ app-comment { input { box-sizing: border-box; padding: 0 10px 0 5px; - width: 90%; + width: 50%; background-color: var(--input-search-cl); border: none; outline: none; @@ -26,6 +26,10 @@ input { margin-bottom: 10px; } +.search-icon { + padding: 10px; +} + .add-button { width: 44px !important; height: 44px !important; @@ -39,15 +43,16 @@ input { line-height: 100% !important; } -.search-icon { - padding: 10px; +.mat-icon-button { + min-width: 50px; + margin: 10px 2% 0px 0px; } #export-icon { color: rgba(30,136,229,0.7) } -.add-filterIcon { +.filterIcon { font-size: 45px; height: 50px; width: 50px; diff --git a/src/app/components/shared/comment-list/comment-list.component.ts b/src/app/components/shared/comment-list/comment-list.component.ts index 46965aa3b..4ace76365 100644 --- a/src/app/components/shared/comment-list/comment-list.component.ts +++ b/src/app/components/shared/comment-list/comment-list.component.ts @@ -24,7 +24,7 @@ export class CommentListComponent implements OnInit { room: Room; comments: Comment[]; isLoading = true; - hideCommentsList: boolean; + hideCommentsList = false; isIconHide: boolean; filteredComments: Comment[]; userRole: UserRole; @@ -33,7 +33,6 @@ export class CommentListComponent implements OnInit { private translateService: TranslateService, public dialog: MatDialog, protected langService: LanguageService, - private wsCommentService: WsCommentServiceService, private authenticationService: AuthenticationService, private wsCommentService: WsCommentServiceService, protected roomService: RoomService @@ -52,7 +51,6 @@ export class CommentListComponent implements OnInit { this.getComments(); this.translateService.use(localStorage.getItem('currentLang')); this.userRole = this.authenticationService.getRole(); - } getComments(): void { @@ -73,23 +71,25 @@ export class CommentListComponent implements OnInit { } getCommentsCreator(): Comment[] { - // ToDo: get a default comment threshold from config settings file let commentThreshold = -10; - if ( - (this.room.extensions.get('comments') != null) && - (this.room.extensions.get('comments').get('commentThreshold')) - ) { - commentThreshold = this.room.extensions.get('comments').get('commentThreshold'); - } - if (this.hideCommentsList) { - return this.filteredComments.filter( x => x.score >= commentThreshold ); + if (this.room.extensions) { + commentThreshold = this.room.extensions['comments'].commentThreshold; + if (this.hideCommentsList) { + return this.filteredComments.filter( x => x.score >= commentThreshold ); + } else { + return this.comments.filter( x => x.score >= commentThreshold ); + } } else { - return this.comments.filter( x => x.score >= commentThreshold ); + if (this.hideCommentsList) { + return this.filteredComments; + } else { + return this.comments; + } } } getCommentsParticipant(): Comment[] { - if ( this.hideCommentsList) { + if (this.hideCommentsList) { return this.filteredComments; } else { return this.comments; @@ -105,7 +105,7 @@ export class CommentListComponent implements OnInit { c.roomId = this.roomId; c.body = payload.body; c.id = payload.id; - c.creationTimestamp = payload.timestamp; + c.timestamp = payload.timestamp; this.comments = this.comments.concat(c); break; case 'CommentPatched': @@ -136,8 +136,6 @@ export class CommentListComponent implements OnInit { for (let i = 0; i < this.comments.length; i++) { if (payload.id === this.comments[i].id) { this.comments[i].highlighted = <boolean>payload.lights; - console.log(<boolean>payload.lights); - console.log(this.comments[i]); } } break; diff --git a/src/app/components/shared/comment/comment.component.ts b/src/app/components/shared/comment/comment.component.ts index 9b46d4c2c..ea3a50f65 100644 --- a/src/app/components/shared/comment/comment.component.ts +++ b/src/app/components/shared/comment/comment.component.ts @@ -66,7 +66,6 @@ export class CommentComponent implements OnInit { } this.language = localStorage.getItem('currentLang'); this.translateService.use(this.language); - console.log(this.comment); } startAnimation(state_: any): void { diff --git a/src/app/components/shared/header/header.component.html b/src/app/components/shared/header/header.component.html index 9c7192066..3557efb89 100644 --- a/src/app/components/shared/header/header.component.html +++ b/src/app/components/shared/header/header.component.html @@ -55,8 +55,7 @@ <mat-icon>account_box</mat-icon> </button> <button mat-icon-button *ngIf="user" [matMenuTriggerFor]="appMenu"> - <mat-icon *ngIf="user.role === 1" aria-label="Example icon-button with a heart icon">record_voice_over</mat-icon> - <mat-icon *ngIf="user.role === 0" aria-label="Example icon-button with a heart icon">supervisor_account</mat-icon> + <mat-icon>account_box</mat-icon> </button> </mat-toolbar-row> </mat-toolbar> diff --git a/src/app/services/http/room.service.ts b/src/app/services/http/room.service.ts index 544f7848d..4024d54e8 100644 --- a/src/app/services/http/room.service.ts +++ b/src/app/services/http/room.service.ts @@ -5,6 +5,7 @@ import { Observable } from 'rxjs'; import { catchError, tap, map } from 'rxjs/operators'; import { AuthenticationService } from './authentication.service'; import { BaseHttpService } from './base-http.service'; +import { TSMap } from 'typescript-map'; const httpOptions = { headers: new HttpHeaders({}) @@ -58,6 +59,7 @@ export class RoomService extends BaseHttpService { getRoom(id: string): Observable<Room> { const connectionUrl = `${ this.apiUrl.base + this.apiUrl.rooms }/${ id }`; return this.http.get<Room>(connectionUrl).pipe( + map(room => this.parseExtensions(room)), map(room => this.parseDefaultContentGroup(room)), tap(room => this.setRoomId(room)), catchError(this.handleError<Room>(`getRoom keyword=${ id }`)) @@ -105,6 +107,15 @@ export class RoomService extends BaseHttpService { return room; } + parseExtensions(room: Room): Room { + if (room.extensions) { + let extensions: TSMap<string, TSMap<string, any>> = new TSMap(); + extensions = room.extensions; + room.extensions = extensions; + } + return room; + } + setRoomId(room: Room): void { localStorage.setItem('roomId', room.id); } diff --git a/src/assets/i18n/creator/de.json b/src/assets/i18n/creator/de.json index af310c480..e2aed28d1 100644 --- a/src/assets/i18n/creator/de.json +++ b/src/assets/i18n/creator/de.json @@ -15,12 +15,16 @@ "reallySession": "Wollen Sie die Session ", "reallyContent": "Wollen Sie die Frage ", "really2": " wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "deleted": " erfolgreich gelöscht.", "abort": "Abbrechen", "update": "Update", + "changes-successful": "Änderungen erfolgreich.", "default-content-group": "Standard", "description": "Beschreibung", "present": "Präsentieren", - "session-settings": "Session Einstellungen" + "session-settings": "Session Einstellungen", + "general": "Allgemein", + "threshold": "Schwellenwert für sichtbare Kommentare: " }, "content": { "content": "Frage", @@ -80,7 +84,7 @@ "enter-comment": "Kommentar", "send": "Senden", "abort": "Abbrechen", - "error-comment": "Bitte geben Sie ein Kommentar ein.", + "error-comment": "Bitte geben Sie einen Kommentar ein.", "error-title": "Bitte geben Sie einen Titel ein.", "error-both-fields": "Bitte füllen Sie alle Felder aus.", "delimiter": "Bitte wählen Sie ein Trennzeichen:", diff --git a/src/assets/i18n/creator/en.json b/src/assets/i18n/creator/en.json index 45bab43b2..c23dfe04f 100644 --- a/src/assets/i18n/creator/en.json +++ b/src/assets/i18n/creator/en.json @@ -15,12 +15,16 @@ "reallySession": "Do you really want to delete session ", "reallyContent": "Do you really want to delete content ", "really2": "? This action can not be undone.", + "deleted": " successfully deleted.", "abort": "Abort", "update": "Update", + "changes-successful": "Successfully updated.", "default-content-group": "Default", "description": "Description", "present": "Present", - "session-settings": "Session settings" + "session-settings": "Session settings", + "general": "General", + "threshold": "Threshold for visible comments: " }, "content": { "content": "Content", diff --git a/src/theme/default-Theme/defaultTheme.const.ts b/src/theme/default-Theme/defaultTheme.const.ts index bc5d76ae9..8917d2d50 100644 --- a/src/theme/default-Theme/defaultTheme.const.ts +++ b/src/theme/default-Theme/defaultTheme.const.ts @@ -45,5 +45,5 @@ export const defaultTheme = { '--room-list-card-color': '#4db6ac', // shared/room-list.component.scss '--statistic-bg-color': '#fff8e1', // shared/statistic.component.scss & shared/statistics-page.component.scss '--dialog-bg': '#e0f2f1', - '--highlighted-comment' : '#FFD54F' + '--highlighted-comment' : '#FFE082' }; -- GitLab