]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/shared/shared-moderation/user-moderation-dropdown.component.ts
Merge branch 'release/4.2.0' into develop
[github/Chocobozzz/PeerTube.git] / client / src / app / shared / shared-moderation / user-moderation-dropdown.component.ts
index e2cd2cdc10255f98fd6841640453d7ae5fd38342..c69a45c2581fc064c54ae613aebc1aac6453dde0 100644 (file)
@@ -1,11 +1,22 @@
 import { Component, EventEmitter, Input, OnChanges, OnInit, Output, ViewChild } from '@angular/core'
-import { AuthService, ConfirmService, Notifier, ServerService, UserService } from '@app/core'
+import { AuthService, ConfirmService, Notifier, ServerService } from '@app/core'
 import { Account, DropdownAction } from '@app/shared/shared-main'
 import { BulkRemoveCommentsOfBody, User, UserRight } from '@shared/models'
+import { UserAdminService } from '../shared-users'
 import { BlocklistService } from './blocklist.service'
 import { BulkService } from './bulk.service'
 import { UserBanModalComponent } from './user-ban-modal.component'
 
+export type AccountMutedStatus =
+  Pick<Account, 'id' | 'nameWithHost' | 'host' | 'userId' |
+  'mutedByInstance' | 'mutedByUser' | 'mutedServerByInstance' | 'mutedServerByUser'>
+
+export type UserModerationDisplayType = {
+  myAccount?: boolean
+  instanceAccount?: boolean
+  instanceUser?: boolean
+}
+
 @Component({
   selector: 'my-user-moderation-dropdown',
   templateUrl: './user-moderation-dropdown.component.html'
@@ -14,8 +25,8 @@ export class UserModerationDropdownComponent implements OnInit, OnChanges {
   @ViewChild('userBanModal') userBanModal: UserBanModalComponent
 
   @Input() user: User
-  @Input() account: Account
-  @Input() prependActions: DropdownAction<{ user: User, account: Account }>[]
+  @Input() account: AccountMutedStatus
+  @Input() prependActions: DropdownAction<{ user: User, account: AccountMutedStatus }>[]
 
   @Input() buttonSize: 'normal' | 'small' = 'normal'
   @Input() buttonStyled = true
@@ -23,10 +34,16 @@ export class UserModerationDropdownComponent implements OnInit, OnChanges {
   @Input() label: string
   @Input() container: 'body' | undefined = undefined
 
+  @Input() displayOptions: UserModerationDisplayType = {
+    myAccount: true,
+    instanceAccount: true,
+    instanceUser: true
+  }
+
   @Output() userChanged = new EventEmitter()
   @Output() userDeleted = new EventEmitter()
 
-  userActions: DropdownAction<{ user: User, account: Account }>[][] = []
+  userActions: DropdownAction<{ user: User, account: AccountMutedStatus }>[][] = []
 
   requiresEmailVerification = false
 
@@ -35,7 +52,7 @@ export class UserModerationDropdownComponent implements OnInit, OnChanges {
     private notifier: Notifier,
     private confirmService: ConfirmService,
     private serverService: ServerService,
-    private userService: UserService,
+    private userAdminService: UserAdminService,
     private blocklistService: BlocklistService,
     private bulkService: BulkService
   ) { }
@@ -66,7 +83,7 @@ export class UserModerationDropdownComponent implements OnInit, OnChanges {
     const res = await this.confirmService.confirm($localize`Do you really want to unban ${user.username}?`, $localize`Unban`)
     if (res === false) return
 
-    this.userService.unbanUsers(user)
+    this.userAdminService.unbanUsers(user)
         .subscribe({
           next: () => {
             this.notifier.success($localize`User ${user.username} unbanned.`)
@@ -83,11 +100,12 @@ export class UserModerationDropdownComponent implements OnInit, OnChanges {
       return
     }
 
-    const message = $localize`If you remove user ${user.username}, you won't be able to create another with the same username!`
+    // eslint-disable-next-line max-len
+    const message = $localize`If you remove this user, you won't be able to create another user or channel with <strong>${user.username}</strong> username!`
     const res = await this.confirmService.confirm(message, $localize`Delete ${user.username}`)
     if (res === false) return
 
-    this.userService.removeUser(user)
+    this.userAdminService.removeUser(user)
       .subscribe({
         next: () => {
           this.notifier.success($localize`User ${user.username} deleted.`)
@@ -99,7 +117,7 @@ export class UserModerationDropdownComponent implements OnInit, OnChanges {
   }
 
   setEmailAsVerified (user: User) {
-    this.userService.updateUser(user.id, { emailVerified: true })
+    this.userAdminService.updateUser(user.id, { emailVerified: true })
       .subscribe({
         next: () => {
           this.notifier.success($localize`User ${user.username} email set as verified`)
@@ -110,7 +128,7 @@ export class UserModerationDropdownComponent implements OnInit, OnChanges {
       })
   }
 
-  blockAccountByUser (account: Account) {
+  blockAccountByUser (account: AccountMutedStatus) {
     this.blocklistService.blockAccountByUser(account)
         .subscribe({
           next: () => {
@@ -124,7 +142,7 @@ export class UserModerationDropdownComponent implements OnInit, OnChanges {
         })
   }
 
-  unblockAccountByUser (account: Account) {
+  unblockAccountByUser (account: AccountMutedStatus) {
     this.blocklistService.unblockAccountByUser(account)
         .subscribe({
           next: () => {
@@ -166,7 +184,7 @@ export class UserModerationDropdownComponent implements OnInit, OnChanges {
         })
   }
 
-  blockAccountByInstance (account: Account) {
+  blockAccountByInstance (account: AccountMutedStatus) {
     this.blocklistService.blockAccountByInstance(account)
         .subscribe({
           next: () => {
@@ -180,7 +198,7 @@ export class UserModerationDropdownComponent implements OnInit, OnChanges {
         })
   }
 
-  unblockAccountByInstance (account: Account) {
+  unblockAccountByInstance (account: AccountMutedStatus) {
     this.blocklistService.unblockAccountByInstance(account)
         .subscribe({
           next: () => {
@@ -245,7 +263,7 @@ export class UserModerationDropdownComponent implements OnInit, OnChanges {
     return user && this.authService.getUser().id === user.id
   }
 
-  private isMyAccount (account: Account) {
+  private isMyAccount (account: AccountMutedStatus) {
     return account && this.authService.getUser().account.id === account.id
   }
 
@@ -266,9 +284,9 @@ export class UserModerationDropdownComponent implements OnInit, OnChanges {
   }
 
   private buildMyAccountModerationActions () {
-    if (!this.account || !this.authService.isLoggedIn()) return []
+    if (!this.account || !this.displayOptions.myAccount || !this.authService.isLoggedIn()) return []
 
-    const myAccountActions: DropdownAction<{ user: User, account: Account }>[] = [
+    const myAccountActions: DropdownAction<{ user: User, account: AccountMutedStatus }>[] = [
       {
         label: $localize`My account moderation`,
         class: [ 'red' ],
@@ -314,9 +332,9 @@ export class UserModerationDropdownComponent implements OnInit, OnChanges {
 
     const authUser = this.authService.getUser()
 
-    let instanceActions: DropdownAction<{ user: User, account: Account }>[] = []
+    let instanceActions: DropdownAction<{ user: User, account: AccountMutedStatus }>[] = []
 
-    if (this.user && authUser.hasRight(UserRight.MANAGE_USERS) && authUser.canManage(this.user)) {
+    if (this.user && this.displayOptions.instanceUser && authUser.hasRight(UserRight.MANAGE_USERS) && authUser.canManage(this.user)) {
       instanceActions = instanceActions.concat([
         {
           label: $localize`Edit user`,
@@ -350,7 +368,7 @@ export class UserModerationDropdownComponent implements OnInit, OnChanges {
     }
 
     // Instance actions on account blocklists
-    if (this.account && authUser.hasRight(UserRight.MANAGE_ACCOUNTS_BLOCKLIST)) {
+    if (this.account && this.displayOptions.instanceAccount && authUser.hasRight(UserRight.MANAGE_ACCOUNTS_BLOCKLIST)) {
       instanceActions = instanceActions.concat([
         {
           label: $localize`Mute this account`,
@@ -368,7 +386,7 @@ export class UserModerationDropdownComponent implements OnInit, OnChanges {
     }
 
     // Instance actions on server blocklists
-    if (this.account && authUser.hasRight(UserRight.MANAGE_SERVERS_BLOCKLIST)) {
+    if (this.account && this.displayOptions.instanceAccount && authUser.hasRight(UserRight.MANAGE_SERVERS_BLOCKLIST)) {
       instanceActions = instanceActions.concat([
         {
           label: $localize`Mute the instance`,
@@ -385,7 +403,7 @@ export class UserModerationDropdownComponent implements OnInit, OnChanges {
       ])
     }
 
-    if (this.account && authUser.hasRight(UserRight.REMOVE_ANY_VIDEO_COMMENT)) {
+    if (this.account && this.displayOptions.instanceAccount && authUser.hasRight(UserRight.REMOVE_ANY_VIDEO_COMMENT)) {
       instanceActions = instanceActions.concat([
         {
           label: $localize`Remove comments from your instance`,