Browse Source

feat: add findRequiredPolicy method to routes.component

pull/4423/head
mehmet-erim 6 years ago
parent
commit
c27791e52a
  1. 5
      npm/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.html
  2. 35
      npm/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.ts

5
npm/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.html

@ -18,8 +18,8 @@
<ng-template #dropdownLink let-route>
<li
#navbarRootDropdown
*abpPermission="route.requiredPolicy"
[abpVisibility]="routeContainer"
*ngIf="findRequiredPolicy(route)"
[abpPermission]="route.requiredPolicy"
class="nav-item dropdown"
display="static"
(click)="
@ -69,7 +69,6 @@
<ng-template #dropdownChild let-child>
<div
[abpVisibility]="childrenContainer"
class="dropdown-submenu"
ngbDropdown
#dropdownSubmenu="ngbDropdown"

35
npm/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.ts

@ -1,5 +1,6 @@
import { ABP, RoutesService, TreeNode } from '@abp/ng.core';
import { ABP, RoutesService, TreeNode, LocalizationService, ConfigState } from '@abp/ng.core';
import { Component, Input, TrackByFunction } from '@angular/core';
import { Store } from '@ngxs/store';
@Component({
selector: 'abp-routes',
@ -10,5 +11,35 @@ export class RoutesComponent {
trackByFn: TrackByFunction<TreeNode<ABP.Route>> = (_, item) => item.name;
constructor(public readonly routes: RoutesService) {}
constructor(public readonly routes: RoutesService, private store: Store) {}
findRequiredPolicy(route: TreeNode<ABP.Route>): boolean {
if (route.requiredPolicy || !route.children?.length) return true;
const policies = getPolicies(route.children);
let isVisible = true;
for (let i = 0; i < policies.length; i++) {
if (!this.store.selectSnapshot(ConfigState.getGrantedPolicy(policies[i]))) {
isVisible = false;
break;
}
}
return isVisible;
}
}
function getPolicies(routes: TreeNode<ABP.Route>[]): string[] {
return routes.reduce((acc, val) => {
if (val.requiredPolicy) acc.push(val.requiredPolicy);
if (val.children?.length) {
const childPolicies = getPolicies(val.children);
if (childPolicies?.length) acc.push(...childPolicies);
}
return acc;
}, []);
}

Loading…
Cancel
Save