UNPKG

@ux-aspects/ux-aspects

Version:

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

54 lines 6.13 kB
import { Injectable } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; import * as i0 from "@angular/core"; export class TabsetService { constructor() { /** Store the list of tabs */ this.tabs = []; this.activeTab$ = new BehaviorSubject(null); /** Store the manual state */ this.manual = false; } /** Update the array of tabs - required to preserve order */ update(tabs) { this.tabs = [...tabs]; } /** Select a tab (from user input) */ select(tab) { if (tab.disabled) { return; } if (this.manual) { // In manual mode, emit the activated/deactivated events. // The application is responsible for updating the active state on each tab, which will then update the UI. this.tabs.forEach(_tab => _tab === tab ? _tab.activate() : _tab.deactivate()); } else { this.activeTab$.next(tab); } } /** Set tab active state */ setTabActive(tab) { if (!tab.disabled) { this.activeTab$.next(tab); } } /** Determine if there is a selected tab */ isTabActive() { return this.activeTab$.getValue() !== null; } /** Select the first non-disabled tab */ selectFirstTab() { // find the index of the first non-disabled tab const tab = this.tabs.find(_tab => !_tab.disabled); if (tab) { this.select(tab); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TabsetService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TabsetService }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TabsetService, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90YWJzZXQvdGFic2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUl2QyxNQUFNLE9BQU8sYUFBYTtJQUQxQjtRQUdJLDZCQUE2QjtRQUM3QixTQUFJLEdBQWdDLEVBQUUsQ0FBQztRQUV2QyxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQWUsSUFBSSxDQUFDLENBQUM7UUFFckQsNkJBQTZCO1FBQzdCLFdBQU0sR0FBWSxLQUFLLENBQUM7S0EyQzNCO0lBekNHLDREQUE0RDtJQUM1RCxNQUFNLENBQUMsSUFBb0I7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxNQUFNLENBQUMsR0FBaUI7UUFDcEIsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZixPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QseURBQXlEO1lBQ3pELDJHQUEyRztZQUMzRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDbEYsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixDQUFDO0lBQ0wsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixZQUFZLENBQUMsR0FBaUI7UUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixDQUFDO0lBQ0wsQ0FBQztJQUVELDJDQUEyQztJQUMzQyxXQUFXO1FBQ1AsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksQ0FBQztJQUMvQyxDQUFDO0lBRUQsd0NBQXdDO0lBQ3hDLGNBQWM7UUFDViwrQ0FBK0M7UUFDL0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVuRCxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0wsQ0FBQzsrR0FsRFEsYUFBYTttSEFBYixhQUFhOzs0RkFBYixhQUFhO2tCQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUYWJDb21wb25lbnQgfSBmcm9tICcuL3RhYi90YWIuY29tcG9uZW50JztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRhYnNldFNlcnZpY2Uge1xuXG4gICAgLyoqIFN0b3JlIHRoZSBsaXN0IG9mIHRhYnMgKi9cbiAgICB0YWJzOiBSZWFkb25seUFycmF5PFRhYkNvbXBvbmVudD4gPSBbXTtcblxuICAgIGFjdGl2ZVRhYiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYkNvbXBvbmVudD4obnVsbCk7XG5cbiAgICAvKiogU3RvcmUgdGhlIG1hbnVhbCBzdGF0ZSAqL1xuICAgIG1hbnVhbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFVwZGF0ZSB0aGUgYXJyYXkgb2YgdGFicyAtIHJlcXVpcmVkIHRvIHByZXNlcnZlIG9yZGVyICovXG4gICAgdXBkYXRlKHRhYnM6IFRhYkNvbXBvbmVudFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFicyA9IFsuLi50YWJzXTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IGEgdGFiIChmcm9tIHVzZXIgaW5wdXQpICovXG4gICAgc2VsZWN0KHRhYjogVGFiQ29tcG9uZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0YWIuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1hbnVhbCkge1xuICAgICAgICAgICAgLy8gSW4gbWFudWFsIG1vZGUsIGVtaXQgdGhlIGFjdGl2YXRlZC9kZWFjdGl2YXRlZCBldmVudHMuXG4gICAgICAgICAgICAvLyBUaGUgYXBwbGljYXRpb24gaXMgcmVzcG9uc2libGUgZm9yIHVwZGF0aW5nIHRoZSBhY3RpdmUgc3RhdGUgb24gZWFjaCB0YWIsIHdoaWNoIHdpbGwgdGhlbiB1cGRhdGUgdGhlIFVJLlxuICAgICAgICAgICAgdGhpcy50YWJzLmZvckVhY2goX3RhYiA9PiBfdGFiID09PSB0YWIgPyBfdGFiLmFjdGl2YXRlKCkgOiBfdGFiLmRlYWN0aXZhdGUoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVRhYiQubmV4dCh0YWIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFNldCB0YWIgYWN0aXZlIHN0YXRlICovXG4gICAgc2V0VGFiQWN0aXZlKHRhYjogVGFiQ29tcG9uZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGFiLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVRhYiQubmV4dCh0YWIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZSBpZiB0aGVyZSBpcyBhIHNlbGVjdGVkIHRhYiAqL1xuICAgIGlzVGFiQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVUYWIkLmdldFZhbHVlKCkgIT09IG51bGw7XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdCB0aGUgZmlyc3Qgbm9uLWRpc2FibGVkIHRhYiAqL1xuICAgIHNlbGVjdEZpcnN0VGFiKCk6IHZvaWQge1xuICAgICAgICAvLyBmaW5kIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgbm9uLWRpc2FibGVkIHRhYlxuICAgICAgICBjb25zdCB0YWIgPSB0aGlzLnRhYnMuZmluZChfdGFiID0+ICFfdGFiLmRpc2FibGVkKTtcblxuICAgICAgICBpZiAodGFiKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdCh0YWIpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19