Add separators in user moderation dropdown
This commit is contained in:
parent
9fa0ea41aa
commit
f97c91f7ec
4 changed files with 36 additions and 14 deletions
|
@ -8,14 +8,20 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div ngbDropdownMenu class="dropdown-menu">
|
<div ngbDropdownMenu class="dropdown-menu">
|
||||||
<ng-container *ngFor="let action of actions">
|
<ng-container *ngFor="let actions of getActions()">
|
||||||
<ng-container *ngIf="action.isDisplayed === undefined || action.isDisplayed(entry) === true">
|
|
||||||
<a *ngIf="action.linkBuilder" class="dropdown-item" [routerLink]="action.linkBuilder(entry)">{{ action.label }}</a>
|
|
||||||
|
|
||||||
<span *ngIf="!action.linkBuilder" class="custom-action dropdown-item" (click)="action.handler(entry)" role="button">
|
<ng-container *ngFor="let action of actions">
|
||||||
{{ action.label }}
|
<ng-container *ngIf="action.isDisplayed === undefined || action.isDisplayed(entry) === true">
|
||||||
</span>
|
<a *ngIf="action.linkBuilder" class="dropdown-item" [routerLink]="action.linkBuilder(entry)">{{ action.label }}</a>
|
||||||
|
|
||||||
|
<span *ngIf="!action.linkBuilder" class="custom-action dropdown-item" (click)="action.handler(entry)" role="button">
|
||||||
|
{{ action.label }}
|
||||||
|
</span>
|
||||||
|
</ng-container>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
|
<div class="dropdown-divider"></div>
|
||||||
|
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
|
@ -1,6 +1,10 @@
|
||||||
@import '_variables';
|
@import '_variables';
|
||||||
@import '_mixins';
|
@import '_mixins';
|
||||||
|
|
||||||
|
.dropdown-divider:last-child {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
.action-button {
|
.action-button {
|
||||||
@include peertube-button;
|
@include peertube-button;
|
||||||
|
|
||||||
|
|
|
@ -14,10 +14,16 @@ export type DropdownAction<T> = {
|
||||||
})
|
})
|
||||||
|
|
||||||
export class ActionDropdownComponent<T> {
|
export class ActionDropdownComponent<T> {
|
||||||
@Input() actions: DropdownAction<T>[] = []
|
@Input() actions: DropdownAction<T>[] | DropdownAction<T>[][] = []
|
||||||
@Input() entry: T
|
@Input() entry: T
|
||||||
@Input() placement = 'bottom-left'
|
@Input() placement = 'bottom-left'
|
||||||
@Input() buttonSize: 'normal' | 'small' = 'normal'
|
@Input() buttonSize: 'normal' | 'small' = 'normal'
|
||||||
@Input() label: string
|
@Input() label: string
|
||||||
@Input() theme: 'orange' | 'grey' = 'grey'
|
@Input() theme: 'orange' | 'grey' = 'grey'
|
||||||
|
|
||||||
|
getActions () {
|
||||||
|
if (this.actions.length !== 0 && Array.isArray(this.actions[0])) return this.actions
|
||||||
|
|
||||||
|
return [ this.actions ]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ export class UserModerationDropdownComponent implements OnChanges {
|
||||||
@Output() userChanged = new EventEmitter()
|
@Output() userChanged = new EventEmitter()
|
||||||
@Output() userDeleted = new EventEmitter()
|
@Output() userDeleted = new EventEmitter()
|
||||||
|
|
||||||
userActions: DropdownAction<{ user: User, account: Account }>[] = []
|
userActions: DropdownAction<{ user: User, account: Account }>[][] = []
|
||||||
|
|
||||||
constructor (
|
constructor (
|
||||||
private authService: AuthService,
|
private authService: AuthService,
|
||||||
|
@ -264,7 +264,7 @@ export class UserModerationDropdownComponent implements OnChanges {
|
||||||
if (this.user && authUser.id === this.user.id) return
|
if (this.user && authUser.id === this.user.id) return
|
||||||
|
|
||||||
if (this.user && authUser.hasRight(UserRight.MANAGE_USERS)) {
|
if (this.user && authUser.hasRight(UserRight.MANAGE_USERS)) {
|
||||||
this.userActions = this.userActions.concat([
|
this.userActions.push([
|
||||||
{
|
{
|
||||||
label: this.i18n('Edit'),
|
label: this.i18n('Edit'),
|
||||||
linkBuilder: ({ user }) => this.getRouterUserEditLink(user)
|
linkBuilder: ({ user }) => this.getRouterUserEditLink(user)
|
||||||
|
@ -294,7 +294,7 @@ export class UserModerationDropdownComponent implements OnChanges {
|
||||||
// Actions on accounts/servers
|
// Actions on accounts/servers
|
||||||
if (this.account) {
|
if (this.account) {
|
||||||
// User actions
|
// User actions
|
||||||
this.userActions = this.userActions.concat([
|
this.userActions.push([
|
||||||
{
|
{
|
||||||
label: this.i18n('Mute this account'),
|
label: this.i18n('Mute this account'),
|
||||||
isDisplayed: ({ account }: { account: Account }) => account.mutedByUser === false,
|
isDisplayed: ({ account }: { account: Account }) => account.mutedByUser === false,
|
||||||
|
@ -317,9 +317,11 @@ export class UserModerationDropdownComponent implements OnChanges {
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
|
||||||
|
let instanceActions: DropdownAction<{ user: User, account: Account }>[] = []
|
||||||
|
|
||||||
// Instance actions
|
// Instance actions
|
||||||
if (authUser.hasRight(UserRight.MANAGE_ACCOUNTS_BLOCKLIST)) {
|
if (authUser.hasRight(UserRight.MANAGE_ACCOUNTS_BLOCKLIST)) {
|
||||||
this.userActions = this.userActions.concat([
|
instanceActions = instanceActions.concat([
|
||||||
{
|
{
|
||||||
label: this.i18n('Mute this account by your instance'),
|
label: this.i18n('Mute this account by your instance'),
|
||||||
isDisplayed: ({ account }: { account: Account }) => account.mutedByInstance === false,
|
isDisplayed: ({ account }: { account: Account }) => account.mutedByInstance === false,
|
||||||
|
@ -335,7 +337,7 @@ export class UserModerationDropdownComponent implements OnChanges {
|
||||||
|
|
||||||
// Instance actions
|
// Instance actions
|
||||||
if (authUser.hasRight(UserRight.MANAGE_SERVERS_BLOCKLIST)) {
|
if (authUser.hasRight(UserRight.MANAGE_SERVERS_BLOCKLIST)) {
|
||||||
this.userActions = this.userActions.concat([
|
instanceActions = instanceActions.concat([
|
||||||
{
|
{
|
||||||
label: this.i18n('Mute the instance by your instance'),
|
label: this.i18n('Mute the instance by your instance'),
|
||||||
isDisplayed: ({ account }: { account: Account }) => !account.userId && account.mutedServerByInstance === false,
|
isDisplayed: ({ account }: { account: Account }) => !account.userId && account.mutedServerByInstance === false,
|
||||||
|
@ -348,6 +350,10 @@ export class UserModerationDropdownComponent implements OnChanges {
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (instanceActions.length !== 0) {
|
||||||
|
this.userActions.push(instanceActions)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue