1 import { Component, EventEmitter, Input, Output } from '@angular/core'
2 import { first } from 'rxjs'
3 import { User } from 'src/app/data/user'
8 } from 'src/app/services/permissions.service'
9 import { UserService } from 'src/app/services/rest/user.service'
10 import { SettingsService } from 'src/app/services/settings.service'
11 import { ComponentWithPermissions } from '../../with-permissions/with-permissions.component'
13 export class PermissionsSelectionModel {
14 ownerFilter: OwnerFilterType
17 includeUsers: number[]
18 excludeUsers: number[]
21 this.ownerFilter = OwnerFilterType.NONE
23 this.hideUnowned = false
24 this.includeUsers = []
25 this.excludeUsers = []
29 export enum OwnerFilterType {
39 selector: 'pngx-permissions-filter-dropdown',
40 templateUrl: './permissions-filter-dropdown.component.html',
41 styleUrls: ['./permissions-filter-dropdown.component.scss'],
43 export class PermissionsFilterDropdownComponent extends ComponentWithPermissions {
44 public OwnerFilterType = OwnerFilterType
53 selectionModel: PermissionsSelectionModel
56 ownerFilterSet = new EventEmitter<PermissionsSelectionModel>()
62 get isActive(): boolean {
64 this.selectionModel.ownerFilter !== OwnerFilterType.NONE ||
65 this.selectionModel.hideUnowned
70 public permissionsService: PermissionsService,
71 userService: UserService,
72 private settingsService: SettingsService
76 permissionsService.currentUserCan(
77 PermissionAction.View,
85 next: (result) => (this.users = result.results),
91 this.selectionModel.clear()
95 setFilter(type: OwnerFilterType) {
96 this.selectionModel.ownerFilter = type
97 if (this.selectionModel.ownerFilter === OwnerFilterType.SELF) {
98 this.selectionModel.includeUsers = []
99 this.selectionModel.excludeUsers = []
100 this.selectionModel.userID = this.settingsService.currentUser.id
101 this.selectionModel.hideUnowned = false
102 } else if (this.selectionModel.ownerFilter === OwnerFilterType.NOT_SELF) {
103 this.selectionModel.userID = null
104 this.selectionModel.includeUsers = []
105 this.selectionModel.excludeUsers = [this.settingsService.currentUser.id]
106 this.selectionModel.hideUnowned = false
107 } else if (this.selectionModel.ownerFilter === OwnerFilterType.NONE) {
108 this.selectionModel.userID = null
109 this.selectionModel.includeUsers = []
110 this.selectionModel.excludeUsers = []
111 this.selectionModel.hideUnowned = false
113 this.selectionModel.ownerFilter === OwnerFilterType.SHARED_BY_ME
115 this.selectionModel.userID = this.settingsService.currentUser.id
116 this.selectionModel.includeUsers = []
117 this.selectionModel.excludeUsers = []
118 this.selectionModel.hideUnowned = false
119 } else if (this.selectionModel.ownerFilter === OwnerFilterType.UNOWNED) {
120 this.selectionModel.userID = null
121 this.selectionModel.includeUsers = []
122 this.selectionModel.excludeUsers = []
123 this.selectionModel.hideUnowned = false
129 this.ownerFilterSet.emit(this.selectionModel)
133 if (this.selectionModel.includeUsers?.length) {
134 this.selectionModel.ownerFilter = OwnerFilterType.OTHERS
136 this.selectionModel.ownerFilter = OwnerFilterType.NONE