UNPKG

@calf/angular

Version:

Angular module of Calf framework.

112 lines (111 loc) 2.94 kB
import { Subject } from "rxjs"; // Data import { FilterItem } from "./filter-item.class"; /** Filter utility */ export class Filter { constructor() { // Filter items this.items = {}; // On filter change this.changeSource = new Subject(); this.$change = this.changeSource.asObservable(); // On params this.paramsSource = new Subject(); this.$params = this.paramsSource.asObservable(); } /** * Register filter * @param name * @param type * @param value * @param service */ register(name, type, value, service) { this.items[name] = new FilterItem(type, value, service); } /** * Remove filter * @param name */ remove(name) { delete this.items[name]; } /** * Check if filter is set * @param name */ isSet(name) { return name in this.items && this.items[name].isSet(); } /** * Check if filter is registered * @param name */ isRegistered(name) { return name in this.items; } /** * Get filter value * @param name */ get(name) { // Check if filter exists if (!this.isRegistered(name)) { throw new Error(`Filter '${name}' not registered. Did you forget to call 'register(${name})?'`); } // Get value return this.items[name].value; } /** * Set value * @param name * @param value * @param omit */ set(name, value, omit = false) { // Check if filter exists if (!this.isRegistered(name)) { throw new Error(`Filter '${name}' not registered. Did you forget to call 'register(${name})?'`); } // Set value this.items[name].value = value; // Check whether to omit change if (omit) { return; } // Call on change hook this.onChange(); } /** * Params * @param params */ params(params) { // Iterate filters for (let name in this.items) { // Check if name is in params if (!params.has(name)) { continue; } // Set filter value this.items[name].fromParam(params.getAll(name)); } // Emit params this.paramsSource.next(); } /** On change */ onChange() { // Init extras let extras = { queryParams: {} }; // Iterate filters for (let name in this.items) { // Check if item is set if (this.items[name].isSet()) { // Add to extras extras.queryParams[name] = this.items[name].toParam(); } } // Emit change this.changeSource.next(extras); } }