diff --git a/src/app/components/shared/_dialogs/delete-account/delete-account.component.html b/src/app/components/shared/_dialogs/delete-account/delete-account.component.html new file mode 100644 index 0000000000000000000000000000000000000000..08d64539e9a143f87970c16695bc2f1af4cdbb61 --- /dev/null +++ b/src/app/components/shared/_dialogs/delete-account/delete-account.component.html @@ -0,0 +1,11 @@ +<h3>{{ 'header.sure' | translate }}</h3> +<mat-divider></mat-divider> +<p>{{ 'header.really-delete-account' | translate }}</p> +<div fxLayout="row" fxLayoutAlign="center" fxLayoutGap="10px"> + <button mat-raised-button class="abort" (click)="close('abort')"> + {{ 'header.abort' | translate }} + </button> + <button mat-raised-button class="delete" (click)="close('delete')"> + {{ 'header.delete' | translate }} + </button> +</div> diff --git a/src/app/components/shared/_dialogs/delete-account/delete-account.component.scss b/src/app/components/shared/_dialogs/delete-account/delete-account.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/app/components/shared/_dialogs/delete-account/delete-account.component.spec.ts b/src/app/components/shared/_dialogs/delete-account/delete-account.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..8bdd1734913243fc3e3688a6bfe2b74d37b332ea --- /dev/null +++ b/src/app/components/shared/_dialogs/delete-account/delete-account.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DeleteAccountComponent } from './delete-account.component'; + +describe('DeleteAccountComponent', () => { + let component: DeleteAccountComponent; + let fixture: ComponentFixture<DeleteAccountComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ DeleteAccountComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(DeleteAccountComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/components/shared/_dialogs/delete-account/delete-account.component.ts b/src/app/components/shared/_dialogs/delete-account/delete-account.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..ff6d4af4e9a5f5620c84e51a6a9868e58008e961 --- /dev/null +++ b/src/app/components/shared/_dialogs/delete-account/delete-account.component.ts @@ -0,0 +1,21 @@ +import { Component, Inject, OnInit } from '@angular/core'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material'; +import { RoomEditComponent } from '../../../creator/_dialogs/room-edit/room-edit.component'; + +@Component({ + selector: 'app-delete-account', + templateUrl: './delete-account.component.html', + styleUrls: ['./delete-account.component.scss'] +}) +export class DeleteAccountComponent implements OnInit { + + constructor(public dialogRef: MatDialogRef<RoomEditComponent>, + @Inject(MAT_DIALOG_DATA) public data: any) { } + + ngOnInit() { + } + + close(type: string): void { + this.dialogRef.close(type); + } +} diff --git a/src/app/components/shared/header/header.component.ts b/src/app/components/shared/header/header.component.ts index e90ae9a8a43f832f23f6e9535c7a90e02a3972e5..8005f9d13732c47750de4fce60f5d1496f14259e 100644 --- a/src/app/components/shared/header/header.component.ts +++ b/src/app/components/shared/header/header.component.ts @@ -8,6 +8,8 @@ import { Location } from '@angular/common'; import { TranslateService } from '@ngx-translate/core'; import { MatDialog } from '@angular/material'; import { LoginComponent } from '../login/login.component'; +import { DeleteAccountComponent } from '../_dialogs/delete-account/delete-account.component'; +import { UserService } from '../../../services/http/user.service'; @Component({ selector: 'app-header', @@ -26,7 +28,8 @@ export class HeaderComponent implements OnInit { private notificationService: NotificationService, public router: Router, private translationService: TranslateService, - public dialog: MatDialog + public dialog: MatDialog, + private userService: UserService ) { } @@ -83,7 +86,7 @@ export class HeaderComponent implements OnInit { this.translationService.get('header.logged-out').subscribe(message => { this.notificationService.show(message); }); - this.router.navigate(['/']); + this.navToHome(); } goBack() { @@ -98,8 +101,30 @@ export class HeaderComponent implements OnInit { dialogRef.componentInstance.isStandard = true; } + navToHome() { + this.router.navigate(['/']); + } + + deleteAccount(id: string) { + this.userService.delete(id).subscribe(); + this.translationService.get('header.account-deleted').subscribe(msg => { + this.notificationService.show(msg); + }); + this.navToHome(); + } + openDeleteUserDialog() { - this.notificationService.show('Not implemented yet'); + const dialogRef = this.dialog.open(DeleteAccountComponent, { + width: '600px' + }); + dialogRef.afterClosed() + .subscribe(result => { + if (result === 'abort') { + return; + } else if (result === 'delete') { + this.deleteAccount(this.user.id); + } + }); } } diff --git a/src/app/components/shared/shared.module.ts b/src/app/components/shared/shared.module.ts index 98dde61d4a1eb52b67f07c8ba1d86860b207b155..ed95e571c6a61c9b388dd276026f90d848afd29d 100644 --- a/src/app/components/shared/shared.module.ts +++ b/src/app/components/shared/shared.module.ts @@ -24,6 +24,7 @@ import { StatisticHelpComponent } from './_dialogs/statistic-help/statistic-help import { CommentComponent } from './comment/comment.component'; import { CreateCommentComponent } from './_dialogs/create-comment/create-comment.component'; import { PresentCommentComponent } from './_dialogs/present-comment/present-comment.component'; +import { DeleteAccountComponent } from './_dialogs/delete-account/delete-account.component'; @NgModule({ imports: [ @@ -54,7 +55,8 @@ import { PresentCommentComponent } from './_dialogs/present-comment/present-comm StatisticHelpComponent, CommentComponent, CreateCommentComponent, - PresentCommentComponent + PresentCommentComponent, + DeleteAccountComponent ], exports: [ RoomJoinComponent, @@ -80,7 +82,8 @@ import { PresentCommentComponent } from './_dialogs/present-comment/present-comm LoginComponent, StatisticHelpComponent, CreateCommentComponent, - PresentCommentComponent + PresentCommentComponent, + DeleteAccountComponent ] }) export class SharedModule { diff --git a/src/app/services/http/user.service.ts b/src/app/services/http/user.service.ts index a05b033d847d6b3986d8dadd5c3d6a3311f5dfb6..12d1abf33d3aa4aeaad1be5e5ca6d63e79b3e29c 100644 --- a/src/app/services/http/user.service.ts +++ b/src/app/services/http/user.service.ts @@ -2,6 +2,8 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/Observable'; import { HttpClient, HttpHeaders } from '@angular/common/http'; import { BaseHttpService } from './base-http.service'; +import { User } from '../../models/user'; +import { catchError, tap } from 'rxjs/operators'; const httpOptions = { headers: new HttpHeaders({}) @@ -26,4 +28,12 @@ export class UserService extends BaseHttpService { return this.http.post<string>(connectionUrl, { }, httpOptions); } + + delete(id: string): Observable<User> { + const connectionUrl: string = this.apiUrl.base + this.apiUrl.user + '/' + id; + return this.http.delete<User>(connectionUrl, httpOptions).pipe( + tap(_ => ''), + catchError(this.handleError<User>('deleteUser')) + ); + } } diff --git a/src/assets/i18n/home/de.json b/src/assets/i18n/home/de.json index 16ef0bbb55e1dd0f6163021866035ed5bdd02cf9..cc91281ea4d6dd396142713c0d561fd9128cae9a 100644 --- a/src/assets/i18n/home/de.json +++ b/src/assets/i18n/home/de.json @@ -9,7 +9,12 @@ "my-account": "Konto", "id": "ID", "moderation-enabled": "Moderiert", - "delete-account": "Account löschen" + "delete-account": "Account löschen", + "sure": "Sind Sie sicher?", + "really-delete-account": "Wollen Sie ihr Konto wirklich löschen?", + "account-deleted": "Ihr Konto wurde erfolgreich gelöscht.", + "abort": "Abbrechen", + "delete": "Löschen" }, "login-page": { "creator": "Dozent/in", diff --git a/src/assets/i18n/home/en.json b/src/assets/i18n/home/en.json index 516c3c3139d789209fcae5684302a1ec339e1f92..382fa00a7c882a5f153d51a6145fde3b0daaabbd 100644 --- a/src/assets/i18n/home/en.json +++ b/src/assets/i18n/home/en.json @@ -9,7 +9,12 @@ "my-account": "My account", "id": "ID", "moderation-enabled": "Moderated", - "delete-account": "Delete account" + "delete-account": "Delete account", + "sure": "Are you sure?", + "really-delete-account": "Do you really want to delete your account?", + "account-deleted": "Your account has been deleted successfully.", + "abort": "Cancel", + "delete": "Delete" }, "login-page": { "creator": "Professor",