@ux-aspects/ux-aspects
Version:
Open source user interface framework for building modern, responsive, mobile big data applications
49 lines • 6.54 kB
JavaScript
import { Injectable } from '@angular/core';
import { BehaviorSubject, Subject } from 'rxjs';
import { FilterAddEvent } from './events/filter-add-event';
import { FilterRemoveAllEvent } from './events/filter-remove-all-event';
import { FilterRemoveEvent } from './events/filter-remove-event';
import * as i0 from "@angular/core";
export class FilterService {
constructor() {
/** The list of active filters */
this.filters$ = new BehaviorSubject([]);
/** Emit all the events when they occur */
this.events$ = new Subject();
}
add(filter) {
// if the filter is already selected or it is the intial filter then do nothing
if (this.isSelected(filter) || filter.initial) {
return;
}
// update the list of active filters
this.filters$.next([...this.filters$.value, filter]);
// emit the event
this.events$.next(new FilterAddEvent(filter));
}
remove(filter) {
// if the filter is not selected then do nothing
if (!this.isSelected(filter)) {
return;
}
// update the list of active filters
this.filters$.next(this.filters$.value.filter(_filter => _filter !== filter));
// emit the event
this.events$.next(new FilterRemoveEvent(filter));
}
removeAll() {
// empty the list of active filters
this.filters$.next([]);
// emit the event
this.events$.next(new FilterRemoveAllEvent());
}
isSelected(filter) {
return this.filters$.value.indexOf(filter) > -1;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FilterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FilterService }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FilterService, decorators: [{
type: Injectable
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9maWx0ZXJzL2ZpbHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQUlqRSxNQUFNLE9BQU8sYUFBYTtJQUQxQjtRQUdJLGlDQUFpQztRQUNqQyxhQUFRLEdBQUcsSUFBSSxlQUFlLENBQVcsRUFBRSxDQUFDLENBQUM7UUFFN0MsMENBQTBDO1FBQzFDLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO0tBMEN4QztJQXhDRyxHQUFHLENBQUMsTUFBYztRQUVkLCtFQUErRTtRQUMvRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzVDLE9BQU87UUFDWCxDQUFDO1FBRUQsb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRXJELGlCQUFpQjtRQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxNQUFNLENBQUMsTUFBYztRQUVqQixnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMzQixPQUFPO1FBQ1gsQ0FBQztRQUVELG9DQUFvQztRQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztRQUU5RSxpQkFBaUI7UUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxTQUFTO1FBRUwsbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXZCLGlCQUFpQjtRQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLG9CQUFvQixFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQWM7UUFDckIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQzsrR0EvQ1EsYUFBYTttSEFBYixhQUFhOzs0RkFBYixhQUFhO2tCQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGaWx0ZXJBZGRFdmVudCB9IGZyb20gJy4vZXZlbnRzL2ZpbHRlci1hZGQtZXZlbnQnO1xuaW1wb3J0IHsgRmlsdGVyRXZlbnQgfSBmcm9tICcuL2V2ZW50cy9maWx0ZXItZXZlbnQnO1xuaW1wb3J0IHsgRmlsdGVyUmVtb3ZlQWxsRXZlbnQgfSBmcm9tICcuL2V2ZW50cy9maWx0ZXItcmVtb3ZlLWFsbC1ldmVudCc7XG5pbXBvcnQgeyBGaWx0ZXJSZW1vdmVFdmVudCB9IGZyb20gJy4vZXZlbnRzL2ZpbHRlci1yZW1vdmUtZXZlbnQnO1xuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2ZpbHRlci5pbnRlcmZhY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRmlsdGVyU2VydmljZSB7XG5cbiAgICAvKiogVGhlIGxpc3Qgb2YgYWN0aXZlIGZpbHRlcnMgKi9cbiAgICBmaWx0ZXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RmlsdGVyW10+KFtdKTtcblxuICAgIC8qKiBFbWl0IGFsbCB0aGUgZXZlbnRzIHdoZW4gdGhleSBvY2N1ciAqL1xuICAgIGV2ZW50cyQgPSBuZXcgU3ViamVjdDxGaWx0ZXJFdmVudD4oKTtcblxuICAgIGFkZChmaWx0ZXI6IEZpbHRlcik6IHZvaWQge1xuXG4gICAgICAgIC8vIGlmIHRoZSBmaWx0ZXIgaXMgYWxyZWFkeSBzZWxlY3RlZCBvciBpdCBpcyB0aGUgaW50aWFsIGZpbHRlciB0aGVuIGRvIG5vdGhpbmdcbiAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZChmaWx0ZXIpIHx8IGZpbHRlci5pbml0aWFsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgdGhlIGxpc3Qgb2YgYWN0aXZlIGZpbHRlcnNcbiAgICAgICAgdGhpcy5maWx0ZXJzJC5uZXh0KFsuLi50aGlzLmZpbHRlcnMkLnZhbHVlLCBmaWx0ZXJdKTtcblxuICAgICAgICAvLyBlbWl0IHRoZSBldmVudFxuICAgICAgICB0aGlzLmV2ZW50cyQubmV4dChuZXcgRmlsdGVyQWRkRXZlbnQoZmlsdGVyKSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlKGZpbHRlcjogRmlsdGVyKTogdm9pZCB7XG5cbiAgICAgICAgLy8gaWYgdGhlIGZpbHRlciBpcyBub3Qgc2VsZWN0ZWQgdGhlbiBkbyBub3RoaW5nXG4gICAgICAgIGlmICghdGhpcy5pc1NlbGVjdGVkKGZpbHRlcikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgbGlzdCBvZiBhY3RpdmUgZmlsdGVyc1xuICAgICAgICB0aGlzLmZpbHRlcnMkLm5leHQodGhpcy5maWx0ZXJzJC52YWx1ZS5maWx0ZXIoX2ZpbHRlciA9PiBfZmlsdGVyICE9PSBmaWx0ZXIpKTtcblxuICAgICAgICAvLyBlbWl0IHRoZSBldmVudFxuICAgICAgICB0aGlzLmV2ZW50cyQubmV4dChuZXcgRmlsdGVyUmVtb3ZlRXZlbnQoZmlsdGVyKSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlQWxsKCk6IHZvaWQge1xuXG4gICAgICAgIC8vIGVtcHR5IHRoZSBsaXN0IG9mIGFjdGl2ZSBmaWx0ZXJzXG4gICAgICAgIHRoaXMuZmlsdGVycyQubmV4dChbXSk7XG5cbiAgICAgICAgLy8gZW1pdCB0aGUgZXZlbnRcbiAgICAgICAgdGhpcy5ldmVudHMkLm5leHQobmV3IEZpbHRlclJlbW92ZUFsbEV2ZW50KCkpO1xuICAgIH1cblxuICAgIGlzU2VsZWN0ZWQoZmlsdGVyOiBGaWx0ZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVycyQudmFsdWUuaW5kZXhPZihmaWx0ZXIpID4gLTE7XG4gICAgfVxufSJdfQ==