Client: add ability for user to change nsfw settings
[oweals/peertube.git] / client / src / app / account / account-change-password / account-change-password.component.ts
1 import { Component, OnInit } from '@angular/core';
2 import { FormBuilder, FormGroup } from '@angular/forms';
3 import { Router } from '@angular/router';
4
5 import { NotificationsService } from 'angular2-notifications';
6
7 import { FormReactive, UserService, USER_PASSWORD } from '../../shared';
8
9 @Component({
10   selector: 'my-account-change-password',
11   templateUrl: './account-change-password.component.html'
12 })
13
14 export class AccountChangePasswordComponent extends FormReactive implements OnInit {
15   error: string = null;
16
17   form: FormGroup;
18   formErrors = {
19     'new-password': '',
20     'new-confirmed-password': ''
21   };
22   validationMessages = {
23     'new-password': USER_PASSWORD.MESSAGES,
24     'new-confirmed-password': USER_PASSWORD.MESSAGES
25   };
26
27   constructor(
28     private formBuilder: FormBuilder,
29     private router: Router,
30     private notificationsService: NotificationsService,
31     private userService: UserService
32   ) {
33     super();
34   }
35
36   buildForm() {
37     this.form = this.formBuilder.group({
38       'new-password': [ '', USER_PASSWORD.VALIDATORS ],
39       'new-confirmed-password': [ '', USER_PASSWORD.VALIDATORS ],
40     });
41
42     this.form.valueChanges.subscribe(data => this.onValueChanged(data));
43   }
44
45   ngOnInit() {
46     this.buildForm();
47   }
48
49   changePassword() {
50     const newPassword = this.form.value['new-password'];
51     const newConfirmedPassword = this.form.value['new-confirmed-password'];
52
53     this.error = null;
54
55     if (newPassword !== newConfirmedPassword) {
56       this.error = 'The new password and the confirmed password do not correspond.';
57       return;
58     }
59
60     this.userService.changePassword(newPassword).subscribe(
61       () => this.notificationsService.success('Success', 'Password updated.'),
62
63       err => this.error = err
64     );
65   }
66 }