441f89f10729f27653738e23cc42e79831dea4de
[oweals/peertube.git] /
1 import { Component, Input, OnInit } from '@angular/core'
2 import { Notifier, ServerService } from '@app/core'
3 import { ServerConfig, UserUpdateMe } from '../../../../../../shared'
4 import { AuthService } from '../../../core'
5 import { FormReactive, User, UserService } from '../../../shared'
6 import { I18n } from '@ngx-translate/i18n-polyfill'
7 import { FormValidatorService } from '@app/shared/forms/form-validators/form-validator.service'
8 import { Subject } from 'rxjs'
9
10 @Component({
11   selector: 'my-account-interface-settings',
12   templateUrl: './my-account-interface-settings.component.html',
13   styleUrls: [ './my-account-interface-settings.component.scss' ]
14 })
15 export class MyAccountInterfaceSettingsComponent extends FormReactive implements OnInit {
16   @Input() user: User = null
17   @Input() userInformationLoaded: Subject<any>
18
19   private serverConfig: ServerConfig
20
21   constructor (
22     protected formValidatorService: FormValidatorService,
23     private authService: AuthService,
24     private notifier: Notifier,
25     private userService: UserService,
26     private serverService: ServerService,
27     private i18n: I18n
28   ) {
29     super()
30   }
31
32   get availableThemes () {
33     return this.serverConfig.theme.registered
34                .map(t => t.name)
35   }
36
37   ngOnInit () {
38     this.serverConfig = this.serverService.getTmpConfig()
39     this.serverService.getConfig()
40         .subscribe(config => this.serverConfig = config)
41
42     this.buildForm({
43       theme: null
44     })
45
46     this.userInformationLoaded
47       .subscribe(() => {
48         this.form.patchValue({
49           theme: this.user.theme
50         })
51       })
52   }
53
54   updateInterfaceSettings () {
55     const theme = this.form.value['theme']
56
57     const details: UserUpdateMe = {
58       theme
59     }
60
61     this.userService.updateMyProfile(details).subscribe(
62       () => {
63         this.authService.refreshUserInformation()
64
65         this.notifier.success(this.i18n('Interface settings updated.'))
66       },
67
68       err => this.notifier.error(err.message)
69     )
70   }
71 }