X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2F%2Badmin%2Fusers%2Fuser-list%2Fuser-list.component.ts;h=86812f73d1b48126682129f42b13e113fb77038d;hb=66357162f8e1227495f09bd4f68446aad7071c6d;hp=b2978212e324f849b84d1f89dfbad35d9b1ee0dd;hpb=bc99dfe54e093e69ba8fd06d36b36fbbda3f45de;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/+admin/users/user-list/user-list.component.ts b/client/src/app/+admin/users/user-list/user-list.component.ts index b2978212e..86812f73d 100644 --- a/client/src/app/+admin/users/user-list/user-list.component.ts +++ b/client/src/app/+admin/users/user-list/user-list.component.ts @@ -1,11 +1,17 @@ import { SortMeta } from 'primeng/api' import { Component, OnInit, ViewChild } from '@angular/core' +import { ActivatedRoute, Params, Router } from '@angular/router' import { AuthService, ConfirmService, Notifier, RestPagination, RestTable, ServerService, UserService } from '@app/core' import { Actor, DropdownAction } from '@app/shared/shared-main' import { UserBanModalComponent } from '@app/shared/shared-moderation' -import { I18n } from '@ngx-translate/i18n-polyfill' import { ServerConfig, User, UserRole } from '@shared/models' -import { Params, Router, ActivatedRoute } from '@angular/router' + +type UserForList = User & { + rawVideoQuota: number + rawVideoQuotaUsed: number + rawVideoQuotaDaily: number + rawVideoQuotaUsedDaily: number +} @Component({ selector: 'my-user-list', @@ -23,9 +29,9 @@ export class UserListComponent extends RestTable implements OnInit { selectedUsers: User[] = [] bulkUserActions: DropdownAction[][] = [] - columns: { key: string, label: string }[] - _selectedColumns: { key: string, label: string }[] + columns: { id: string, label: string }[] + private _selectedColumns: string[] private serverConfig: ServerConfig constructor ( @@ -35,9 +41,8 @@ export class UserListComponent extends RestTable implements OnInit { private userService: UserService, private auth: AuthService, private route: ActivatedRoute, - private router: Router, - private i18n: I18n - ) { + private router: Router + ) { super() } @@ -53,7 +58,7 @@ export class UserListComponent extends RestTable implements OnInit { return this._selectedColumns } - set selectedColumns (val) { + set selectedColumns (val: string[]) { this._selectedColumns = val } @@ -75,26 +80,26 @@ export class UserListComponent extends RestTable implements OnInit { this.bulkUserActions = [ [ { - label: this.i18n('Delete'), - description: this.i18n('Videos will be deleted, comments will be tombstoned.'), + label: $localize`Delete`, + description: $localize`Videos will be deleted, comments will be tombstoned.`, handler: users => this.removeUsers(users), isDisplayed: users => users.every(u => this.authUser.canManage(u)) }, { - label: this.i18n('Ban'), - description: this.i18n('User won\'t be able to login anymore, but videos and comments will be kept as is.'), + label: $localize`Ban`, + description: $localize`User won't be able to login anymore, but videos and comments will be kept as is.`, handler: users => this.openBanUserModal(users), isDisplayed: users => users.every(u => this.authUser.canManage(u) && u.blocked === false) }, { - label: this.i18n('Unban'), + label: $localize`Unban`, handler: users => this.unbanUsers(users), isDisplayed: users => users.every(u => this.authUser.canManage(u) && u.blocked === true) } ], [ { - label: this.i18n('Set Email as Verified'), + label: $localize`Set Email as Verified`, handler: users => this.setEmailsAsVerified(users), isDisplayed: users => { return this.requiresEmailVerification && @@ -105,16 +110,18 @@ export class UserListComponent extends RestTable implements OnInit { ] this.columns = [ - { key: 'username', label: 'Username' }, - { key: 'email', label: 'Email' }, - { key: 'quota', label: 'Video quota' }, - { key: 'role', label: 'Role' }, - { key: 'createdAt', label: 'Created' } + { id: 'username', label: 'Username' }, + { id: 'email', label: 'Email' }, + { id: 'quota', label: 'Video quota' }, + { id: 'role', label: 'Role' }, + { id: 'createdAt', label: 'Created' } ] - this.selectedColumns = [...this.columns] - this.columns.push({ key: 'quotaDaily', label: 'Daily quota' }) - this.columns.push({ key: 'pluginAuth', label: 'Auth plugin' }) - this.columns.push({ key: 'lastLoginDate', label: 'Last login' }) + + this.selectedColumns = this.columns.map(c => c.id) + + this.columns.push({ id: 'quotaDaily', label: 'Daily quota' }) + this.columns.push({ id: 'pluginAuth', label: 'Auth plugin' }) + this.columns.push({ id: 'lastLoginDate', label: 'Last login' }) } getIdentifier () { @@ -132,22 +139,26 @@ export class UserListComponent extends RestTable implements OnInit { } } - getColumn (key: string) { - return this.selectedColumns.find((col: any) => col.key === key) + isSelected (id: string) { + return this.selectedColumns.find(c => c === id) } - getUserVideoQuotaPercentage (user: User & { rawVideoQuota: number, rawVideoQuotaUsed: number}) { + getColumn (id: string) { + return this.columns.find(c => c.id === id) + } + + getUserVideoQuotaPercentage (user: UserForList) { return user.rawVideoQuotaUsed * 100 / user.rawVideoQuota } - getUserVideoQuotaDailyPercentage (user: User & { rawVideoQuotaDaily: number, rawVideoQuotaUsedDaily: number}) { + getUserVideoQuotaDailyPercentage (user: UserForList) { return user.rawVideoQuotaUsedDaily * 100 / user.rawVideoQuotaDaily } openBanUserModal (users: User[]) { for (const user of users) { if (user.username === 'root') { - this.notifier.error(this.i18n('You cannot ban root.')) + this.notifier.error($localize`You cannot ban root.`) return } } @@ -184,17 +195,13 @@ export class UserListComponent extends RestTable implements OnInit { } async unbanUsers (users: User[]) { - const message = this.i18n('Do you really want to unban {{num}} users?', { num: users.length }) - - const res = await this.confirmService.confirm(message, this.i18n('Unban')) + const res = await this.confirmService.confirm($localize`Do you really want to unban ${users.length} users?`, $localize`Unban`) if (res === false) return this.userService.unbanUsers(users) .subscribe( () => { - const message = this.i18n('{{num}} users unbanned.', { num: users.length }) - - this.notifier.success(message) + this.notifier.success($localize`${users.length} users unbanned.`) this.loadData() }, @@ -205,18 +212,18 @@ export class UserListComponent extends RestTable implements OnInit { async removeUsers (users: User[]) { for (const user of users) { if (user.username === 'root') { - this.notifier.error(this.i18n('You cannot delete root.')) + this.notifier.error($localize`You cannot delete root.`) return } } - const message = this.i18n('If you remove these users, you will not be able to create others with the same username!') - const res = await this.confirmService.confirm(message, this.i18n('Delete')) + const message = $localize`If you remove these users, you will not be able to create others with the same username!` + const res = await this.confirmService.confirm(message, $localize`Delete`) if (res === false) return this.userService.removeUser(users).subscribe( () => { - this.notifier.success(this.i18n('{{num}} users deleted.', { num: users.length })) + this.notifier.success($localize`${users.length} users deleted.`) this.loadData() }, @@ -227,7 +234,7 @@ export class UserListComponent extends RestTable implements OnInit { async setEmailsAsVerified (users: User[]) { this.userService.updateUsers(users, { emailVerified: true }).subscribe( () => { - this.notifier.success(this.i18n('{{num}} users email set as verified.', { num: users.length })) + this.notifier.success($localize`${users.length} users email set as verified.`) this.loadData() },