X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2F%2Bmy-account%2Fmy-account-settings%2Fmy-account-notification-preferences%2Fmy-account-notification-preferences.component.ts;h=769ab647a66a58d5c935c88b57ae4e906a6b4ab2;hb=cb0eda5602a21d1626a7face32de6153ed07b5f9;hp=8562e564b85ffa5bac14fcef09392c487c0a2ba2;hpb=2291a412d25bd139398ca9e7a5131d0c1e4ffd7d;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/+my-account/my-account-settings/my-account-notification-preferences/my-account-notification-preferences.component.ts b/client/src/app/+my-account/my-account-settings/my-account-notification-preferences/my-account-notification-preferences.component.ts index 8562e564b..769ab647a 100644 --- a/client/src/app/+my-account/my-account-settings/my-account-notification-preferences/my-account-notification-preferences.component.ts +++ b/client/src/app/+my-account/my-account-settings/my-account-notification-preferences/my-account-notification-preferences.component.ts @@ -3,7 +3,6 @@ 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 { I18n } from '@ngx-translate/i18n-polyfill' import { UserNotificationSetting, UserNotificationSettingValue, UserRight } from '@shared/models' @Component({ @@ -12,54 +11,99 @@ import { UserNotificationSetting, UserNotificationSettingValue, UserRight } from styleUrls: [ './my-account-notification-preferences.component.scss' ] }) export class MyAccountNotificationPreferencesComponent implements OnInit { - @Input() user: User = null + @Input() user: User @Input() userInformationLoaded: Subject - 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 ]: UserRight } = {} as any + 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 ]?: 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'), - abuseAsModerator: this.i18n('New abuse'), - videoAutoBlacklistAsModerator: this.i18n('Video blocked automatically waiting review'), - blacklistOnMyVideo: this.i18n('One of your video is blocked/unblocked'), - 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'), - newInstanceFollower: this.i18n('Your instance has a new follower'), - autoInstanceFollowing: this.i18n('Your instance auto followed another instance') + 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 one of your channels 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`, + myVideoStudioEditionFinished: $localize`Video studio edition has finished` } - 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', + 'myVideoStudioEditionFinished' + ] + }, + + { + label: $localize`Moderation`, + keys: [ + 'abuseStateChange', + 'abuseNewMessage', + 'abuseAsModerator', + 'videoAutoBlacklistAsModerator' + ] + }, + + { + label: $localize`Administration`, + keys: [ + 'newUserRegistration', + 'newInstanceFollower', + 'autoInstanceFollowing', + 'newPeerTubeVersion', + 'newPluginVersion' + ] + } + ] this.rightNotifications = { abuseAsModerator: UserRight.MANAGE_ABUSES, videoAutoBlacklistAsModerator: UserRight.MANAGE_VIDEO_BLACKLIST, newUserRegistration: UserRight.MANAGE_USERS, newInstanceFollower: UserRight.MANAGE_SERVER_FOLLOW, - autoInstanceFollowing: UserRight.MANAGE_CONFIGURATION + autoInstanceFollowing: UserRight.MANAGE_CONFIGURATION, + newPeerTubeVersion: UserRight.MANAGE_DEBUG, + newPluginVersion: UserRight.MANAGE_DEBUG } } ngOnInit () { - this.serverService.getConfig() - .subscribe(config => { - this.emailEnabled = config.email.enabled - }) + const serverConfig = this.serverService.getHTMLConfig() + this.emailEnabled = serverConfig.email.enabled this.userInformationLoaded.subscribe(() => this.loadNotificationSettings()) } @@ -86,14 +130,14 @@ export class MyAccountNotificationPreferencesComponent implements OnInit { } 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 () {