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

116 lines 15.3 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 isEqual from "lodash/isEqual"; import { takeUntil } from "rxjs/operators"; import { SET_NEXT_PAGE } from "../../../services/types"; import * as i0 from "@angular/core"; export class PaginatorFeatureAddonService { constructor() { this.defaultPaginatorState = { page: 1, pageSize: 10, pageSizeSet: [10, 20, 50], total: 0, }; this.paginatorState = this.defaultPaginatorState; } initPaginator(widget) { this.widget = widget; this.setPaginatorState(); this.listenPaginatorChanges(); } applyFilters() { this.widget.dataSource.applyFilters(); } registerPaginator() { if (this.widget.dataSource) { this.widget.dataSource.registerComponent({ paginator: { componentInstance: this.widget.paginator, }, }); } } deregisterPaginator() { if (this.widget.dataSource) { this.widget.dataSource.deregisterComponent?.("paginator"); } } setPaginatorState() { const paginatorConfiguration = this.widget.configuration?.paginatorConfiguration; if (this.widget.hasPaginator && this.widget.paginator) { this.registerPaginator(); // pageSize, pageSizeSet comes from static config const modifiedConfiguration = { pageSize: paginatorConfiguration?.pageSize ?? this.defaultPaginatorState.pageSize, pageSizeSet: paginatorConfiguration?.pageSizeSet ?? this.defaultPaginatorState.pageSizeSet, }; // update only if needed to avoid additional calls to ds if (!isEqual(modifiedConfiguration, { pageSize: this.paginatorState.pageSize, pageSizeSet: this.paginatorState.pageSizeSet, })) { this.updatePaginatorState(modifiedConfiguration); this.widget.eventBus.getStream(SET_NEXT_PAGE).next({}); this.widget.changeDetector.detectChanges(); } // page and total are dynamically set this.widget.dataSource.outputsSubject .pipe(takeUntil(this.widget.onDestroy$)) .subscribe((data) => { this.updatePaginatorState({ total: data.paginator?.total ?? 0, }); }); } else { this.deregisterPaginator(); } } updatePaginatorState(param) { this.paginatorState = { ...this.paginatorState, ...param, }; } listenPaginatorChanges() { this.widget.eventBus .getStream(SET_NEXT_PAGE) .pipe(takeUntil(this.widget.onDestroy$)) .subscribe(({ payload }) => { if (!payload) { return; } this.updatePaginatorState({ page: payload.page ?? 1, }); this.applyFilters(); }); } /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PaginatorFeatureAddonService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PaginatorFeatureAddonService }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PaginatorFeatureAddonService, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdG9yLWZlYXR1cmUtYWRkb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS13aWRnZXQvYWRkb25zL3BhZ2luYXRvci1mZWF0dXJlLWFkZG9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseURBQXlEO0FBQ3pELEVBQUU7QUFDRiwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLDREQUE0RDtBQUM1RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLHVEQUF1RDtBQUN2RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFDL0UsMEVBQTBFO0FBQzFFLGlGQUFpRjtBQUNqRiw2RUFBNkU7QUFDN0UsaUJBQWlCO0FBRWpCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFLeEQsTUFBTSxPQUFPLDRCQUE0QjtJQUR6QztRQUVXLDBCQUFxQixHQUFvQjtZQUM1QyxJQUFJLEVBQUUsQ0FBQztZQUNQLFFBQVEsRUFBRSxFQUFFO1lBQ1osV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDekIsS0FBSyxFQUFFLENBQUM7U0FDWCxDQUFDO1FBQ0ssbUJBQWMsR0FBb0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDO0tBeUZ2RTtJQXRGVSxhQUFhLENBQUMsTUFBNEI7UUFDN0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLGlCQUFpQixFQUFF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RTtnQkFDVixPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsb0JBQW9CLENBQUM7Z0JBQ3RCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUM7YUFDMUIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztrSUEvRlEsNEJBQTRCO3NJQUE1Qiw0QkFBNEI7OzRGQUE1Qiw0QkFBNEI7a0JBRHhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyDCqSAyMDIyIFNvbGFyV2luZHMgV29ybGR3aWRlLCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4vLyAgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vICByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vICBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyAgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgaXNFcXVhbCBmcm9tIFwibG9kYXNoL2lzRXF1YWxcIjtcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuXG5pbXBvcnQgeyBJRXZlbnQsIElOb3ZhRmlsdGVyaW5nT3V0cHV0cyB9IGZyb20gXCJAbm92YS11aS9iaXRzXCI7XG5cbmltcG9ydCB7IFNFVF9ORVhUX1BBR0UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvdHlwZXNcIjtcbmltcG9ydCB7IElQYWdpbmF0b3JTdGF0ZSwgVGFibGVXaWRnZXRDb21wb25lbnQgfSBmcm9tIFwiLi4vcHVibGljLWFwaVwiO1xuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQYWdpbmF0b3JGZWF0dXJlQWRkb25TZXJ2aWNlIHtcbiAgICBwdWJsaWMgZGVmYXVsdFBhZ2luYXRvclN0YXRlOiBJUGFnaW5hdG9yU3RhdGUgPSB7XG4gICAgICAgIHBhZ2U6IDEsXG4gICAgICAgIHBhZ2VTaXplOiAxMCxcbiAgICAgICAgcGFnZVNpemVTZXQ6IFsxMCwgMjAsIDUwXSxcbiAgICAgICAgdG90YWw6IDAsXG4gICAgfTtcbiAgICBwdWJsaWMgcGFnaW5hdG9yU3RhdGU6IElQYWdpbmF0b3JTdGF0ZSA9IHRoaXMuZGVmYXVsdFBhZ2luYXRvclN0YXRlO1xuICAgIHByaXZhdGUgd2lkZ2V0OiBUYWJsZVdpZGdldENvbXBvbmVudDsgLy8gVE9ETzogZ2VuZXJpYyB3aWRnZXRcblxuICAgIHB1YmxpYyBpbml0UGFnaW5hdG9yKHdpZGdldDogVGFibGVXaWRnZXRDb21wb25lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy53aWRnZXQgPSB3aWRnZXQ7XG4gICAgICAgIHRoaXMuc2V0UGFnaW5hdG9yU3RhdGUoKTtcbiAgICAgICAgdGhpcy5saXN0ZW5QYWdpbmF0b3JDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5RmlsdGVycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy53aWRnZXQuZGF0YVNvdXJjZS5hcHBseUZpbHRlcnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyUGFnaW5hdG9yKCkge1xuICAgICAgICBpZiAodGhpcy53aWRnZXQuZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy53aWRnZXQuZGF0YVNvdXJjZS5yZWdpc3RlckNvbXBvbmVudCh7XG4gICAgICAgICAgICAgICAgcGFnaW5hdG9yOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlOiB0aGlzLndpZGdldC5wYWdpbmF0b3IsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXJlZ2lzdGVyUGFnaW5hdG9yKCkge1xuICAgICAgICBpZiAodGhpcy53aWRnZXQuZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy53aWRnZXQuZGF0YVNvdXJjZS5kZXJlZ2lzdGVyQ29tcG9uZW50Py4oXCJwYWdpbmF0b3JcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFBhZ2luYXRvclN0YXRlKCkge1xuICAgICAgICBjb25zdCBwYWdpbmF0b3JDb25maWd1cmF0aW9uID1cbiAgICAgICAgICAgIHRoaXMud2lkZ2V0LmNvbmZpZ3VyYXRpb24/LnBhZ2luYXRvckNvbmZpZ3VyYXRpb247XG5cbiAgICAgICAgaWYgKHRoaXMud2lkZ2V0Lmhhc1BhZ2luYXRvciAmJiB0aGlzLndpZGdldC5wYWdpbmF0b3IpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJQYWdpbmF0b3IoKTtcbiAgICAgICAgICAgIC8vIHBhZ2VTaXplLCBwYWdlU2l6ZVNldCBjb21lcyBmcm9tIHN0YXRpYyBjb25maWdcbiAgICAgICAgICAgIGNvbnN0IG1vZGlmaWVkQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTpcbiAgICAgICAgICAgICAgICAgICAgcGFnaW5hdG9yQ29uZmlndXJhdGlvbj8ucGFnZVNpemUgPz9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0UGFnaW5hdG9yU3RhdGUucGFnZVNpemUsXG4gICAgICAgICAgICAgICAgcGFnZVNpemVTZXQ6XG4gICAgICAgICAgICAgICAgICAgIHBhZ2luYXRvckNvbmZpZ3VyYXRpb24/LnBhZ2VTaXplU2V0ID8/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFBhZ2luYXRvclN0YXRlLnBhZ2VTaXplU2V0LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gdXBkYXRlIG9ubHkgaWYgbmVlZGVkIHRvIGF2b2lkIGFkZGl0aW9uYWwgY2FsbHMgdG8gZHNcbiAgICAgICAgICAgIGlmICghaXNFcXVhbChtb2RpZmllZENvbmZpZ3VyYXRpb24sIHtcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3JTdGF0ZS5wYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZVNldDogdGhpcy5wYWdpbmF0b3JTdGF0ZS5wYWdlU2l6ZVNldCxcbiAgICAgICAgICAgIH0gKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUGFnaW5hdG9yU3RhdGUobW9kaWZpZWRDb25maWd1cmF0aW9uKTtcbiAgICAgICAgICAgICAgICB0aGlzLndpZGdldC5ldmVudEJ1cy5nZXRTdHJlYW0oU0VUX05FWFRfUEFHRSkubmV4dCh7fSk7XG4gICAgICAgICAgICAgICAgdGhpcy53aWRnZXQuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBwYWdlIGFuZCB0b3RhbCBhcmUgZHluYW1pY2FsbHkgc2V0XG4gICAgICAgICAgICB0aGlzLndpZGdldC5kYXRhU291cmNlLm91dHB1dHNTdWJqZWN0XG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMud2lkZ2V0Lm9uRGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IElOb3ZhRmlsdGVyaW5nT3V0cHV0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRvclN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsOiBkYXRhLnBhZ2luYXRvcj8udG90YWwgPz8gMCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlcmVnaXN0ZXJQYWdpbmF0b3IoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUGFnaW5hdG9yU3RhdGUocGFyYW06IFBhcnRpYWw8SVBhZ2luYXRvclN0YXRlPikge1xuICAgICAgICB0aGlzLnBhZ2luYXRvclN0YXRlID0ge1xuICAgICAgICAgICAgLi4udGhpcy5wYWdpbmF0b3JTdGF0ZSxcbiAgICAgICAgICAgIC4uLnBhcmFtLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgbGlzdGVuUGFnaW5hdG9yQ2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy53aWRnZXQuZXZlbnRCdXNcbiAgICAgICAgICAgIC5nZXRTdHJlYW0oU0VUX05FWFRfUEFHRSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLndpZGdldC5vbkRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgcGF5bG9hZCB9OiBJRXZlbnQ8YW55PikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUGFnaW5hdG9yU3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICBwYWdlOiBwYXlsb2FkLnBhZ2UgPz8gMSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxufVxuIl19