Browse Source

add: search for the permission modal

pull/21123/head
sumeyyeKurtulus 2 years ago
parent
commit
98591e8fcd
  1. 147
      npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.html
  2. 51
      npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts

147
npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.html

@ -7,8 +7,20 @@
</h4> </h4>
</ng-template> </ng-template>
<ng-template #abpBody> <ng-template #abpBody>
<div class="row"> <div class="row d-flex align-items-center mb-2">
<div class="col-md-4 scroll-in-modal"> <div class="col">
<div class="input-group mb-2">
<span class="input-group-text" id="basic-addon1"><i class="bi bi-search"></i></span>
<input
type="text"
class="form-control"
id="permission-search"
placeholder="Filter"
[(ngModel)]="filter"
/>
</div>
</div>
<div class="col-auto">
<div class="form-check mb-2"> <div class="form-check mb-2">
<input <input
#selectAllInAllTabsRef #selectAllInAllTabsRef
@ -24,78 +36,83 @@
'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization
}}</label> }}</label>
</div> </div>
<hr class="mt-2 mb-2" />
<div class="overflow-auto">
<ul class="nav nav-pills flex-column">
@for (group of data.groups; track $index) {
<li class="nav-item">
@if ({ assignedCount: getAssignedCount(group.name) }; as count) {
<a
class="nav-link pointer"
[class.active]="selectedGroup?.name === group?.name"
(click)="onChangeGroup(group)"
(select)="setDisabled(group.permissions)"
>
<div [class.font-weight-bold]="count.assignedCount">
{{ group?.displayName }}
@if (count.assignedCount > 0) {
<span>({{ count.assignedCount }})</span>
}
</div>
</a>
}
</li>
}
</ul>
</div>
</div> </div>
</div>
<div class="col-md-8 scroll-in-modal"> <fieldset class="border rounded-4 p-3">
<div class="ps-1"> <legend class="px-1 h5 mb-0">{{ 'Permission Group' }}</legend>
<div class="form-check mb-2"> <div class="row">
<input <div class="col-md-4">
#selectAllInThisTabsRef <div class="overflow-auto lpx-scroll-pills-container scroll-in-modal">
type="checkbox" <ul class="nav nav-pills flex-column">
id="select-all-in-this-tabs" @for (group of permissionGroups; track $index) {
name="select-all-in-this-tabs" <li class="border nav-item">
class="form-check-input" @if ({ assignedCount: getAssignedCount(group.name) }; as count) {
[(ngModel)]="selectThisTab" <a
[disabled]="disableSelectAllTab" class="nav-link pointer"
(click)="onClickSelectThisTab()" [class.active]="selectedGroup?.name === group?.name"
/> (click)="onChangeGroup(group)"
<label class="form-check-label" for="select-all-in-this-tabs">{{ (select)="setDisabled(group.permissions)"
'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization >
}}</label> <div [class.font-weight-bold]="count.assignedCount">
{{ group?.displayName }}
@if (count.assignedCount > 0) {
<span>({{ count.assignedCount }})</span>
}
</div>
</a>
}
</li>
}
</ul>
</div> </div>
<hr class="my-2" /> </div>
@for (permission of selectedGroupPermissions; track $index; let i = $index) {
<div [ngStyle]="permission.style" class="form-check mb-2"> <div class="col-md-8 scroll-in-modal">
<div class="ps-1">
<div class="form-check mb-2">
<input <input
#permissionCheckbox #selectAllInThisTabsRef
type="checkbox" type="checkbox"
[checked]="getChecked(permission.name)" id="select-all-in-this-tabs"
[value]="getChecked(permission.name)" name="select-all-in-this-tabs"
[attr.id]="permission.name"
class="form-check-input" class="form-check-input"
[disabled]="isGrantedByOtherProviderName(permission.grantedProviders)" [(ngModel)]="selectThisTab"
(click)="onClickCheckbox(permission, permissionCheckbox.value)" [disabled]="disableSelectAllTab"
(click)="onClickSelectThisTab()"
/> />
<label class="form-check-label" [attr.for]="permission.name" <label class="form-check-label" for="select-all-in-this-tabs">{{
>{{ permission.displayName }} 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization
@if (!hideBadges) { }}</label>
@for (provider of permission.grantedProviders; track $index) {
<span class="badge bg-primary text-dark"
>{{ provider.providerName }}: {{ provider.providerKey }}</span
>
}
}
</label>
</div> </div>
} <hr class="my-2" />
@for (permission of selectedGroupPermissions; track $index; let i = $index) {
<div [ngStyle]="permission.style" class="form-check mb-2">
<input
#permissionCheckbox
type="checkbox"
[checked]="getChecked(permission.name)"
[value]="getChecked(permission.name)"
[attr.id]="permission.name"
class="form-check-input"
[disabled]="isGrantedByOtherProviderName(permission.grantedProviders)"
(click)="onClickCheckbox(permission, permissionCheckbox.value)"
/>
<label class="form-check-label" [attr.for]="permission.name"
>{{ permission.displayName }}
@if (!hideBadges) {
@for (provider of permission.grantedProviders; track $index) {
<span class="badge bg-primary text-dark"
>{{ provider.providerName }}: {{ provider.providerKey }}</span
>
}
}
</label>
</div>
}
</div>
</div> </div>
</div> </div>
</div> </fieldset>
</ng-template> </ng-template>
<ng-template #abpFooter> <ng-template #abpFooter>
<button type="button" class="btn btn-outline-primary" abpClose> <button type="button" class="btn btn-outline-primary" abpClose>

51
npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts

@ -19,7 +19,7 @@ import {
TrackByFunction, TrackByFunction,
ViewChildren, ViewChildren,
} from '@angular/core'; } from '@angular/core';
import { concat, of } from 'rxjs'; import { BehaviorSubject, concat, of } from 'rxjs';
import { finalize, switchMap, take, tap } from 'rxjs/operators'; import { finalize, switchMap, take, tap } from 'rxjs/operators';
import { PermissionManagement } from '../models/permission-management'; import { PermissionManagement } from '../models/permission-management';
@ -41,10 +41,38 @@ type PermissionWithGroupName = PermissionGrantInfoDto & {
max-height: 70vh; max-height: 70vh;
overflow-y: scroll; overflow-y: scroll;
} }
.scroll-in-modal { .scroll-in-modal {
overflow: auto; overflow: auto;
max-height: calc(100vh - 15rem); max-height: calc(100vh - 15rem);
} }
fieldset legend {
float: none;
width: auto;
}
.lpx-scroll-pills-container ul {
display: block;
max-height: 500px;
overflow-y: auto;
}
.lpx-scroll-pills-container .tab-content {
padding-top: 0 !important;
padding-bottom: 0 !important;
}
.lpx-scroll-pills-container ul li {
margin-bottom: 10px;
border-radius: 10px;
}
.lpx-scroll-pills-container ul li a.active {
color: #fff !important;
border-color: #6c5dd3 !important;
background-color: #6c5dd3 !important;
}
`, `,
], ],
}) })
@ -121,6 +149,10 @@ export class PermissionManagementComponent
selectedGroupPermissions: PermissionWithStyle[] = []; selectedGroupPermissions: PermissionWithStyle[] = [];
filter = '';
permissionGroupSubject = new BehaviorSubject<PermissionGroupDto[]>(null);
trackByFn: TrackByFunction<PermissionGroupDto> = (_, item) => item.name; trackByFn: TrackByFunction<PermissionGroupDto> = (_, item) => item.name;
getChecked(name: string) { getChecked(name: string) {
@ -364,9 +396,11 @@ export class PermissionManagementComponent
return this.service.get(this.providerName, this.providerKey).pipe( return this.service.get(this.providerName, this.providerKey).pipe(
tap((permissionRes: GetPermissionListResultDto) => { tap((permissionRes: GetPermissionListResultDto) => {
const { groups } = permissionRes;
this.data = permissionRes; this.data = permissionRes;
this.permissions = getPermissions(permissionRes.groups); this.permissionGroupSubject.next(groups);
this.setSelectedGroup(permissionRes.groups[0]); this.permissions = getPermissions(groups);
this.setSelectedGroup(groups[0]);
this.disabledSelectAllInAllTabs = this.permissions.every( this.disabledSelectAllInAllTabs = this.permissions.every(
per => per =>
per.isGranted && per.isGranted &&
@ -401,6 +435,17 @@ export class PermissionManagementComponent
return false; return false;
} }
get permissionGroups(): PermissionGroupDto[] {
const permissionGroups = this.permissionGroupSubject.getValue();
if (!permissionGroups) {
return;
}
const search = this.filter.toLowerCase();
return permissionGroups.filter(group =>
group.permissions.some(permission => permission.displayName.toLowerCase().includes(search)),
);
}
} }
function findParentPermissions( function findParentPermissions(

Loading…
Cancel
Save