| <!-- |
| ~ Licensed to the Apache Software Foundation (ASF) under one |
| ~ or more contributor license agreements. See the NOTICE file |
| ~ distributed with this work for additional information |
| ~ regarding copyright ownership. The ASF licenses this file |
| ~ to you under the Apache License, Version 2.0 (the |
| ~ "License"); you may not use this file except in compliance |
| ~ with the License. You may obtain a copy of the License at |
| ~ |
| ~ http://www.apache.org/licenses/LICENSE-2.0 |
| ~ |
| ~ Unless required by applicable law or agreed to in writing, |
| ~ software distributed under the License is distributed on an |
| ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| ~ KIND, either express or implied. See the License for the |
| ~ specific language governing permissions and limitations |
| ~ under the License. |
| --> |
| |
| <div class="manage-roles base-retreat"> |
| <div class="sub-nav"> |
| <div> |
| <button mat-raised-button class="butt add-group" (click)="stepperView = !stepperView"> |
| <i class="material-icons">people_outline</i>Add group |
| </button> |
| </div> |
| <div></div> |
| </div> |
| |
| <mat-card *ngIf="stepperView" class="m-top-10"> |
| <mat-horizontal-stepper #stepper class="stepper ani"> |
| <mat-step [completed]='false'> |
| <ng-template matStepLabel>Groups</ng-template> |
| <div class="inner-step mat-reset"> |
| <input [validator]="groupValidarion()" type="text" placeholder="Enter group name" [(ngModel)]="setupGroup" |
| #setupGroupName="ngModel"> |
| <div class="error" *ngIf="setupGroupName.errors?.patterns && setupGroupName.dirty">Group name can only |
| contain letters, numbers, hyphens and '_'</div> |
| <div class="error" *ngIf="setupGroupName.errors?.duplicate && setupGroupName.dirty">Group name already |
| exists</div> |
| </div> |
| <div class="text-center m-bott-10"> |
| <button mat-raised-button (click)="resetDialog()" class="butt">Cancel</button> |
| <button mat-raised-button matStepperNext class="butt">Next<i |
| class="material-icons">keyboard_arrow_right</i></button> |
| </div> |
| </mat-step> |
| |
| <mat-step [completed]='false'> |
| <ng-template matStepLabel>Users</ng-template> |
| <div class="inner-step mat-reset"> |
| <input type="text" placeholder="Enter user login" [(ngModel)]="setupUser"> |
| </div> |
| <div class="text-center m-bott-10"> |
| <button mat-raised-button matStepperPrevious class="butt"><i |
| class="material-icons">keyboard_arrow_left</i>Back</button> |
| <button mat-raised-button (click)="resetDialog()" class="butt">Cancel</button> |
| <button mat-raised-button matStepperNext class="butt">Next<i |
| class="material-icons">keyboard_arrow_right</i></button> |
| </div> |
| </mat-step> |
| |
| <mat-step [completed]='false'> |
| <ng-template matStepLabel>Roles</ng-template> |
| <div class="inner-step mat-reset roles"> |
| <div class="selector-wrapper"> |
| <multi-level-select-dropdown |
| (selectionChange)="onUpdate($event)" |
| name="roles" |
| [items]="rolesList" |
| [model]="setupRoles"> |
| </multi-level-select-dropdown> |
| </div> |
| </div> |
| <div class="text-center m-bott-10"> |
| <button mat-raised-button matStepperPrevious class="butt"><i |
| class="material-icons">keyboard_arrow_left</i>Back</button> |
| <button mat-raised-button (click)="resetDialog()" class="butt">Cancel</button> |
| <button mat-raised-button (click)="manageAction('create', 'group')" class="butt butt-success" |
| [disabled]="!setupGroup || setupGroupName.errors?.patterns || setupGroupName.errors?.duplicate || !setupRoles.length">Create</button> |
| </div> |
| </mat-step> |
| |
| </mat-horizontal-stepper> |
| </mat-card> |
| <mat-divider></mat-divider> |
| |
| <div *ngIf="groupsData.length" class="ani"> |
| <table mat-table [dataSource]="groupsData" class="projects-table mat-elevation-z6"> |
| <ng-container matColumnDef="name"> |
| <th mat-header-cell *matHeaderCellDef class="name"> Group name </th> |
| <td mat-cell *matCellDef="let element"> {{element.group}} </td> |
| </ng-container> |
| |
| <ng-container matColumnDef="roles"> |
| <th mat-header-cell *matHeaderCellDef class="roles"> Roles </th> |
| <td mat-cell *matCellDef="let element" class="roles"> |
| <div class="inner-step mat-reset"> |
| <multi-level-select-dropdown |
| (selectionChange)="onUpdate($event)" |
| [type]="element.group" |
| [items]="rolesList" |
| [model]="element.selected_roles"> |
| |
| </multi-level-select-dropdown> |
| </div> |
| </td> |
| </ng-container> |
| |
| <ng-container matColumnDef="users"> |
| <th mat-header-cell *matHeaderCellDef class="users"> Users </th> |
| <td mat-cell *matCellDef="let element" class="users-list ani"> |
| <mat-form-field class="chip-list"> |
| <input #user matInput placeholder="Enter user login" pattern="[@.-_0-9a-zA-Z]" |
| (keydown.enter)="addUser(user.value, element); user.value = ''"> |
| <button mat-icon-button matSuffix (click)="addUser(user.value, element); user.value = ''"> |
| <mat-icon>person_add</mat-icon> |
| </button> |
| </mat-form-field> |
| <div class="list-selected list-container ani"> |
| <mat-chip-list> |
| <mat-chip *ngFor="let user of element.users"> |
| {{ user }} |
| <a class="material-icons" (click)="removeUser(element.users, user)">clear</a> |
| </mat-chip> |
| </mat-chip-list> |
| </div> |
| </td> |
| </ng-container> |
| |
| <ng-container matColumnDef="actions"> |
| <th mat-header-cell *matHeaderCellDef class="actions"></th> |
| <td mat-cell *matCellDef="let element" class="actions"> |
| <div class="actions-wrapper"> |
| <span (click)="manageAction('delete', 'group', element)" class="reset ani"> |
| <mat-icon>delete_forever</mat-icon> |
| </span> |
| <span class="apply ani big-icon" matTooltip="Group cannot be updated without any selected role" |
| matTooltipPosition="above" [matTooltipDisabled]="element.selected_roles.length > 0" |
| [ngClass]="{ 'not-allowed' : !element.selected_roles.length || isGroupChanded(element)}" |
| (click)="manageAction('update', 'group', element)"> |
| <mat-icon [ngClass]="{'big-icon': !isGroupChanded(element) && element.selected_roles.length}">done</mat-icon> |
| </span> |
| </div> |
| </td> |
| </ng-container> |
| |
| <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr> |
| <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr> |
| </table> |
| |
| </div> |
| </div> |