@nova-ui/bits
Version:
SolarWinds Nova Framework
97 lines • 13.1 kB
JavaScript
// © 2022 SolarWinds Worldwide, LLC. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
import { Injectable, Optional, SkipSelf } from "@angular/core";
import _forEach from "lodash/forEach";
import _omit from "lodash/omit";
import { Subject } from "rxjs";
import { takeUntil } from "rxjs/operators";
import * as i0 from "@angular/core";
/**
* <example-url>./../examples/index.html#/common/data-filter-service</example-url>
*/
export class DataFilterService {
constructor(parent) {
this.parent = parent;
this._filters = {};
this.filteringSubject = new Subject();
this.onDestroy$ = new Subject();
this.destroySubscriptions = [];
if (this.parent) {
this.parent.filteringSubject
.pipe(takeUntil(this.onDestroy$))
.subscribe(() => {
this.filteringSubject.next();
});
}
}
registerFilter(filter) {
this._filters = {
...this._filters,
...filter,
};
// subscribing to onDestroy of filtering components to remove them from memory when this components are destroyed
_forEach(this._filters, (node, key) => {
if (node.componentInstance.onDestroy$) {
this.destroySubscriptions.push(node.componentInstance.onDestroy$.subscribe(() => {
this.unregisterFilters([key]);
}));
}
});
this.filteringSubject.next();
}
unregisterFilters(filtersToUnregister) {
this._filters = _omit(this._filters, filtersToUnregister);
this.filteringSubject.next();
}
getFilters() {
let filters = {};
if (this.parent) {
filters = this.parent.getFilters();
}
// Merge current filters
_forEach(this._filters, (node, key) => {
const getFilters = node &&
node.componentInstance &&
node.componentInstance.getFilters;
if (typeof getFilters === "function") {
filters[key] = node.componentInstance.getFilters();
}
});
return filters;
}
applyFilters() {
this.filteringSubject.next();
}
ngOnDestroy() {
this.onDestroy$.next();
this.onDestroy$.complete();
this.destroySubscriptions.forEach((subscription) => subscription.unsubscribe());
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DataFilterService, deps: [{ token: DataFilterService, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DataFilterService }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DataFilterService, decorators: [{
type: Injectable
}], ctorParameters: () => [{ type: DataFilterService, decorators: [{
type: Optional
}, {
type: SkipSelf
}] }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9kYXRhLWZpbHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUN6RCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw0REFBNEQ7QUFDNUQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSx1REFBdUQ7QUFDdkQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBQy9FLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLGlCQUFpQjtBQUVqQixPQUFPLEVBQUUsVUFBVSxFQUFhLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFVM0M7O0dBRUc7QUFFSCxNQUFNLE9BQU8saUJBQWlCO0lBSzFCLFlBQTJDLE1BQXlCO1FBQXpCLFdBQU0sR0FBTixNQUFNLENBQW1CO1FBSjFELGFBQVEsR0FBMkIsRUFBRSxDQUFDO1FBQ3pDLHFCQUFnQixHQUFrQixJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ3RELGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ2hDLHlCQUFvQixHQUFtQixFQUFFLENBQUM7UUFFOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0I7aUJBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUNoQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztTQUNWO0lBQ0wsQ0FBQztJQUVNLGNBQWMsQ0FBQyxNQUE4QjtRQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ1osR0FBRyxJQUFJLENBQUMsUUFBUTtZQUNoQixHQUFHLE1BQU07U0FDWixDQUFDO1FBRUYsaUhBQWlIO1FBQ2pILFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBMkIsRUFBRSxHQUFXLEVBQUUsRUFBRTtZQUNqRSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDN0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLENBQ0wsQ0FBQzthQUNMO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVNLGlCQUFpQixDQUFDLG1CQUE2QjtRQUNsRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFTSxVQUFVO1FBQ2IsSUFBSSxPQUFPLEdBQWEsRUFBRSxDQUFDO1FBRTNCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ3RDO1FBRUQsd0JBQXdCO1FBQ3hCLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBMkIsRUFBRSxHQUFXLEVBQUUsRUFBRTtZQUNqRSxNQUFNLFVBQVUsR0FDWixJQUFJO2dCQUNKLElBQUksQ0FBQyxpQkFBaUI7Z0JBQ3RCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUM7WUFDdEMsSUFBSSxPQUFPLFVBQVUsS0FBSyxVQUFVLEVBQUU7Z0JBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLENBQUM7YUFDdEQ7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFTSxZQUFZO1FBQ2YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUMvQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQzdCLENBQUM7SUFDTixDQUFDOytHQXJFUSxpQkFBaUI7bUhBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVTs7MEJBTU0sUUFBUTs7MEJBQUksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8vIMKpIDIwMjIgU29sYXJXaW5kcyBXb3JsZHdpZGUsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbi8vICBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyAgVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBTa2lwU2VsZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgX2ZvckVhY2ggZnJvbSBcImxvZGFzaC9mb3JFYWNoXCI7XG5pbXBvcnQgX29taXQgZnJvbSBcImxvZGFzaC9vbWl0XCI7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5cbmltcG9ydCB7IElOb3ZhRmlsdGVycyB9IGZyb20gXCIuL2RhdGEtc291cmNlL3B1YmxpYy1hcGlcIjtcbmltcG9ydCB7XG4gICAgSUZpbHRlcmluZ1BhcnRpY2lwYW50LFxuICAgIElGaWx0ZXJpbmdQYXJ0aWNpcGFudHMsXG4gICAgSUZpbHRlclB1YixcbiAgICBJRmlsdGVycyxcbn0gZnJvbSBcIi4vcHVibGljLWFwaVwiO1xuXG4vKipcbiAqIDxleGFtcGxlLXVybD4uLy4uL2V4YW1wbGVzL2luZGV4Lmh0bWwjL2NvbW1vbi9kYXRhLWZpbHRlci1zZXJ2aWNlPC9leGFtcGxlLXVybD5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERhdGFGaWx0ZXJTZXJ2aWNlIGltcGxlbWVudHMgSUZpbHRlclB1YiwgT25EZXN0cm95IHtcbiAgICBwcm90ZWN0ZWQgX2ZpbHRlcnM6IElGaWx0ZXJpbmdQYXJ0aWNpcGFudHMgPSB7fTtcbiAgICBwdWJsaWMgZmlsdGVyaW5nU3ViamVjdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHVibGljIG9uRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgZGVzdHJveVN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgcHVibGljIHBhcmVudDogRGF0YUZpbHRlclNlcnZpY2UpIHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5maWx0ZXJpbmdTdWJqZWN0XG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyaW5nU3ViamVjdC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJGaWx0ZXIoZmlsdGVyOiBJRmlsdGVyaW5nUGFydGljaXBhbnRzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZpbHRlcnMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLl9maWx0ZXJzLFxuICAgICAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIHN1YnNjcmliaW5nIHRvIG9uRGVzdHJveSBvZiBmaWx0ZXJpbmcgY29tcG9uZW50cyB0byByZW1vdmUgdGhlbSBmcm9tIG1lbW9yeSB3aGVuIHRoaXMgY29tcG9uZW50cyBhcmUgZGVzdHJveWVkXG4gICAgICAgIF9mb3JFYWNoKHRoaXMuX2ZpbHRlcnMsIChub2RlOiBJRmlsdGVyaW5nUGFydGljaXBhbnQsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZS5jb21wb25lbnRJbnN0YW5jZS5vbkRlc3Ryb3kkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95U3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBub2RlLmNvbXBvbmVudEluc3RhbmNlLm9uRGVzdHJveSQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudW5yZWdpc3RlckZpbHRlcnMoW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZpbHRlcmluZ1N1YmplY3QubmV4dCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1bnJlZ2lzdGVyRmlsdGVycyhmaWx0ZXJzVG9VbnJlZ2lzdGVyOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9maWx0ZXJzID0gX29taXQodGhpcy5fZmlsdGVycywgZmlsdGVyc1RvVW5yZWdpc3Rlcik7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nU3ViamVjdC5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZpbHRlcnMoKTogSU5vdmFGaWx0ZXJzIHtcbiAgICAgICAgbGV0IGZpbHRlcnM6IElGaWx0ZXJzID0ge307XG5cbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICBmaWx0ZXJzID0gdGhpcy5wYXJlbnQuZ2V0RmlsdGVycygpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWVyZ2UgY3VycmVudCBmaWx0ZXJzXG4gICAgICAgIF9mb3JFYWNoKHRoaXMuX2ZpbHRlcnMsIChub2RlOiBJRmlsdGVyaW5nUGFydGljaXBhbnQsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBnZXRGaWx0ZXJzID1cbiAgICAgICAgICAgICAgICBub2RlICYmXG4gICAgICAgICAgICAgICAgbm9kZS5jb21wb25lbnRJbnN0YW5jZSAmJlxuICAgICAgICAgICAgICAgIG5vZGUuY29tcG9uZW50SW5zdGFuY2UuZ2V0RmlsdGVycztcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZ2V0RmlsdGVycyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyc1trZXldID0gbm9kZS5jb21wb25lbnRJbnN0YW5jZS5nZXRGaWx0ZXJzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXBwbHlGaWx0ZXJzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbHRlcmluZ1N1YmplY3QubmV4dCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuZGVzdHJveVN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3Vic2NyaXB0aW9uKSA9PlxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=