@ux-aspects/ux-aspects
Version:
Open source user interface framework for building modern, responsive, mobile big data applications
56 lines • 7.54 kB
JavaScript
import { Injectable } from '@angular/core';
import { BehaviorSubject, Subject } from 'rxjs';
import { FacetDeselect, FacetDeselectAll, FacetSelect } from './facet-events';
import * as i0 from "@angular/core";
export class FacetService {
constructor() {
/** The list of active facets */
this.facets$ = new BehaviorSubject([]);
/** Emit all the events when they occur */
this.events$ = new Subject();
}
select(facet) {
// if the facet is already selected or disabled then do nothing
if (this.isSelected(facet) || facet.disabled) {
return;
}
// update the list of active facets
this.facets$.next([...this.facets$.value, facet]);
// emit the event
this.events$.next(new FacetSelect(facet));
}
deselect(facet) {
// if the facet is not selected then do nothing
if (!this.isSelected(facet)) {
return;
}
// update the list of active facets
this.facets$.next(this.facets$.value.filter(_selectedFacet => !this.isFacetMatch(_selectedFacet, facet)));
// emit the event
this.events$.next(new FacetDeselect(facet));
}
deselectAll() {
// empty the list of active facets
this.facets$.next([]);
// emit the event
this.events$.next(new FacetDeselectAll());
}
toggle(facet) {
this.isSelected(facet) ? this.deselect(facet) : this.select(facet);
}
isSelected(facet) {
return !!this.facets$.value.find((_selectedFacet) => this.isFacetMatch(_selectedFacet, facet));
}
isFacetMatch(facet1, facet2) {
if (facet1.id === undefined || facet2.id === undefined) {
return facet1 === facet2;
}
return facet1.id === facet2.id;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FacetService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FacetService }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FacetService, decorators: [{
type: Injectable
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjZXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2ZhY2V0cy9mYWNldC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBYyxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFJMUYsTUFBTSxPQUFPLFlBQVk7SUFEekI7UUFHSSxnQ0FBZ0M7UUFDaEMsWUFBTyxHQUFHLElBQUksZUFBZSxDQUFVLEVBQUUsQ0FBQyxDQUFDO1FBRTNDLDBDQUEwQztRQUMxQyxZQUFPLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztLQXNEdkM7SUFwREcsTUFBTSxDQUFDLEtBQVk7UUFFZiwrREFBK0Q7UUFDL0QsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMzQyxPQUFPO1FBQ1gsQ0FBQztRQUVELG1DQUFtQztRQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUVsRCxpQkFBaUI7UUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVk7UUFFakIsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTztRQUNYLENBQUM7UUFFRCxtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUcsaUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELFdBQVc7UUFFUCxrQ0FBa0M7UUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdEIsaUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBWTtRQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFZO1FBQ25CLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRU8sWUFBWSxDQUFDLE1BQWEsRUFBRSxNQUFhO1FBQzdDLElBQUksTUFBTSxDQUFDLEVBQUUsS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNyRCxPQUFPLE1BQU0sS0FBSyxNQUFNLENBQUM7UUFDN0IsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxDQUFDO0lBQ25DLENBQUM7K0dBM0RRLFlBQVk7bUhBQVosWUFBWTs7NEZBQVosWUFBWTtrQkFEeEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRmFjZXREZXNlbGVjdCwgRmFjZXREZXNlbGVjdEFsbCwgRmFjZXRFdmVudCwgRmFjZXRTZWxlY3QgfSBmcm9tICcuL2ZhY2V0LWV2ZW50cyc7XG5pbXBvcnQgeyBGYWNldCB9IGZyb20gJy4vbW9kZWxzL2ZhY2V0JztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZhY2V0U2VydmljZSB7XG5cbiAgICAvKiogVGhlIGxpc3Qgb2YgYWN0aXZlIGZhY2V0cyAqL1xuICAgIGZhY2V0cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZhY2V0W10+KFtdKTtcblxuICAgIC8qKiBFbWl0IGFsbCB0aGUgZXZlbnRzIHdoZW4gdGhleSBvY2N1ciAqL1xuICAgIGV2ZW50cyQgPSBuZXcgU3ViamVjdDxGYWNldEV2ZW50PigpO1xuXG4gICAgc2VsZWN0KGZhY2V0OiBGYWNldCk6IHZvaWQge1xuXG4gICAgICAgIC8vIGlmIHRoZSBmYWNldCBpcyBhbHJlYWR5IHNlbGVjdGVkIG9yIGRpc2FibGVkIHRoZW4gZG8gbm90aGluZ1xuICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGVkKGZhY2V0KSB8fCBmYWNldC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSBsaXN0IG9mIGFjdGl2ZSBmYWNldHNcbiAgICAgICAgdGhpcy5mYWNldHMkLm5leHQoWy4uLnRoaXMuZmFjZXRzJC52YWx1ZSwgZmFjZXRdKTtcblxuICAgICAgICAvLyBlbWl0IHRoZSBldmVudFxuICAgICAgICB0aGlzLmV2ZW50cyQubmV4dChuZXcgRmFjZXRTZWxlY3QoZmFjZXQpKTtcbiAgICB9XG5cbiAgICBkZXNlbGVjdChmYWNldDogRmFjZXQpOiB2b2lkIHtcblxuICAgICAgICAvLyBpZiB0aGUgZmFjZXQgaXMgbm90IHNlbGVjdGVkIHRoZW4gZG8gbm90aGluZ1xuICAgICAgICBpZiAoIXRoaXMuaXNTZWxlY3RlZChmYWNldCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgbGlzdCBvZiBhY3RpdmUgZmFjZXRzXG4gICAgICAgIHRoaXMuZmFjZXRzJC5uZXh0KHRoaXMuZmFjZXRzJC52YWx1ZS5maWx0ZXIoX3NlbGVjdGVkRmFjZXQgPT4gIXRoaXMuaXNGYWNldE1hdGNoKF9zZWxlY3RlZEZhY2V0LCBmYWNldCkpKTtcblxuICAgICAgICAvLyBlbWl0IHRoZSBldmVudFxuICAgICAgICB0aGlzLmV2ZW50cyQubmV4dChuZXcgRmFjZXREZXNlbGVjdChmYWNldCkpO1xuICAgIH1cblxuICAgIGRlc2VsZWN0QWxsKCk6IHZvaWQge1xuXG4gICAgICAgIC8vIGVtcHR5IHRoZSBsaXN0IG9mIGFjdGl2ZSBmYWNldHNcbiAgICAgICAgdGhpcy5mYWNldHMkLm5leHQoW10pO1xuXG4gICAgICAgIC8vIGVtaXQgdGhlIGV2ZW50XG4gICAgICAgIHRoaXMuZXZlbnRzJC5uZXh0KG5ldyBGYWNldERlc2VsZWN0QWxsKCkpO1xuICAgIH1cblxuICAgIHRvZ2dsZShmYWNldDogRmFjZXQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkKGZhY2V0KSA/IHRoaXMuZGVzZWxlY3QoZmFjZXQpIDogdGhpcy5zZWxlY3QoZmFjZXQpO1xuICAgIH1cblxuICAgIGlzU2VsZWN0ZWQoZmFjZXQ6IEZhY2V0KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZmFjZXRzJC52YWx1ZS5maW5kKChfc2VsZWN0ZWRGYWNldCkgPT4gdGhpcy5pc0ZhY2V0TWF0Y2goX3NlbGVjdGVkRmFjZXQsIGZhY2V0KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0ZhY2V0TWF0Y2goZmFjZXQxOiBGYWNldCwgZmFjZXQyOiBGYWNldCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoZmFjZXQxLmlkID09PSB1bmRlZmluZWQgfHwgZmFjZXQyLmlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWNldDEgPT09IGZhY2V0MjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWNldDEuaWQgPT09IGZhY2V0Mi5pZDtcbiAgICB9XG59XG4iXX0=