diff --git a/src/app/components/participant/_dialogs/user-bonus-token/user-bonus-token.component.html b/src/app/components/participant/_dialogs/user-bonus-token/user-bonus-token.component.html index 3dde3c87c2d63e0f092e9660baf95f3de456a207..d0a2061b1db17c71f59ef3b3334a3e4312e8785d 100644 --- a/src/app/components/participant/_dialogs/user-bonus-token/user-bonus-token.component.html +++ b/src/app/components/participant/_dialogs/user-bonus-token/user-bonus-token.component.html @@ -1,5 +1,5 @@ <div mat-dialog-content> - <h2 class="oldtypo-h2" tabindex="0">{{'header.bonus-token' | translate }}</h2> + <h2 class="oldtypo-h2" tabindex="0">{{'user-bonus-token.header' | translate }}</h2> <mat-divider></mat-divider> <div *ngIf="bonusTokensMixin.length >= 1"> <div fxLayout="column" class="tokens" *ngFor="let bonusToken of bonusTokensMixin; let i = index" @@ -7,9 +7,27 @@ <h2 class="token" tabindex="1">{{bonusToken.token}}</h2> <h2 class="roomName">(»{{bonusToken.roomName}}«)</h2> </div> + <mat-divider></mat-divider> + <div fxLayout="column"> + <form class="example-form"> + <mat-form-field class="example-full-width"> + <mat-label>{{ 'user-bonus-token.choose-session' | translate }}</mat-label> + <input type="text" matInput [matAutocomplete]="auto"> + <mat-autocomplete #auto="matAutocomplete"> + <mat-option *ngFor="let bt of bonusTokensMixin" [value]="bt.roomName" (onSelectionChange)="setCurrentRoom(bt)"> + {{bt.roomName}} + </mat-option> + </mat-autocomplete> + </mat-form-field> + <button mat-flat-button class="mailto" (click)="openMail()"> + <mat-icon>email</mat-icon> + {{ 'user-bonus-token.redeem-tokens' | translate }} + </button> + </form> + </div> </div> <div *ngIf="bonusTokens.length === 0"> - <h3 class="oldtypo-h3" tabindex="0">{{'header.no-bonus' | translate }}</h3> + <h3 class="oldtypo-h3" tabindex="0">{{'user-bonus-token.no-bonus' | translate }}</h3> </div> <app-dialog-action-buttons buttonsLabelSection="introduction" diff --git a/src/app/components/participant/_dialogs/user-bonus-token/user-bonus-token.component.scss b/src/app/components/participant/_dialogs/user-bonus-token/user-bonus-token.component.scss index 33b5a8f04d0294dcb2abc8bcb18ac3339086fa80..89af3b00004e85795e3f630a554e27145949ea65 100644 --- a/src/app/components/participant/_dialogs/user-bonus-token/user-bonus-token.component.scss +++ b/src/app/components/participant/_dialogs/user-bonus-token/user-bonus-token.component.scss @@ -15,3 +15,13 @@ h2 { text-align: center; } + +.mailto { + background-color: var(--primary); + color: var(--on-primary); +} + +form { + margin: 10px 0; + text-align: center; +} diff --git a/src/app/components/participant/_dialogs/user-bonus-token/user-bonus-token.component.ts b/src/app/components/participant/_dialogs/user-bonus-token/user-bonus-token.component.ts index 49f3bd5274e0f47ea43e2a6cebe8935411f61da6..19fdfedc4324c6a8b3e84d90f03fc9cf7cd5d2f3 100644 --- a/src/app/components/participant/_dialogs/user-bonus-token/user-bonus-token.component.ts +++ b/src/app/components/participant/_dialogs/user-bonus-token/user-bonus-token.component.ts @@ -5,6 +5,7 @@ import { BonusToken } from '../../../../models/bonus-token'; import { BonusTokenRoomMixin } from '../../../../models/bonus-token-room-mixin'; import { MatDialogRef } from '@angular/material'; import { Router } from '@angular/router'; +import { TranslateService } from '@ngx-translate/core'; @Component({ selector: 'app-user-bonus-token', @@ -15,12 +16,14 @@ export class UserBonusTokenComponent implements OnInit { userId: string; bonusTokens: BonusToken[] = []; bonusTokensMixin: BonusTokenRoomMixin[] = []; + currentBT: BonusTokenRoomMixin; constructor( private bonusTokenService: BonusTokenService, private roomService: RoomService, private dialogRef: MatDialogRef<UserBonusTokenComponent>, - protected router: Router + protected router: Router, + public translationService: TranslateService ) { } @@ -46,6 +49,34 @@ export class UserBonusTokenComponent implements OnInit { this.router.navigate([commentURL]); } + getTokensByRoom(shortId: string): string { + let tokens = ''; + for (const bt of this.bonusTokensMixin) { + if (bt.roomShortId === shortId) { + tokens += bt.token + '%0D%0A%0D%0A'; + } + } + return tokens; + } + + setCurrentRoom(bt: BonusTokenRoomMixin) { + this.currentBT = bt; + } + + openMail() { + const sessionName = this.currentBT.roomName; + const sessionId = this.currentBT.roomShortId; + const translationList = ['user-bonus-token.mail-subject', 'user-bonus-token.mail-body-1', 'user-bonus-token.mail-body-2', + 'user-bonus-token.mail-body-3', 'user-bonus-token.mail-body-4']; + let mailText: string; + this.translationService.get(translationList).subscribe(msgs => { + console.log(msgs); + mailText = 'mailto:?subject=' + msgs[translationList[0]] + sessionName + '%C2%AB&body=' + msgs[translationList[1]] + sessionName + + msgs[translationList[2]] + sessionId + msgs[translationList[3]] + this.getTokensByRoom(sessionId) + msgs[translationList[4]]; + window.location.href = mailText; + }); + } + /** * Returns a lambda which closes the dialog on call. */ diff --git a/src/assets/i18n/home/de.json b/src/assets/i18n/home/de.json index 338f4264f838d1e0874dfe0d468572a433b25d1e..fd1bff65d0aa8deae0a7e29f9499ff45213598b6 100644 --- a/src/assets/i18n/home/de.json +++ b/src/assets/i18n/home/de.json @@ -63,9 +63,7 @@ "sure": "Bist du sicher?", "user-bonus-token": "Zu deinen Bonus Tokens", "user-got-tokens": "Du hast noch Tokens für Bonuspunkte, die verloren gehen!", - "visited-sessions": "Besuchte Sitzungen", - "bonus-token": "Tokens für Bonuspunkte", - "no-bonus": "Noch keine Bonuspunkte erhalten." + "visited-sessions": "Besuchte Sitzungen" }, "help": { "cancel": "Schließen", @@ -241,7 +239,15 @@ "cancel-description": "Abbrechen" }, "user-bonus-token": { - "header": "Tokens für Bonuspunkte" + "header": "Tokens für Bonuspunkte", + "no-bonus": "Noch keine Bonuspunkte erhalten.", + "redeem-tokens": "Tokens einlösen", + "mail-subject": "Bitte%20um%20Einl%C3%B6sung%20meiner%20Tokens%20aus%20der%20%C2%BBfrag.jetzt%C2%AB-Sitzung%20%C2%BB", + "mail-body-1": "Hallo%2C%0D%0A%0D%0Aich%20habe%20heute%20in%20der%20%C2%BBfrag.jetzt%C2%AB-Sitzung%20%C2%BB", + "mail-body-2": "%C2%AB%20mit%20dem%20Sitzungs-Code%20%C2%BB", + "mail-body-3": "%C2%AB%20die%20folgenden%20Tokens%20erhalten%3A%0D%0A%0D%0A", + "mail-body-4": "%0D%0A%0D%0AIch%20bitte%20um%20die%20Einl%C3%B6sung%20in%20Bonuspunkte.%0D%0A%0D%0ADanke%20f%C3%BCr%20%C2%BBfrag.jetzt%C2%AB!%0D%0A%0D%0A---", + "choose-session": "Wähle eine Sitzung aus" }, "qr-dialog": { "session": "Sitzung" diff --git a/src/assets/i18n/home/en.json b/src/assets/i18n/home/en.json index 5af8e3f9519aa715e66107422d904758ea6d564a..575c9812863d66f4b4d30373ccd91e6655a739dc 100644 --- a/src/assets/i18n/home/en.json +++ b/src/assets/i18n/home/en.json @@ -64,9 +64,7 @@ "sure": "Are you sure?", "user-bonus-token": "See your bonus tokens", "user-got-tokens": "You have bonus tokens linked to this account that will be lost!", - "visited-sessions": "Visited sessions", - "bonus-token": "Tokens for bonus points", - "no-bonus": "No bonus points earned yet." + "visited-sessions": "Visited sessions" }, "help": { "cancel": "Close", @@ -241,8 +239,16 @@ "cancel": "Cancel", "cancel-description": "Cancel" }, - "user-bonus-token-dialog": { - "header": "Tokens for bonus points" + "user-bonus-token": { + "header": "Tokens for bonus points", + "no-bonus": "No bonus points earned yet.", + "redeem-tokens": "Redeem tokens", + "mail-subject": "Request%20to%20redeem%20my%20tokens%20from%20the%20%C2%BBfrag.jetzt%C2%AB-session%20%C2%BB", + "mail-body-1": "Hello%2C%0D%0A%0D%0Ai%20have%20received%20the%20following%20tokens%20today%20in%20the%20%C2%BBfrag.jetzt%C2%AB-session%20%C2%BB", + "mail-body-2": "%C2%AB%20with%20the%20session%20code%20%C2%BB", + "mail-body-3": "%C2%AB%3A%0D%0A%0D%0A", + "mail-body-4": "%0D%0A%0D%0AI%20ask%20for%20the%20redemption%20in%20bonus%20points.%0D%0A%0D%0AThanks%20for%20%C2%BBfrag.jetzt%C2%AB!%0D%0A%0D%0A---", + "choose-session": "Choose a session" }, "qr-dialog": { "session": "Session"