UNPKG

@ux-aspects/ux-aspects

Version:

Open source user interface framework for building modern, responsive, mobile big data applications

51 lines 6.62 kB
import { Injectable } from '@angular/core'; import { Subject } from 'rxjs'; import * as i0 from "@angular/core"; export class NavigationService { constructor() { /** Whether to collapse other menu items when expanding a menu item. */ this.autoCollapse = true; /** Emit when the expanded state has changed */ this.expanded$ = new Subject(); } ngOnDestroy() { this.expanded$.complete(); } /** Set the expanded state of an item */ setExpanded(source, expanded) { if (expanded && this.autoCollapse) { this.collapseSiblings(source); this.expanded$.next(); } } /** Collapse all siblings nodes */ collapseSiblings(source) { let siblings = this.items; for (const item of this.items) { const parent = this.getParent(source, item); if (parent) { siblings = parent.children; break; } } // collapse every sibling siblings.filter(item => item !== source).forEach(item => this.collapseAll(item)); } /** Collapse an item and all its children */ collapseAll(item) { item.expanded = false; if (item.children) { item.children.forEach(child => this.collapseAll(child)); } } /** Get a nodes parent if it has one */ getParent(target, item) { return (item.children || []).find(child => child === target) ? item : null; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NavigationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NavigationService }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NavigationService, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUkvQixNQUFNLE9BQU8saUJBQWlCO0lBRDlCO1FBTUksdUVBQXVFO1FBQ3ZFLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBRTdCLCtDQUErQztRQUMvQyxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztLQTBDbkM7SUF4Q0csV0FBVztRQUNQLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELHdDQUF3QztJQUN4QyxXQUFXLENBQUMsTUFBc0IsRUFBRSxRQUFpQjtRQUNqRCxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNMLENBQUM7SUFFRCxrQ0FBa0M7SUFDMUIsZ0JBQWdCLENBQUMsTUFBc0I7UUFDM0MsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUUxQixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1QyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNULFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO2dCQUMzQixNQUFNO1lBQ1YsQ0FBQztRQUNMLENBQUM7UUFFRCx5QkFBeUI7UUFDekIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVELDRDQUE0QztJQUNwQyxXQUFXLENBQUMsSUFBb0I7UUFDcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQztJQUNMLENBQUM7SUFFRCx1Q0FBdUM7SUFDL0IsU0FBUyxDQUFDLE1BQXNCLEVBQUUsSUFBb0I7UUFDMUQsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMvRSxDQUFDOytHQWxEUSxpQkFBaUI7bUhBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkl0ZW0gfSBmcm9tICcuL25hdmlnYXRpb24taXRlbS5pbnRlcmZhY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmF2aWdhdGlvblNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgLyoqIFRoZSBuYXZpZ2F0aW9uIGl0ZW1zIHRvIHBvcHVsYXRlIHRoZSBtZW51IHdpdGggKi9cbiAgICBpdGVtczogTmF2aWdhdGlvbkl0ZW1bXTtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGNvbGxhcHNlIG90aGVyIG1lbnUgaXRlbXMgd2hlbiBleHBhbmRpbmcgYSBtZW51IGl0ZW0uICovXG4gICAgYXV0b0NvbGxhcHNlOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKiBFbWl0IHdoZW4gdGhlIGV4cGFuZGVkIHN0YXRlIGhhcyBjaGFuZ2VkICovXG4gICAgZXhwYW5kZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmV4cGFuZGVkJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgdGhlIGV4cGFuZGVkIHN0YXRlIG9mIGFuIGl0ZW0gKi9cbiAgICBzZXRFeHBhbmRlZChzb3VyY2U6IE5hdmlnYXRpb25JdGVtLCBleHBhbmRlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoZXhwYW5kZWQgJiYgdGhpcy5hdXRvQ29sbGFwc2UpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGFwc2VTaWJsaW5ncyhzb3VyY2UpO1xuICAgICAgICAgICAgdGhpcy5leHBhbmRlZCQubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENvbGxhcHNlIGFsbCBzaWJsaW5ncyBub2RlcyAqL1xuICAgIHByaXZhdGUgY29sbGFwc2VTaWJsaW5ncyhzb3VyY2U6IE5hdmlnYXRpb25JdGVtKTogdm9pZCB7XG4gICAgICAgIGxldCBzaWJsaW5ncyA9IHRoaXMuaXRlbXM7XG5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50KHNvdXJjZSwgaXRlbSk7XG4gICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgICAgc2libGluZ3MgPSBwYXJlbnQuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb2xsYXBzZSBldmVyeSBzaWJsaW5nXG4gICAgICAgIHNpYmxpbmdzLmZpbHRlcihpdGVtID0+IGl0ZW0gIT09IHNvdXJjZSkuZm9yRWFjaChpdGVtID0+IHRoaXMuY29sbGFwc2VBbGwoaXRlbSkpO1xuICAgIH1cblxuICAgIC8qKiBDb2xsYXBzZSBhbiBpdGVtIGFuZCBhbGwgaXRzIGNoaWxkcmVuICovXG4gICAgcHJpdmF0ZSBjb2xsYXBzZUFsbChpdGVtOiBOYXZpZ2F0aW9uSXRlbSk6IHZvaWQge1xuICAgICAgICBpdGVtLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpdGVtLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gdGhpcy5jb2xsYXBzZUFsbChjaGlsZCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEdldCBhIG5vZGVzIHBhcmVudCBpZiBpdCBoYXMgb25lICovXG4gICAgcHJpdmF0ZSBnZXRQYXJlbnQodGFyZ2V0OiBOYXZpZ2F0aW9uSXRlbSwgaXRlbTogTmF2aWdhdGlvbkl0ZW0pOiBOYXZpZ2F0aW9uSXRlbSB8IG51bGwge1xuICAgICAgICByZXR1cm4gKGl0ZW0uY2hpbGRyZW4gfHwgW10pLmZpbmQoY2hpbGQgPT4gY2hpbGQgPT09IHRhcmdldCkgPyBpdGVtIDogbnVsbDtcbiAgICB9XG59XG4iXX0=