UNPKG

@nova-ui/bits

Version:

SolarWinds Nova Framework

67 lines 10.2 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 { BehaviorSubject, Subject } from "rxjs"; import { switchMap, takeUntil, tap } from "rxjs/operators"; import { DataSourceService } from "./data-source.service"; import * as i0 from "@angular/core"; /** * <example-url>./../examples/index.html#/common/server-side-data-source</example-url> */ export class ServerSideDataSource extends DataSourceService { constructor() { super(); this.busy = new BehaviorSubject(false); this.applyFilters$ = new Subject(); this.destroy$ = new Subject(); this.setupFilters(); } setupFilters() { this.applyFilters$ .pipe(tap((filters) => this.beforeApplyFilters(filters)), switchMap((filters) => this.getBackendData(filters)), tap(async (data) => this.afterApplyFilters(data)), takeUntil(this.destroy$)) .subscribe(); } // make sure we clean upon service destruction ngOnDestroy() { this.destroy$.next(); this.destroy$.complete(); this.busy.complete(); } beforeApplyFilters(filters) { // show the loader this.busy.next(true); this.shouldResetFilters(filters); } async afterApplyFilters(data) { await super.afterApplyFilters(data); // no matter if the backend response was successful or not, // we need to hide our loader and reset the filters this.busy.next(false); } async applyFilters() { this.applyFilters$.next(this.getFilters()); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ServerSideDataSource, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ServerSideDataSource }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ServerSideDataSource, decorators: [{ type: Injectable }], ctorParameters: () => [] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLXNpZGUtc291cmNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvZGF0YS1zb3VyY2Uvc2VydmVyLXNpZGUtc291cmNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseURBQXlEO0FBQ3pELEVBQUU7QUFDRiwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLDREQUE0RDtBQUM1RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLHVEQUF1RDtBQUN2RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFDL0UsMEVBQTBFO0FBQzFFLGlGQUFpRjtBQUNqRiw2RUFBNkU7QUFDN0UsaUJBQWlCO0FBRWpCLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBRzFEOztHQUVHO0FBRUgsTUFBTSxPQUFnQixvQkFLbEIsU0FBUSxpQkFBb0I7SUFRNUI7UUFDSSxLQUFLLEVBQUUsQ0FBQztRQU5MLFNBQUksR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUvQixrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFLLENBQUM7UUFDakMsYUFBUSxHQUFrQixJQUFJLE9BQU8sRUFBUSxDQUFDO1FBS3BELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRVMsWUFBWTtRQUNsQixJQUFJLENBQUMsYUFBYTthQUNiLElBQUksQ0FDRCxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUNsRCxTQUFTLENBQUMsQ0FBQyxPQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDdkQsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUNwRCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUMzQjthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCw4Q0FBOEM7SUFDdkMsV0FBVztRQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxPQUFVO1FBQ25DLGtCQUFrQjtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyQixJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVTLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFPO1FBQ3JDLE1BQU0sS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXBDLDJEQUEyRDtRQUMzRCxtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVNLEtBQUssQ0FBQyxZQUFZO1FBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQU8sQ0FBQyxDQUFDO0lBQ3BELENBQUM7K0dBdERpQixvQkFBb0I7bUhBQXBCLG9CQUFvQjs7NEZBQXBCLG9CQUFvQjtrQkFEekMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8vIMKpIDIwMjIgU29sYXJXaW5kcyBXb3JsZHdpZGUsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbi8vICBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyAgVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcblxuaW1wb3J0IHsgRGF0YVNvdXJjZVNlcnZpY2UgfSBmcm9tIFwiLi9kYXRhLXNvdXJjZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBJRmlsdGVyaW5nT3V0cHV0cywgSUZpbHRlcnMgfSBmcm9tIFwiLi9wdWJsaWMtYXBpXCI7XG5cbi8qKlxuICogPGV4YW1wbGUtdXJsPi4vLi4vZXhhbXBsZXMvaW5kZXguaHRtbCMvY29tbW9uL3NlcnZlci1zaWRlLWRhdGEtc291cmNlPC9leGFtcGxlLXVybD5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNlcnZlclNpZGVEYXRhU291cmNlPFxuICAgICAgICBULFxuICAgICAgICBGIGV4dGVuZHMgSUZpbHRlcnMgPSBJRmlsdGVycyxcbiAgICAgICAgRCBleHRlbmRzIElGaWx0ZXJzID0gSUZpbHRlcnNcbiAgICA+XG4gICAgZXh0ZW5kcyBEYXRhU291cmNlU2VydmljZTxUPlxuICAgIGltcGxlbWVudHMgT25EZXN0cm95XG57XG4gICAgcHVibGljIGJ1c3kgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIHByb3RlY3RlZCBhcHBseUZpbHRlcnMkID0gbmV3IFN1YmplY3Q8Rj4oKTtcbiAgICBwcm90ZWN0ZWQgZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5zZXR1cEZpbHRlcnMoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2V0dXBGaWx0ZXJzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycyRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoZmlsdGVycykgPT4gdGhpcy5iZWZvcmVBcHBseUZpbHRlcnMoZmlsdGVycykpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoZmlsdGVyczogRikgPT4gdGhpcy5nZXRCYWNrZW5kRGF0YShmaWx0ZXJzKSksXG4gICAgICAgICAgICAgICAgdGFwKGFzeW5jIChkYXRhOiBEKSA9PiB0aGlzLmFmdGVyQXBwbHlGaWx0ZXJzKGRhdGEpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIHN1cmUgd2UgY2xlYW4gdXBvbiBzZXJ2aWNlIGRlc3RydWN0aW9uXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmJ1c3kuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYmVmb3JlQXBwbHlGaWx0ZXJzKGZpbHRlcnM6IEYpOiB2b2lkIHtcbiAgICAgICAgLy8gc2hvdyB0aGUgbG9hZGVyXG4gICAgICAgIHRoaXMuYnVzeS5uZXh0KHRydWUpO1xuXG4gICAgICAgIHRoaXMuc2hvdWxkUmVzZXRGaWx0ZXJzKGZpbHRlcnMpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBhZnRlckFwcGx5RmlsdGVycyhkYXRhOiBEKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHN1cGVyLmFmdGVyQXBwbHlGaWx0ZXJzKGRhdGEpO1xuXG4gICAgICAgIC8vIG5vIG1hdHRlciBpZiB0aGUgYmFja2VuZCByZXNwb25zZSB3YXMgc3VjY2Vzc2Z1bCBvciBub3QsXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gaGlkZSBvdXIgbG9hZGVyIGFuZCByZXNldCB0aGUgZmlsdGVyc1xuICAgICAgICB0aGlzLmJ1c3kubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGFwcGx5RmlsdGVycygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMkLm5leHQodGhpcy5nZXRGaWx0ZXJzKCkgYXMgRik7XG4gICAgfVxuXG4gICAgcHVibGljIGFic3RyYWN0IGdldEZpbHRlcmVkRGF0YShkYXRhOiBEKTogUHJvbWlzZTxJRmlsdGVyaW5nT3V0cHV0cz47XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0QmFja2VuZERhdGEoZmlsdGVyczogRik6IE9ic2VydmFibGU8RD47XG59XG4iXX0=