UNPKG

@nova-ui/dashboards

Version:

Nova Dashboards is a framework designed to provide feature developers with a common solution for presenting data coming from various sources within a single view, as well as a set of predefined widget visualizations that are 100% configuration-driven and

101 lines 14.5 kB
// © 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 } from "@angular/core"; import isNil from "lodash/isNil"; import { debounceTime, takeUntil } from "rxjs/operators"; import { REFRESH } from "../../../services/types"; import { PizzagnaLayer } from "../../../types"; import * as i0 from "@angular/core"; export class SearchFeatureAddonService { constructor() { this.searchDebounceTime = 500; } initWidget(widget) { this.widget = widget; this.initSearch(); } initSearch() { this.defineSearch(); const dsFeaturesChange = this.widget.dataSource?.features?.featuresChanged; if (dsFeaturesChange) { dsFeaturesChange .pipe(takeUntil(this.widget.onDestroy$)) .subscribe(() => { this.defineSearch(); }); } } registerSearch() { if (this.widget.dataSource) { this.widget.dataSource.registerComponent({ search: { componentInstance: { getFilters: () => ({ type: "search", value: this.widget.searchValue, }), }, }, }); } } deregisterSearch() { if (this.widget.dataSource) { this.widget.dataSource.deregisterComponent?.("search"); } } defineSearch() { const searchConfiguration = this.widget.configuration?.searchConfiguration; const searchDsConfig = this.widget.dataSource.features?.getFeatureConfig("search"); this.widget.isSearchEnabled = !!(searchConfiguration?.enabled && searchDsConfig?.enabled); if (this.widget.isSearchEnabled) { this.widget.searchValue = searchConfiguration?.searchTerm || ""; this.registerSearch(); this.searchDebounceTime = !isNil(searchConfiguration?.searchDebounce) ? // Note: asserting value to prevent compilation error on unable to infer correct type searchConfiguration?.searchDebounce : this.searchDebounceTime; this.watchSearchTerm(); } else { this.deregisterSearch(); } } watchSearchTerm() { this.widget.searchTerm$ .pipe(debounceTime(this.searchDebounceTime), takeUntil(this.widget.onDestroy$)) .subscribe(() => { this.widget.pizzagnaService.setProperty({ pizzagnaKey: PizzagnaLayer.Configuration, componentId: this.widget.componentId, propertyPath: [ "configuration.searchConfiguration.searchTerm", ], }, this.widget.searchValue); this.widget.eventBus.getStream(REFRESH).next({}); }); } /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchFeatureAddonService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchFeatureAddonService }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchFeatureAddonService, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZlYXR1cmUtYWRkb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS13aWRnZXQvYWRkb25zL3NlYXJjaC1mZWF0dXJlLWFkZG9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseURBQXlEO0FBQ3pELEVBQUU7QUFDRiwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLDREQUE0RDtBQUM1RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLHVEQUF1RDtBQUN2RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFDL0UsMEVBQTBFO0FBQzFFLGlGQUFpRjtBQUNqRiw2RUFBNkU7QUFDN0UsaUJBQWlCO0FBRWpCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxLQUFLLE1BQU0sY0FBYyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFJL0MsTUFBTSxPQUFPLHlCQUF5QjtJQUR0QztRQUlZLHVCQUFrQixHQUFHLEdBQUcsQ0FBQztLQXdGcEM7SUF0RlUsVUFBVSxDQUFDLE1BQTRCO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU8sVUFBVTtRQUNkLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwQixNQUFNLGdCQUFnQixHQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFB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QUF6Qix5QkFBeUI7a0JBRHJDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyDCqSAyMDIyIFNvbGFyV2luZHMgV29ybGR3aWRlLCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4vLyAgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vICByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vICBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyAgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgaXNOaWwgZnJvbSBcImxvZGFzaC9pc05pbFwiO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcblxuaW1wb3J0IHsgSUZpbHRlciB9IGZyb20gXCJAbm92YS11aS9iaXRzXCI7XG5cbmltcG9ydCB7IFJFRlJFU0ggfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvdHlwZXNcIjtcbmltcG9ydCB7IFBpenphZ25hTGF5ZXIgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IFRhYmxlV2lkZ2V0Q29tcG9uZW50IH0gZnJvbSBcIi4uL3B1YmxpYy1hcGlcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNlYXJjaEZlYXR1cmVBZGRvblNlcnZpY2Uge1xuICAgIHByaXZhdGUgd2lkZ2V0OiBUYWJsZVdpZGdldENvbXBvbmVudDsgLy8gVE9ETzogZ2VuZXJpYyB3aWRnZXRcblxuICAgIHByaXZhdGUgc2VhcmNoRGVib3VuY2VUaW1lID0gNTAwO1xuXG4gICAgcHVibGljIGluaXRXaWRnZXQod2lkZ2V0OiBUYWJsZVdpZGdldENvbXBvbmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLndpZGdldCA9IHdpZGdldDtcbiAgICAgICAgdGhpcy5pbml0U2VhcmNoKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0U2VhcmNoKCkge1xuICAgICAgICB0aGlzLmRlZmluZVNlYXJjaCgpO1xuXG4gICAgICAgIGNvbnN0IGRzRmVhdHVyZXNDaGFuZ2UgPVxuICAgICAgICAgICAgdGhpcy53aWRnZXQuZGF0YVNvdXJjZT8uZmVhdHVyZXM/LmZlYXR1cmVzQ2hhbmdlZDtcbiAgICAgICAgaWYgKGRzRmVhdHVyZXNDaGFuZ2UpIHtcbiAgICAgICAgICAgIGRzRmVhdHVyZXNDaGFuZ2VcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy53aWRnZXQub25EZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lU2VhcmNoKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyU2VhcmNoKCkge1xuICAgICAgICBpZiAodGhpcy53aWRnZXQuZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy53aWRnZXQuZGF0YVNvdXJjZS5yZWdpc3RlckNvbXBvbmVudCh7XG4gICAgICAgICAgICAgICAgc2VhcmNoOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRGaWx0ZXJzOiAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJRmlsdGVyPHN0cmluZz4+e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInNlYXJjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy53aWRnZXQuc2VhcmNoVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRlcmVnaXN0ZXJTZWFyY2goKSB7XG4gICAgICAgIGlmICh0aGlzLndpZGdldC5kYXRhU291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLndpZGdldC5kYXRhU291cmNlLmRlcmVnaXN0ZXJDb21wb25lbnQ/LihcInNlYXJjaFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGVmaW5lU2VhcmNoKCkge1xuICAgICAgICBjb25zdCBzZWFyY2hDb25maWd1cmF0aW9uID1cbiAgICAgICAgICAgIHRoaXMud2lkZ2V0LmNvbmZpZ3VyYXRpb24/LnNlYXJjaENvbmZpZ3VyYXRpb247XG4gICAgICAgIGNvbnN0IHNlYXJjaERzQ29uZmlnID1cbiAgICAgICAgICAgIHRoaXMud2lkZ2V0LmRhdGFTb3VyY2UuZmVhdHVyZXM/LmdldEZlYXR1cmVDb25maWcoXCJzZWFyY2hcIik7XG5cbiAgICAgICAgdGhpcy53aWRnZXQuaXNTZWFyY2hFbmFibGVkID0gISEoXG4gICAgICAgICAgICBzZWFyY2hDb25maWd1cmF0aW9uPy5lbmFibGVkICYmIHNlYXJjaERzQ29uZmlnPy5lbmFibGVkXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRoaXMud2lkZ2V0LmlzU2VhcmNoRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy53aWRnZXQuc2VhcmNoVmFsdWUgPSBzZWFyY2hDb25maWd1cmF0aW9uPy5zZWFyY2hUZXJtIHx8IFwiXCI7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyU2VhcmNoKCk7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaERlYm91bmNlVGltZSA9ICFpc05pbChcbiAgICAgICAgICAgICAgICBzZWFyY2hDb25maWd1cmF0aW9uPy5zZWFyY2hEZWJvdW5jZVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgID8gLy8gTm90ZTogYXNzZXJ0aW5nIHZhbHVlIHRvIHByZXZlbnQgY29tcGlsYXRpb24gZXJyb3Igb24gdW5hYmxlIHRvIGluZmVyIGNvcnJlY3QgdHlwZVxuICAgICAgICAgICAgICAgICAgKHNlYXJjaENvbmZpZ3VyYXRpb24/LnNlYXJjaERlYm91bmNlIGFzIG51bWJlcilcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2VhcmNoRGVib3VuY2VUaW1lO1xuICAgICAgICAgICAgdGhpcy53YXRjaFNlYXJjaFRlcm0oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVyZWdpc3RlclNlYXJjaCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3YXRjaFNlYXJjaFRlcm0oKSB7XG4gICAgICAgIHRoaXMud2lkZ2V0LnNlYXJjaFRlcm0kXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5zZWFyY2hEZWJvdW5jZVRpbWUpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLndpZGdldC5vbkRlc3Ryb3kkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy53aWRnZXQucGl6emFnbmFTZXJ2aWNlLnNldFByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwaXp6YWduYUtleTogUGl6emFnbmFMYXllci5Db25maWd1cmF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SWQ6IHRoaXMud2lkZ2V0LmNvbXBvbmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlQYXRoOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb25maWd1cmF0aW9uLnNlYXJjaENvbmZpZ3VyYXRpb24uc2VhcmNoVGVybVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53aWRnZXQuc2VhcmNoVmFsdWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LmV2ZW50QnVzLmdldFN0cmVhbShSRUZSRVNIKS5uZXh0KHt9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==