@ux-aspects/ux-aspects
Version:
Open source user interface framework for building modern, responsive, mobile big data applications
54 lines • 6.13 kB
JavaScript
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