]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/eg2/src/app/staff/admin/server/perm-group-tree.component.html
LP1823981 Angular Permission Group Tree Admin UI
[Evergreen.git] / Open-ILS / src / eg2 / src / app / staff / admin / server / perm-group-tree.component.html
1 <eg-staff-banner bannerText="Permission Group Configuration" i18n-bannerText>
2 </eg-staff-banner>
3
4 <eg-string #createString i18n-text text="Permission Group Mapping Added">
5 </eg-string>
6 <eg-string #successString i18n-text text="Permission Group Update Succeeded">
7 </eg-string>
8 <eg-string #errorString i18n-text text="Permission Group Update Failed">
9 </eg-string>
10
11 <eg-string #createMapString i18n-text text="Permission Group Mapping Added">
12 </eg-string>
13 <eg-string #successMapString i18n-text text="Permission Group Mapping Update Succeeded">
14   </eg-string>
15 <eg-string #errorMapString i18n-text text="Permission Group Mapping Update Failed">
16 </eg-string>
17
18 <eg-fm-record-editor #editDialog idlClass="pgt" readonlyFields="parent"
19    [fieldOptions]="fmEditorOptions()">
20 </eg-fm-record-editor>
21
22 <eg-confirm-dialog #delConfirm                                                 
23   i18n-dialogTitle i18n-dialogBody                                             
24   dialogTitle="Confirm Delete"                                                 
25   dialogBody="Delete Permission Group {{selected ? selected.label : ''}}?">    
26 </eg-confirm-dialog>
27
28
29 <eg-perm-group-map-dialog #addMappingDialog 
30   [permGroup]="selected ? selected.callerData : null"
31   [orgDepths]="orgDepths"
32   [permMaps]="groupPermMaps()" [permissions]="permissions">
33 </eg-perm-group-map-dialog>
34
35 <div class="row">
36   <div class="col-lg-3">
37     <h3 i18n>Permission Groups</h3>
38     <eg-tree [tree]="tree" (nodeClicked)="nodeClicked($event)"></eg-tree>
39   </div>
40   <div class="col-lg-9">
41     <h3 i18n class="mb-3">Selected Permission Group</h3>
42     <ng-container *ngIf="!selected">
43       <div class="alert alert-info font-italic" i18n>
44         Select a permission group from the tree on the left.
45       </div>
46       <ng-container *ngIf="loading">
47           <div class="row">
48             <div class="col-lg-6">
49               <eg-progress-inline></eg-progress-inline>
50             </div>
51           </div>
52         </ng-container>
53     </ng-container>
54     <div *ngIf="selected" class="common-form striped-even">
55       <ngb-tabset>
56         <ngb-tab title="Group Details" i18n-title id="detail">
57           <ng-template ngbTabContent>
58             <div class="row">
59               <div class="col-lg-3">
60                 <label i18n>Actions for Selected: </label>
61               </div>
62               <div class="col-lg-9">
63                 <button class="btn btn-info mr-2" (click)="edit()" i18n>Edit</button>
64                 <button class="btn btn-info mr-2" (click)="addChild()" i18n>Add Child</button>
65                 <button class="btn btn-warning mr-2" (click)="remove()" i18n>Delete</button>
66               </div>
67             </div>
68             <div class="row">
69               <div class="col-lg-4">
70                 <label i18n>Name: </label>
71               </div>
72               <div class="col-lg-8 font-weight-bold">
73                 {{selected.callerData.name()}}
74               </div>
75             </div>
76             <div class="row">
77               <div class="col-lg-4">
78                 <label i18n>Description: </label>
79               </div>
80               <div class="col-lg-8 font-weight-bold">
81                 {{selected.callerData.description()}}
82               </div>
83             </div>
84             <div class="row">
85               <div class="col-lg-4">
86                 <label i18n>User Expiration Interval: </label>
87               </div>
88               <div class="col-lg-8 font-weight-bold">
89                 {{selected.callerData.perm_interval()}}
90               </div>
91             </div>
92             <div class="row">
93               <div class="col-lg-4">
94                 <label i18n>Application Permission: </label>
95               </div>
96               <div class="col-lg-8 font-weight-bold">
97                 {{selected.callerData.application_perm()}}
98               </div>
99             </div>
100             <div class="row">
101               <div class="col-lg-4">
102                 <label i18n>Hold Priority: </label>
103               </div>
104               <div class="col-lg-8 font-weight-bold">
105                 {{selected.callerData.hold_priority()}}
106               </div>
107             </div>
108             <div class="row">
109               <div class="col-lg-4">
110                 <label i18n>User Group?: </label>
111               </div>
112               <div class="col-lg-8 font-weight-bold">
113                 <!-- TODO: replace with <eg-bool/> when merged -->
114                 {{selected.callerData.usergroup() == 't'}}
115               </div>
116             </div>
117           </ng-template>
118         </ngb-tab>
119         <ngb-tab title="Group Permissions" i18n-title id="perm">
120           <ng-template ngbTabContent>
121
122             <div class="row d-flex m-2 mb-3">
123               <button class="btn btn-success" (click)="applyChanges()" i18n
124                 [disabled]='!changesPending()'>
125                 Apply Changes
126               </button>
127               <button class="btn btn-info ml-3" (click)="openAddDialog()" i18n>
128                 Add New Mapping
129               </button>
130               <div class="col-lg-3">
131                 <input class="form-control ml-2" [(ngModel)]="filterText"
132                   i18n-placeholder placeholder="Filter..."/>
133               </div>
134               <button class="btn btn-outline-secondary ml-1" 
135                 (click)="filterText=''" i18n>
136                 Clear
137               </button>
138             </div>
139             
140             <div class="row font-weight-bold">
141               <div class="col-lg-5" i18n>Permissions</div>
142               <div class="col-lg-4" i18n>Group</div>
143               <div class="col-lg-1" i18n>Depth</div>
144               <div class="col-lg-1" i18n>Grantable?</div>
145               <div class="col-lg-1" i18n>Delete?</div>
146             </div>
147
148             <div class="row" *ngFor="let map of groupPermMaps()"
149                 [ngClass]="{'bg-danger': map.isdeleted()}">
150               <div class="col-lg-5">
151                 <span title="{{map.perm().description()}}">{{map.perm().code()}}</span>
152               </div>
153               <ng-container *ngIf="permIsInherited(map); else nativeMap">
154                 <div class="col-lg-4">
155                   <a href="javascript:;" (click)="selectGroup(map.grp().id())">
156                     {{map.grp().name()}}
157                   </a>
158                 </div>
159                 <div class="col-lg-1 text-center">{{map.depth()}}</div>
160                 <!-- TODO migrate to <eg-bool/> once merged-->
161                 <div class="col-lg-1 d-flex flex-column justify-content-center">
162                   <div class="d-flex justify-content-center p-3 rounded border border-secondary">
163                     <eg-bool [value]="map.grantable() == 't'"></eg-bool>
164                   </div>
165                 </div>
166                 <div class="col-lg-1"> </div>
167               </ng-container>
168               <ng-template #nativeMap>
169                 <div class="col-lg-4">{{map.grp().name()}}</div>
170                 <div class="col-lg-1">
171                   <select [ngModel]="map.depth()" class="p-1"
172                     (ngModelChange)="map.depth($event); map.ischanged(true)">
173                     <option *ngFor="let d of orgDepths" value="{{d}}">{{d}}</option>
174                   </select>
175                 </div>
176                 <div class="col-lg-1 d-flex flex-column justify-content-center">
177                   <div class="d-flex justify-content-center p-3 rounded border border-info">                
178                     <input type="checkbox" class="align-middle"
179                       i18n-title title="Grantable?"
180                       [ngModel]="map.grantable() == 't'"
181                       (ngModelChange)="map.grantable($event ? 't' : 'f'); map.ischanged(true)"/>
182                   </div>
183                 </div>
184                 <div class="col-lg-1 d-flex flex-column justify-content-center">
185                   <div class="d-flex justify-content-center p-3 rounded border border-danger">
186                     <input type="checkbox" class="align-middle"
187                       i18n-title title="Delete Mapping"
188                       [ngModel]="map.isdeleted()"
189                       (ngModelChange)="map.isdeleted($event)"/>
190                   </div>
191                 </div>
192               </ng-template>
193             </div>
194             <div class="row d-flex m-2 mb-3">
195               <button class="btn btn-success" (click)="applyChanges()" i18n
196                 [disabled]='!changesPending()'>
197                 Apply Changes
198               </button>
199             </div>
200           </ng-template>
201         </ngb-tab>
202       </ngb-tabset>
203     </div>
204   </div>
205 </div>