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=09da979ab4d404b4beb909164bd08ae9bcbb635b;hb=dc4e0ddb742c04bb16a4b921029af263bc240b0e;hp=34febc4577462aa5d62e7a42b370c0e6689422df;hpb=846751c98b8704c09234688be6e7e23b837a3739;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 34febc457..09da979ab 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 @@ -1,11 +1,9 @@ -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', @@ -13,51 +11,98 @@ import { UserNotificationService } from '@app/shared/users/user-notification.ser 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 - 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 ]?: 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'), - videoAutoBlacklistAsModerator: this.i18n('Video auto-blacklisted waiting review'), - 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'), - newInstanceFollower: this.i18n('Your instance has a new follower') + 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, + abuseAsModerator: UserRight.MANAGE_ABUSES, videoAutoBlacklistAsModerator: UserRight.MANAGE_VIDEO_BLACKLIST, newUserRegistration: UserRight.MANAGE_USERS, - newInstanceFollower: UserRight.MANAGE_SERVER_FOLLOW + 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()) } @@ -83,14 +128,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 () {