UNPKG

angular-sidebar-menu

Version:

The sources for this package are in the [Angular Sidebar Menu](https://github.com/mledour/angular-sidebar-menu) repo. Please file issues and pull requests against that repo.

108 lines 13.5 kB
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, Input, Output, ViewChildren, } from '@angular/core'; import { combineLatest, Subject } from 'rxjs'; import { filter, takeUntil } from 'rxjs/operators'; import { NodeService } from './node.service'; import { RoleService } from './role.service'; import { openCloseAnimation } from './node.animations'; import { ItemComponent } from './item.component'; import { trackByItem } from './utils'; export class NodeComponent { constructor(nodeService, roleService, changeDetectorRef) { this.nodeService = nodeService; this.roleService = roleService; this.changeDetectorRef = changeDetectorRef; this.disable = false; this.isActive = new EventEmitter(); this.isFiltered = new EventEmitter(); this.isOpen = false; this.isActiveChild = false; this.trackByItem = trackByItem; this.onDestroy$ = new Subject(); } get open() { return this.isOpen; } ngAfterViewInit() { this.openedNodeSubscription(); this.activeItemsSubscription(); this.filterItemsSubscription(); } ngOnDestroy() { this.onDestroy$.next(); this.onDestroy$.complete(); } onNodeToggleClick() { this.isOpen = !this.isOpen; this.nodeService.openedNode.next({ nodeComponent: this, nodeLevel: this.level }); this.changeDetectorRef.markForCheck(); } activeItemsSubscription() { const isChildrenItemsActive = this.menuItemComponents.map((item) => item.isActive$); if (isChildrenItemsActive && isChildrenItemsActive.length) { combineLatest(isChildrenItemsActive) .pipe(takeUntil(this.onDestroy$)) .subscribe((itemsActiveState) => { this.isOpen = this.isActiveChild = itemsActiveState.includes(true); this.isActive.emit(this.isOpen); }); } } filterItemsSubscription() { const isChildrenItemsFiltered = this.menuItemComponents.map((item) => item.isFiltered$); if (isChildrenItemsFiltered && isChildrenItemsFiltered.length) { combineLatest(isChildrenItemsFiltered) .pipe(takeUntil(this.onDestroy$)) .subscribe((itemsFilteredState) => { const isItemsFiltered = itemsFilteredState.includes(false) === false; this.isFiltered.emit(isItemsFiltered); }); } } openedNodeSubscription() { this.nodeService.openedNode .pipe(filter(() => !!this.isOpen), filter((node) => node.nodeComponent !== this), takeUntil(this.onDestroy$)) .subscribe((node) => { if (node.nodeLevel <= this.level) { this.isOpen = false; this.changeDetectorRef.markForCheck(); } }); } } NodeComponent.decorators = [ { type: Component, args: [{ selector: 'asm-menu-node', animations: [openCloseAnimation], changeDetection: ChangeDetectionStrategy.OnPush, template: `<ul [@openClose]="isOpen"> <li *ngIf="level === 0" class="asm-menu-item"> <span class="asm-menu-node__label">{{ menuItem.label }}</span> </li> <ng-container *ngFor="let childItem of menuItem.children; trackBy: trackByItem"> <li asm-menu-item class="asm-menu-item" *ngIf="roleService.showItem$(childItem.roles) | async" [menuItem]="childItem" [level]="level + 1" [disable]="disable" ></li> </ng-container> </ul>` },] } ]; NodeComponent.ctorParameters = () => [ { type: NodeService }, { type: RoleService }, { type: ChangeDetectorRef } ]; NodeComponent.propDecorators = { menuItem: [{ type: Input }], level: [{ type: Input }], disable: [{ type: Input }], isActive: [{ type: Output }], isFiltered: [{ type: Output }], open: [{ type: HostBinding, args: ['class.asm-menu-node--open',] }], menuItemComponents: [{ type: ViewChildren, args: [ItemComponent,] }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3NyYy9saWIvaW50ZXJuYWwvbm9kZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFFTixZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUluRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBc0J0QyxNQUFNLE9BQU8sYUFBYTtJQW9CeEIsWUFDUyxXQUF3QixFQUN4QixXQUF3QixFQUN2QixpQkFBb0M7UUFGckMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDdkIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQXBCckMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVmLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ3ZDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBUW5ELFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixnQkFBVyxH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TUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDcEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3ZDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzs7WUF0R0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxlQUFlO2dCQUN6QixVQUFVLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDaEMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07Z0JBQy9DLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7UUFjSjthQUNQOzs7WUF6QlEsV0FBVztZQUNYLFdBQVc7WUFqQmxCLGlCQUFpQjs7O3VCQTJDaEIsS0FBSztvQkFDTCxLQUFLO3NCQUNMLEtBQUs7dUJBRUwsTUFBTTt5QkFDTixNQUFNO21CQUVOLFdBQVcsU0FBQywyQkFBMkI7aUNBSXZDLFlBQVksU0FBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICcuLi9zaWRlYmFyLW1lbnUuaW50ZXJmYWNlJztcblxuaW1wb3J0IHsgTm9kZVNlcnZpY2UgfSBmcm9tICcuL25vZGUuc2VydmljZSc7XG5pbXBvcnQgeyBSb2xlU2VydmljZSB9IGZyb20gJy4vcm9sZS5zZXJ2aWNlJztcbmltcG9ydCB7IG9wZW5DbG9zZUFuaW1hdGlvbiB9IGZyb20gJy4vbm9kZS5hbmltYXRpb25zJztcbmltcG9ydCB7IEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2l0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IHRyYWNrQnlJdGVtIH0gZnJvbSAnLi91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FzbS1tZW51LW5vZGUnLFxuICBhbmltYXRpb25zOiBbb3BlbkNsb3NlQW5pbWF0aW9uXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgPHVsIFtAb3BlbkNsb3NlXT1cImlzT3BlblwiPlxuICAgIDxsaSAqbmdJZj1cImxldmVsID09PSAwXCIgY2xhc3M9XCJhc20tbWVudS1pdGVtXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImFzbS1tZW51LW5vZGVfX2xhYmVsXCI+e3sgbWVudUl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgPC9saT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaGlsZEl0ZW0gb2YgbWVudUl0ZW0uY2hpbGRyZW47IHRyYWNrQnk6IHRyYWNrQnlJdGVtXCI+XG4gICAgICA8bGlcbiAgICAgICAgYXNtLW1lbnUtaXRlbVxuICAgICAgICBjbGFzcz1cImFzbS1tZW51LWl0ZW1cIlxuICAgICAgICAqbmdJZj1cInJvbGVTZXJ2aWNlLnNob3dJdGVtJChjaGlsZEl0ZW0ucm9sZXMpIHwgYXN5bmNcIlxuICAgICAgICBbbWVudUl0ZW1dPVwiY2hpbGRJdGVtXCJcbiAgICAgICAgW2xldmVsXT1cImxldmVsICsgMVwiXG4gICAgICAgIFtkaXNhYmxlXT1cImRpc2FibGVcIlxuICAgICAgPjwvbGk+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdWw+YCxcbn0pXG5leHBvcnQgY2xhc3MgTm9kZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIG1lbnVJdGVtITogTWVudUl0ZW07XG4gIEBJbnB1dCgpIGxldmVsITogbnVtYmVyO1xuICBASW5wdXQoKSBkaXNhYmxlID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIGlzQWN0aXZlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgaXNGaWx0ZXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFzbS1tZW51LW5vZGUtLW9wZW4nKSBnZXQgb3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc09wZW47XG4gIH1cblxuICBAVmlld0NoaWxkcmVuKEl0ZW1Db21wb25lbnQpIHByaXZhdGUgbWVudUl0ZW1Db21wb25lbnRzITogUXVlcnlMaXN0PEl0ZW1Db21wb25lbnQ+O1xuXG4gIGlzT3BlbiA9IGZhbHNlO1xuICBpc0FjdGl2ZUNoaWxkID0gZmFsc2U7XG4gIHRyYWNrQnlJdGVtID0gdHJhY2tCeUl0ZW07XG5cbiAgcHJpdmF0ZSBvbkRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbm9kZVNlcnZpY2U6IE5vZGVTZXJ2aWNlLFxuICAgIHB1YmxpYyByb2xlU2VydmljZTogUm9sZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5lZE5vZGVTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLmFjdGl2ZUl0ZW1zU3Vic2NyaXB0aW9uKCk7XG4gICAgdGhpcy5maWx0ZXJJdGVtc1N1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIG9uTm9kZVRvZ2dsZUNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuaXNPcGVuID0gIXRoaXMuaXNPcGVuO1xuICAgIHRoaXMubm9kZVNlcnZpY2Uub3BlbmVkTm9kZS5uZXh0KHsgbm9kZUNvbXBvbmVudDogdGhpcywgbm9kZUxldmVsOiB0aGlzLmxldmVsIH0pO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGFjdGl2ZUl0ZW1zU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGlzQ2hpbGRyZW5JdGVtc0FjdGl2ZSA9IHRoaXMubWVudUl0ZW1Db21wb25lbnRzLm1hcCgoaXRlbSkgPT4gaXRlbS5pc0FjdGl2ZSQpO1xuXG4gICAgaWYgKGlzQ2hpbGRyZW5JdGVtc0FjdGl2ZSAmJiBpc0NoaWxkcmVuSXRlbXNBY3RpdmUubGVuZ3RoKSB7XG4gICAgICBjb21iaW5lTGF0ZXN0KGlzQ2hpbGRyZW5JdGVtc0FjdGl2ZSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95JCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKGl0ZW1zQWN0aXZlU3RhdGUpID0+IHtcbiAgICAgICAgICB0aGlzLmlzT3BlbiA9IHRoaXMuaXNBY3RpdmVDaGlsZCA9IGl0ZW1zQWN0aXZlU3RhdGUuaW5jbHVkZXModHJ1ZSk7XG4gICAgICAgICAgdGhpcy5pc0FjdGl2ZS5lbWl0KHRoaXMuaXNPcGVuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJJdGVtc1N1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBpc0NoaWxkcmVuSXRlbXNGaWx0ZXJlZCA9IHRoaXMubWVudUl0ZW1Db21wb25lbnRzLm1hcCgoaXRlbSkgPT4gaXRlbS5pc0ZpbHRlcmVkJCk7XG5cbiAgICBpZiAoaXNDaGlsZHJlbkl0ZW1zRmlsdGVyZWQgJiYgaXNDaGlsZHJlbkl0ZW1zRmlsdGVyZWQubGVuZ3RoKSB7XG4gICAgICBjb21iaW5lTGF0ZXN0KGlzQ2hpbGRyZW5JdGVtc0ZpbHRlcmVkKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoaXRlbXNGaWx0ZXJlZFN0YXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNJdGVtc0ZpbHRlcmVkID0gaXRlbXNGaWx0ZXJlZFN0YXRlLmluY2x1ZGVzKGZhbHNlKSA9PT0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5pc0ZpbHRlcmVkLmVtaXQoaXNJdGVtc0ZpbHRlcmVkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvcGVuZWROb2RlU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMubm9kZVNlcnZpY2Uub3BlbmVkTm9kZVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiAhIXRoaXMuaXNPcGVuKSxcbiAgICAgICAgZmlsdGVyKChub2RlKSA9PiBub2RlLm5vZGVDb21wb25lbnQgIT09IHRoaXMpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobm9kZSkgPT4ge1xuICAgICAgICBpZiAobm9kZS5ub2RlTGV2ZWwgPD0gdGhpcy5sZXZlbCkge1xuICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==