]> git.ipfire.org Git - thirdparty/paperless-ngx.git/blob
b0c3e8817cf182612ec684b8428328ef468f772a
[thirdparty/paperless-ngx.git] /
1 import { Component, EventEmitter, Input, Output } from '@angular/core'
2 import { first } from 'rxjs'
3 import { User } from 'src/app/data/user'
4 import {
5 PermissionAction,
6 PermissionType,
7 PermissionsService,
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'
12
13 export class PermissionsSelectionModel {
14 ownerFilter: OwnerFilterType
15 hideUnowned: boolean
16 userID: number
17 includeUsers: number[]
18 excludeUsers: number[]
19
20 clear() {
21 this.ownerFilter = OwnerFilterType.NONE
22 this.userID = null
23 this.hideUnowned = false
24 this.includeUsers = []
25 this.excludeUsers = []
26 }
27 }
28
29 export enum OwnerFilterType {
30 NONE = 0,
31 SELF = 1,
32 NOT_SELF = 2,
33 OTHERS = 3,
34 UNOWNED = 4,
35 SHARED_BY_ME = 5,
36 }
37
38 @Component({
39 selector: 'pngx-permissions-filter-dropdown',
40 templateUrl: './permissions-filter-dropdown.component.html',
41 styleUrls: ['./permissions-filter-dropdown.component.scss'],
42 })
43 export class PermissionsFilterDropdownComponent extends ComponentWithPermissions {
44 public OwnerFilterType = OwnerFilterType
45
46 @Input()
47 title: string
48
49 @Input()
50 disabled = false
51
52 @Input()
53 selectionModel: PermissionsSelectionModel
54
55 @Output()
56 ownerFilterSet = new EventEmitter<PermissionsSelectionModel>()
57
58 users: User[]
59
60 hideUnowned: boolean
61
62 get isActive(): boolean {
63 return (
64 this.selectionModel.ownerFilter !== OwnerFilterType.NONE ||
65 this.selectionModel.hideUnowned
66 )
67 }
68
69 constructor(
70 public permissionsService: PermissionsService,
71 userService: UserService,
72 private settingsService: SettingsService
73 ) {
74 super()
75 if (
76 permissionsService.currentUserCan(
77 PermissionAction.View,
78 PermissionType.User
79 )
80 ) {
81 userService
82 .listAll()
83 .pipe(first())
84 .subscribe({
85 next: (result) => (this.users = result.results),
86 })
87 }
88 }
89
90 reset() {
91 this.selectionModel.clear()
92 this.onChange()
93 }
94
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
112 } else if (
113 this.selectionModel.ownerFilter === OwnerFilterType.SHARED_BY_ME
114 ) {
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
124 }
125 this.onChange()
126 }
127
128 onChange() {
129 this.ownerFilterSet.emit(this.selectionModel)
130 }
131
132 onUserSelect() {
133 if (this.selectionModel.includeUsers?.length) {
134 this.selectionModel.ownerFilter = OwnerFilterType.OTHERS
135 } else {
136 this.selectionModel.ownerFilter = OwnerFilterType.NONE
137 }
138 this.onChange()
139 }
140 }