Browse Source

use visible directive for checking visibility

pull/15596/head
Barış Can Yılmaz 4 years ago
parent
commit
76ccfca4ae
  1. 2
      npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/current-user.component.html
  2. 4
      npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.html
  3. 15
      npm/ng-packs/packages/theme-shared/src/lib/models/nav-item.ts

2
npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/current-user.component.html

@ -32,7 +32,7 @@
[class.d-block]="smallScreen && currentUserDropdown.isOpen()"
>
<ng-container *ngFor="let item of userMenu.items$ | async; trackBy: trackByFn">
<ng-container *ngIf="item.visible && item.visible()">
<ng-container *abpVisible="!item.visible || item.visible(item)">
<li class="nav-item d-flex align-items-center" *abpPermission="item.requiredPolicy">
<ng-container
*ngIf="item.component; else htmlTemplate"

4
npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.html

@ -1,9 +1,9 @@
<ul class="navbar-nav">
<ng-container *ngFor="let item of navItems.items$ | async; trackBy: trackByFn">
<ng-container *ngIf="item.visible && item.visible() && (item.visible$ | async)">
<ng-container *abpVisible="!item.visible || item.visible(item)">
<li class="nav-item d-flex align-items-center" *abpPermission="item.requiredPolicy">
<ng-container
*ngIf="item.component; else htmlTemplate"
[ngComponentOutlet]="item.component"
[ngComponentOutletInjector]="item | toInjector"

15
npm/ng-packs/packages/theme-shared/src/lib/models/nav-item.ts

@ -1,4 +1,4 @@
import { Type } from '@angular/core';
import { Injector, Type } from '@angular/core';
import { Observable, of } from 'rxjs';
export class NavItem {
@ -8,14 +8,13 @@ export class NavItem {
action?: () => void;
order?: number;
requiredPolicy?: string;
visible?: () => boolean;
visible$?: Observable<boolean>;
visible?: NavBarPropPredicate<NavItem>;
constructor(props: Partial<NavItem>) {
props = {
...props,
visible: props.visible || (() => true),
visible$: props.visible$ || of(true),
};
Object.assign(this, props);
}
}
export type NavBarPropPredicate<T> = (
prop?: T,
injector?: Injector,
) => boolean | Promise<boolean> | Observable<boolean>;

Loading…
Cancel
Save