-import { Component, Input, OnInit } from '@angular/core'
-import { User } from '@app/shared'
-import { I18n } from '@ngx-translate/i18n-polyfill'
-import { Subject } from 'rxjs'
-import { UserNotificationSetting, UserNotificationSettingValue, UserRight } from '../../../../../../shared'
-import { Notifier, ServerService } from '@app/core'
import { debounce } from 'lodash-es'
-import { UserNotificationService } from '@app/shared/users/user-notification.service'
+import { Subject } from 'rxjs'
+import { Component, Input, OnInit } from '@angular/core'
+import { Notifier, ServerService, User } from '@app/core'
+import { UserNotificationService } from '@app/shared/shared-main'
+import { UserNotificationSetting, UserNotificationSettingValue, UserRight } from '@shared/models'
@Component({
selector: 'my-account-notification-preferences',
styleUrls: [ './my-account-notification-preferences.component.scss' ]
})
export class MyAccountNotificationPreferencesComponent implements OnInit {
- @Input() user: User = null
+ @Input() user: User
@Input() userInformationLoaded: Subject<any>
- notificationSettingKeys: (keyof UserNotificationSetting)[] = []
- emailNotifications: { [ id in keyof UserNotificationSetting ]: boolean } = {} as any
- webNotifications: { [ id in keyof UserNotificationSetting ]: boolean } = {} as any
- labelNotifications: { [ id in keyof UserNotificationSetting ]: string } = {} as any
- rightNotifications: { [ id in keyof Partial<UserNotificationSetting> ]: UserRight } = {} as any
- emailEnabled: boolean
+ notificationSettingGroups: { label: string, keys: (keyof UserNotificationSetting)[] }[] = []
+ emailNotifications: { [ id in keyof UserNotificationSetting ]?: boolean } = {}
+ webNotifications: { [ id in keyof UserNotificationSetting ]?: boolean } = {}
+ labelNotifications: { [ id in keyof UserNotificationSetting ]?: string } = {}
+ rightNotifications: { [ id in keyof Partial<UserNotificationSetting> ]?: UserRight } = {}
+ emailEnabled = false
private savePreferences = debounce(this.savePreferencesImpl.bind(this), 500)
constructor (
- private i18n: I18n,
private userNotificationService: UserNotificationService,
private serverService: ServerService,
private notifier: Notifier
) {
this.labelNotifications = {
- newVideoFromSubscription: this.i18n('New video from your subscriptions'),
- newCommentOnMyVideo: this.i18n('New comment on your video'),
- videoAbuseAsModerator: this.i18n('New video abuse'),
- blacklistOnMyVideo: this.i18n('One of your video is blacklisted/unblacklisted'),
- myVideoPublished: this.i18n('Video published (after transcoding/scheduled update)'),
- myVideoImportFinished: this.i18n('Video import finished'),
- newUserRegistration: this.i18n('A new user registered on your instance'),
- newFollow: this.i18n('You or your channel(s) has a new follower'),
- commentMention: this.i18n('Someone mentioned you in video comments')
+ newVideoFromSubscription: $localize`New video from your subscriptions`,
+ newCommentOnMyVideo: $localize`New comment on your video`,
+ abuseAsModerator: $localize`New abuse`,
+ videoAutoBlacklistAsModerator: $localize`An automatically blocked video is awaiting review`,
+ blacklistOnMyVideo: $localize`One of your video is blocked/unblocked`,
+ myVideoPublished: $localize`Video published (after transcoding/scheduled update)`,
+ myVideoImportFinished: $localize`Video import finished`,
+ newUserRegistration: $localize`A new user registered on your instance`,
+ newFollow: $localize`You or your channel(s) has a new follower`,
+ commentMention: $localize`Someone mentioned you in video comments`,
+ newInstanceFollower: $localize`Your instance has a new follower`,
+ autoInstanceFollowing: $localize`Your instance automatically followed another instance`,
+ abuseNewMessage: $localize`An abuse report received a new message`,
+ abuseStateChange: $localize`One of your abuse reports has been accepted or rejected by moderators`,
+ newPeerTubeVersion: $localize`A new PeerTube version is available`,
+ newPluginVersion: $localize`One of your plugin/theme has a new available version`
}
- this.notificationSettingKeys = Object.keys(this.labelNotifications) as (keyof UserNotificationSetting)[]
+ this.notificationSettingGroups = [
+ {
+ label: $localize`Social`,
+ keys: [
+ 'newVideoFromSubscription',
+ 'newFollow',
+ 'commentMention'
+ ]
+ },
+
+ {
+ label: $localize`Your videos`,
+ keys: [
+ 'newCommentOnMyVideo',
+ 'blacklistOnMyVideo',
+ 'myVideoPublished',
+ 'myVideoImportFinished'
+ ]
+ },
+
+ {
+ label: $localize`Moderation`,
+ keys: [
+ 'abuseStateChange',
+ 'abuseNewMessage',
+ 'abuseAsModerator',
+ 'videoAutoBlacklistAsModerator'
+ ]
+ },
+
+ {
+ label: $localize`Administration`,
+ keys: [
+ 'newUserRegistration',
+ 'newInstanceFollower',
+ 'autoInstanceFollowing',
+ 'newPeerTubeVersion',
+ 'newPluginVersion'
+ ]
+ }
+ ]
this.rightNotifications = {
- videoAbuseAsModerator: UserRight.MANAGE_VIDEO_ABUSES,
- newUserRegistration: UserRight.MANAGE_USERS
+ abuseAsModerator: UserRight.MANAGE_ABUSES,
+ videoAutoBlacklistAsModerator: UserRight.MANAGE_VIDEO_BLACKLIST,
+ newUserRegistration: UserRight.MANAGE_USERS,
+ newInstanceFollower: UserRight.MANAGE_SERVER_FOLLOW,
+ autoInstanceFollowing: UserRight.MANAGE_CONFIGURATION,
+ newPeerTubeVersion: UserRight.MANAGE_DEBUG,
+ newPluginVersion: UserRight.MANAGE_DEBUG
}
-
- this.emailEnabled = this.serverService.getConfig().email.enabled
}
ngOnInit () {
+ const serverConfig = this.serverService.getHTMLConfig()
+ this.emailEnabled = serverConfig.email.enabled
+
this.userInformationLoaded.subscribe(() => this.loadNotificationSettings())
}
}
private savePreferencesImpl () {
- this.userNotificationService.updateNotificationSettings(this.user, this.user.notificationSettings)
- .subscribe(
- () => {
- this.notifier.success(this.i18n('Preferences saved'), undefined, 2000)
+ this.userNotificationService.updateNotificationSettings(this.user.notificationSettings)
+ .subscribe({
+ next: () => {
+ this.notifier.success($localize`Preferences saved`, undefined, 2000)
},
- err => this.notifier.error(err.message)
- )
+ error: err => this.notifier.error(err.message)
+ })
}
private loadNotificationSettings () {