X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fshared%2Fshared-moderation%2Fuser-moderation-dropdown.component.ts;h=c69a45c2581fc064c54ae613aebc1aac6453dde0;hb=0164fc112a98897849a8eda2f0b5d208e813e014;hp=e2cd2cdc10255f98fd6841640453d7ae5fd38342;hpb=80badf493afca026bc542260f353210e605a1715;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/shared/shared-moderation/user-moderation-dropdown.component.ts b/client/src/app/shared/shared-moderation/user-moderation-dropdown.component.ts index e2cd2cdc1..c69a45c25 100644 --- a/client/src/app/shared/shared-moderation/user-moderation-dropdown.component.ts +++ b/client/src/app/shared/shared-moderation/user-moderation-dropdown.component.ts @@ -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 + +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 ${user.username} 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`,