@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
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 } 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==